Pythonで複素数の根を持つラゲール級数を生成する方法
PythonのNumPyライブラリでは、numpy.polynomial.laguerreモジュールに含まれるlaguerre.lagfromroots()メソッドを使用することで、指定した根(解)を持つラゲール級数を簡単に生成できます。
このメソッドは、ラゲール級数の係数を格納した1次元配列を返します。重要なポイントとして、すべての根が実数であれば結果は実数配列になりますが、根の一部でも複素数が含まれている場合は、計算結果の係数がすべて実数であったとしても、出力は複素数型の配列になります。
引数rootsには、求めたい根を要素として含むシーケンス(リストやタプルなど)を渡します。
実行手順
まず、必要なライブラリをインポートします。
from numpy.polynomial import laguerre as L
次に、虚数単位jを定義し、lagfromroots()メソッドに共役な複素数のペア(-j と j)を根として渡して、ラゲール級数を生成します。
j = complex(0,1)
print("Result...\n", L.lagfromroots((-j, j)))続いて、生成された配列のデータ型(dtype)を確認します。
print("\nType...\n", L.lagfromroots((-j, j)).dtype)さらに、配列の形状(shape)も確認してみましょう。
print("\nShape...\n", L.lagfromroots((-j, j)).shape)サンプルコード全体
from numpy.polynomial import laguerre as L
# lagfromroots()メソッドで、指定した根を持つラゲール級数を生成する
# 戻り値は係数の1次元配列。根に複素数が含まれる場合、
# 結果の係数が実数でも出力は複素数型になる点に注意。
j = complex(0,1)
print("Result...\n", L.lagfromroots((-j, j)))
# データ型を取得
print("\nType...\n", L.lagfromroots((-j, j)).dtype)
# 形状を取得
print("\nShape...\n", L.lagfromroots((-j, j)).shape)実行結果
Result...
[ 3.+0.j -4.+0.j 2.-0.j]
Type...
complex128
Shape...
(3,)結果の解説
実行結果から、以下のことがわかります。
- 根として
-jとjを渡すと、係数[3.+0.j, -4.+0.j, 2.-0.j]のラゲール級数が得られます。虚部は0ですが、データ型は複素数になっています。 - データ型は
complex128(倍精度複素数)です。これは、入力の根に複素数が含まれていたためです。 - 配列の形状は
(3,)、つまり3つの係数を持つ1次元配列であることを示しています。
このように、lagfromroots()メソッドを使えば、根から直接ラゲール多項式の係数を求めることができ、複素数の根にも柔軟に対応できます。
-
Pythonで複素数の点配列を使って指定した次数のファンデルモンド行列を生成する方法
PythonのNumPyでは、numpy.polynomial.polynomialモジュールに含まれるpolyvander()関数を使用することで、指定した次数のファンデルモンド行列(Vandermonde行列)を簡単に生成できます。この関数は、入力された点の配列に対するファンデルモンド行列を返します。戻り値となる行列の形状は x.shape + (deg + 1,) であり、最後のインデックスがxの冪乗(べきじょう)に対応します。また、データ型(dtype)は変換後のxと同じものが使用されます。polyvander()関数のパラメータa:点の配列です。要素に複素数が含まれる場合はcompl
-
Pythonで与えられた根を持つモニック多項式を生成する方法
PythonのNumPyで指定した根を持つモニック多項式(最高次の係数が1になる多項式)を生成するには、polynomial.polyfromroots()メソッドを使用します。このメソッドは、多項式の係数を1次元配列として返します。すべての根が実数の場合は出力も実数となり、虚数の根が含まれる場合は複素数となります。引数rootsには、根を要素として含むシーケンスを渡します。手順まず、必要なライブラリをインポートします。from numpy.polynomial import polynomial as Pモニック多項式を生成します。print(Result...\n,P.polyfromro