Python(NumPy)のpolyroots()メソッドで多項式の根を計算する方法
PythonのNumPyでは、polynomial.polyroots()メソッドを使うことで、多項式の根(解)を簡単に計算できます。このメソッドは、多項式の根を配列として返します。すべての根が実数である場合、出力も実数型になり、そうでない場合は複素数型になります。引数cには、多項式の係数を低次の項から順に並べた1次元配列を指定します。
根の推定値は、コンパニオン行列(companion matrix)の固有値として求められます。ここで注意すべき点が2つあります。第一に、複素平面上で原点から大きく離れた根は、べき級数表現の数値的不安定性の影響を受け、大きな誤差を持つ可能性があります。第二に、重複度が1より大きい根(重根)も誤差が大きくなりやすい傾向があります。これは、そのような点付近では級数の値が根の誤差に対して比較的鈍感になるためです。なお、原点付近の孤立した根については、ニュートン法を数回反復適用することで精度を改善できます。
計算の手順
まず、必要なライブラリをインポートします。
from numpy.polynomial import polynomial as P
次に、polynomial.polyroots()メソッドを使って多項式の根を計算します。ここでは、係数 (-1, 0, 1) を持つ多項式、すなわち x² − 1 = 0 の根を求めています。
print("Result (roots of a polynomial)...\n",P.polyroots((-1,0,1)))結果のデータ型を確認します。
print("\nType...\n",P.polyroots((-1,0,1)).dtype)結果の形状(shape)を確認します。
print("\nShape...\n",P.polyroots((-1,0,1)).shape)完全なコード例
from numpy.polynomial import polynomial as P
# Python Numpy の polynomial.polyroots() メソッドで多項式の根を計算する
# 戻り値は根の配列。すべての根が実数なら実数、そうでなければ複素数になる
# 引数 c には多項式の係数を1次元配列で指定する
print("Result (roots of a polynomial)...\n",P.polyroots((-1,0,1)))
# データ型を取得
print("\nType...\n",P.polyroots((-1,0,1)).dtype)
# 形状を取得
print("\nShape...\n",P.polyroots((-1,0,1)).shape)出力結果
Result (roots of a polynomial)... [-1. 1.] Type... float64 Shape... (2,)
この例では、x² − 1 = 0 の根として -1 と 1 が返されました。両方とも実数のため、データ型は float64 となり、根が2個あるため形状は (2,) になっています。もし根に虚数が含まれる場合は、結果は自動的に複素数型(complex128)で返されます。
-
Pythonで双曲線正接(tanh)を計算する方法|NumPyのtanh()関数の使い方
PythonのNumPyで双曲線正接(ハイパボリックタンジェント)を計算するには、numpy.tanh()メソッドを使用します。この関数は np.sinh(x)/np.cosh(x) または -1j * np.tan(1j*x) と等価であり、入力値に対応する双曲線正接の値を返します。スカラー値を渡した場合、結果もスカラーとして返されます。 numpy.tanh()の主なパラメータ 第1引数(x): 入力配列を指定します。 第2引数(out・任意): 計算結果を格納するndarrayを指定します。指定する場合は、入力がブロードキャストされる形状と一致している必要があります。省略した場合やNon
-
Pythonで多項式を計算する方法:リストと反復処理を使った実装例
Pythonで多項式を計算する必要がある場合、単純な反復処理(ループ)と「*」演算子を組み合わせることで簡単に実装できます。リストの各要素を多項式の係数として扱い、指定した x の値に対する多項式の値を求める仕組みです。 サンプルコード 以下に具体的な実装例を示します。 my_list = [3, -6, 3, -1, 23, -11, 0, -8] print(The list is :) print(my_list) x = 3 my_list_length = len(my_list) my_result = 0 for i in range(my_list_length):