Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python NumPyのpolyroots()で複素数の根を持つ多項式の根を計算する方法

PythonのNumPyライブラリでは、polynomial.polyroots()メソッドを使用することで、多項式の根(解)を簡単に計算できます。このメソッドは、多項式の根を格納した配列を返します。すべての根が実数の場合は結果も実数型になり、それ以外の場合は複素数型になります。引数 c には、多項式の係数を要素とする1次元配列を指定します。

polyroots()メソッドの仕組みと注意点

根の推定値は、コンパニオン行列の固有値として求められます。そのため、以下のような点に注意が必要です。

  • 複素平面上で原点から遠い位置にある根は、べき級数表現の数値的不安定性により、誤差が大きくなる可能性があります。
  • 重複度が2以上の根も、その点近傍での級数の値が根の誤差に対して比較的鈍感なため、誤差が大きくなりやすい傾向があります。
  • 原点付近の孤立した根については、ニュートン法を数回反復することで精度を改善できます。

手順

まず、必要なライブラリをインポートします。

from numpy.polynomial import polynomial as P

次に、polynomial.polyroots()メソッドを使って多項式の根を計算します。ここでは、虚数単位 j を用いた例を示します。

j = complex(0,1)
print("Result (roots of a polynomial)...\n",P.polyroots((-j,j)))

結果のデータ型を確認します。

print("\nType...\n",P.polyroots((-j, j)).dtype)

結果の形状(シェイプ)を確認します。

print("\nShape...\n",P.polyroots((-j, j)).shape)

完全なコード例

from numpy.polynomial import polynomial as P

# 多項式の根を計算するには polynomial.polyroots() メソッドを使用する

# このメソッドは多項式の根の配列を返す。
# すべての根が実数なら結果も実数、そうでなければ複素数になる。

# 引数 c は多項式の係数を格納した1次元配列。
j = complex(0,1)
print("Result (roots of a polynomial)...\n",P.polyroots((-j,j)))

# データ型を取得
print("\nType...\n",P.polyroots((-j, j)).dtype)

# 形状を取得
print("\nShape...\n",P.polyroots((-j, j)).shape)

出力結果

Result (roots of a polynomial)...
[1.+0.j]

Type...
complex128

Shape...
(1,)

この例では、係数 (-j, j) を持つ多項式、つまり -j + jx = 0 の根が 1.+0.j(実数の1)として正しく求められていることがわかります。また、入力に複素数が含まれているため、結果のデータ型は complex128 になっています。

  1. Python NumPyのemath.sqrt()メソッドで複素数入力の平方根を計算する方法

    入力値の平方根を計算するには、Python NumPyのemath.sqrt()メソッドを使用します。このメソッドは引数xの平方根を返します。xがスカラーであれば結果もスカラーとして返され、配列であれば配列として返されます。また、負の入力要素が含まれる場合には、自動的に複素数値が返されるのが特徴です。通常のnp.sqrt()では負の数を渡すとNaNが返されますが、np.emath.sqrt()(np.scimath.sqrt()のエイリアス)を使えば、負の数や複素数に対しても正しく複素数の平方根を求められます。手順まず、必要なライブラリをインポートします。import numpy as np次

  2. Pythonで与えられた根を持つモニック多項式を生成する方法

    PythonのNumPyで指定した根を持つモニック多項式(最高次の係数が1になる多項式)を生成するには、polynomial.polyfromroots()メソッドを使用します。このメソッドは、多項式の係数を1次元配列として返します。すべての根が実数の場合は出力も実数となり、虚数の根が含まれる場合は複素数となります。引数rootsには、根を要素として含むシーケンスを渡します。手順まず、必要なライブラリをインポートします。from numpy.polynomial import polynomial as Pモニック多項式を生成します。print(Result...\n,P.polyfromro