Mathieu関数の特性値の精度

nAG Library for Python Example集

このページは、nAGライブラリのJupyterノートブックExampleの日本語翻訳版です。オリジナルのノートブックはインタラクティブに操作することができます。

Mathieu関数の特性値の精度

Mathieu関数を正確に計算することは難しく、この主題に関する多くの論文があります。ここでは、StackOverflowの質問から取り上げた例を示し、SciPyの実装が時折苦戦することを示します。nAGの実装は、右側のプロットに示されているように正しい結果を計算します。

%matplotlib inline
import numpy as np
import scipy as sp
import scipy.special as spfun
from naginterfaces.library import specfun
from matplotlib import pyplot as plt

uplim = 150 #E_rec
Npts = 4000
Nstates = 10
q = np.linspace(0, uplim/4.0, Npts)
EA = np.zeros([Npts,Nstates])
EB = np.zeros([Npts,Nstates])
U = 4*q 

plt.figure(figsize=(15,8))
plt.subplot(1,2,1)
plt.title('Using SciPy')

for i in range(Nstates):
    a = spfun.mathieu_a(i,q)
    b = spfun.mathieu_b(i+1,q)
    EA[:,i] = a + 2*q
    EB[:,i] = b + 2*q
    plt.fill_between(U, EA[:,i], EB[:,i])

plt.subplot(1,2,2)
plt.title('Using nAG')

for i in range(Nstates):
    a = [specfun.mathieu_ang_periodic_real(ordval=i, q=qi, parity=0, mode=3).a for qi in q]
    b = [specfun.mathieu_ang_periodic_real(ordval=i+1, q=qi, parity=1, mode=3).a for qi in q]
    EA[:,i] = a + 2*q
    EB[:,i] = b + 2*q 
    plt.fill_between(U, EA[:,i], EB[:,i]) 

plt.show()
png

バージョン情報

sp.__version__
'1.8.0'
import naginterfaces as ni
ni.__version__
'28.3.0.1'
関連情報
MENU
Privacy Policy  /  Trademarks