Python NumPyで複素数係数のHermiteE級数の根を計算する方法
PythonのNumPyライブラリでは、numpy.polynomial.hermite_eモジュールに含まれるhermeroots()メソッドを使うことで、HermiteE級数(確率論的エルミート多項式の級数)の根を簡単に求めることができます。
このメソッドは、級数の根を格納した配列を返します。すべての根が実数であれば結果も実数配列になり、そうでなければ複素数配列として返されます。
hermeroots()メソッドの特徴と注意点
引数 c には、級数の係数を要素とする1次元配列を指定します。根の推定値はコンパニオン行列(companion matrix)の固有値として計算されますが、以下のような注意点があります。
- 複素平面上で原点から大きく離れた根は、そのような値に対する級数の数値的不安定性のため、誤差が大きくなる可能性があります。
- 重解(重複度が1より大きい根)も、その点付近での級数の値が根の誤差に比較的鈍感なため、誤差が大きくなりやすい傾向があります。
- 原点付近の孤立した根については、ニュートン法を数回反復適用することで精度を改善できます。
計算手順
まず、必要なライブラリをインポートします。
from numpy.polynomial import hermite_e as H
HermiteE級数の根を計算します。ここでは、虚数単位 j を使った複素数係数の例を扱います。
j = complex(0,1)
print("Result...\n", H.hermeroots((-j, j)))
結果のデータ型(dtype)を確認します。
print("\nType...\n", H.hermeroots((-j, j)).dtype)
結果の形状(shape)を確認します。
print("\nShape...\n", H.hermeroots((-j, j)).shape)
サンプルコード
from numpy.polynomial import hermite_e as H
# hermeroots()メソッドを使ってHermiteE級数の根を計算する
# 戻り値は根の配列。すべての根が実数なら実数配列、
# そうでなければ複素数配列が返される
# 引数cは係数の1次元配列
j = complex(0,1)
print("Result...\n", H.hermeroots((-j, j)))
# データ型を取得
print("\nType...\n", H.hermeroots((-j, j)).dtype)
# 形状を取得
print("\nShape...\n", H.hermeroots((-j, j)).shape)
実行結果
Result...
[1.+0.j]
Type...
complex128
Shape...
(1,)
このように、複素数係数 (-j, j) を持つHermiteE級数の根は「1+0j」として求まり、結果は complex128 型、形状 (1,) の配列になっていることがわかります。
-
NumPyのchebyshev.chebroots()でチェビシェフ級数の根を計算する方法
多項式の根を計算するには、PythonのNumPyが提供する chebyshev.chebroots() メソッドを使用します。このメソッドは、チェビシェフ級数の根を配列として返します。すべての根が実数の場合は結果も実数配列となり、虚数を含む場合は複素数配列となります。引数 c には、係数を格納した1次元配列を指定します。根の推定値は、コンパニオン行列の固有値として求められます。複素平面上で原点から大きく離れた根は、そのような値において級数が数値的に不安定になるため、誤差が大きくなる傾向があります。また、重複度が2以上の根についても、根の近傍で級数の値が根の誤差に比較的鈍感なため、誤差が拡大し
-
Python NumPyで複素数の根を持つチェビシェフ級数を生成する方法
PythonのNumPyライブラリでは、指定した根を持つチェビシェフ級数を生成するために、chebyshev.chebfromroots()メソッドを使用します。このメソッドは、級数の係数を格納した1次元配列を返します。すべての根が実数であれば結果も実数配列になりますが、根の一部が複素数の場合は、計算結果の係数がすべて実数であっても、出力は複素数型(complex)になります。引数rootsには、根を要素とするシーケンスを渡します。なお、チェビシェフ級数とは、チェビシェフ多項式 Tn(x) を基底とした多項式の表現形式です。chebfromroots() を使えば、因数分解された形の情報(根)