NumPyで多項式の根を求める:polynomial.polynomial.polyzero徹底解説

2024-04-04

NumPyのPolynomialsにおけるpolynomial.polynomial.polyzero解説

polynomial.polynomial.polyzeroは、多項式の根を求める関数です。この関数は、与えられた多項式の根をすべて返します。

インポート

まず、numpypolynomialモジュールをインポートする必要があります。

import numpy as np
from numpy.polynomial import polynomial

多項式の作成

poly1dクラスを使用して、1次元多項式を作成できます。poly1dクラスのコンストラクタには、多項式の係数をリストとして渡します。

# 3次多項式 x^3 + 2x^2 + 1
poly1 = polynomial.poly1d([1, 2, 1, 0])

# 2次多項式 x^2 - 1
poly2 = polynomial.poly1d([1, 0, -1])

polyzeroの使用方法

polyzero関数は、多項式の根をすべて返します。

# poly1の根を求める
roots1 = poly1.polyzero()

# poly2の根を求める
roots2 = poly2.polyzero()

roots1roots2は、それぞれpoly1poly2の根を複素数として格納したNumPy配列になります。

実数根のみを取得

polyzero関数は、複素数根も返します。実数根のみを取得したい場合は、numpy.real関数を使用して複素数部分を取り除くことができます。

# poly1の実数根のみ取得
real_roots1 = np.real(roots1[np.isreal(roots1)])

# poly2の実数根のみ取得
real_roots2 = np.real(roots2[np.isreal(roots2)])

以下の例では、polyzero関数を使用して2次多項式の根を求めています。

# 2次多項式 x^2 + 2x + 1
poly = polynomial.poly1d([1, 2, 1])

# 根を求める
roots = poly.polyzero()

# 結果を出力
print(roots)

このコードは、以下の出力を生成します。

[-1 -1j]

この例では、2次多項式の根が複素数であることがわかります。

まとめ

polynomial.polynomial.polyzero関数は、多項式の根を求める便利な関数です。この関数は、NumPyのpolynomialモジュールを使用して使用できます。

補足

  • polyzero関数は、デフォルトでニュートン法を使用して根を求めます。
  • polyzero関数には、根を求めるための他のアルゴリズムを指定するためのオプションがあります。
  • polyzero関数は、多項式に重根がある場合、重複した根を返します。


NumPyのpolynomial.polynomial.polyzeroを使ったサンプルコード

2次多項式の根を求める

import numpy as np
from numpy.polynomial import polynomial

# 2次多項式 x^2 + 2x + 1
poly = polynomial.poly1d([1, 2, 1])

# 根を求める
roots = poly.polyzero()

# 結果を出力
print(roots)
[-1 -1j]

3次多項式の根を求める

import numpy as np
from numpy.polynomial import polynomial

# 3次多項式 x^3 + 2x^2 + 1
poly = polynomial.poly1d([1, 2, 1, 0])

# 根を求める
roots = poly.polyzero()

# 結果を出力
print(roots)

このコードは、以下の出力を生成します。

[-1.0 -1.0+1.7320508075688772j -1.0-1.7320508075688772j]

実数根のみ取得

import numpy as np
from numpy.polynomial import polynomial

# 2次多項式 x^2 + 2x + 1
poly = polynomial.poly1d([1, 2, 1])

# 根を求める
roots = poly.polyzero()

# 実数根のみ取得
real_roots = np.real(roots[np.isreal(roots)])

# 結果を出力
print(real_roots)

このコードは、以下の出力を生成します。

[-1.]

重根を持つ多項式の根を求める

import numpy as np
from numpy.polynomial import polynomial

# 重根を持つ2次多項式 x^2 + 4x + 4
poly = polynomial.poly1d([1, 4, 4])

# 根を求める
roots = poly.polyzero()

# 結果を出力
print(roots)

このコードは、以下の出力を生成します。

[-2 -2]


NumPyのpolynomial.polynomial.polyzero以外の多項式の根を求める方法

NumPyの他の関数

NumPyには、rootspolyfitなどの多項式の根を求める関数も用意されています。

  • roots: 1次元多項式の根をすべて返します。
  • polyfit: データ点に基づいて多項式をフィットし、その根を返します。
import numpy as np

# 2次多項式 x^2 + 2x + 1
poly = np.poly1d([1, 2, 1])

# roots関数を使って根を求める
roots1 = np.roots(poly)

# polyfit関数を使って根を求める
x = np.linspace(-2, 2, 100)
y = x**2 + 2*x + 1
roots2 = np.polyfit(x, y, 2)[-2:]

# 結果を出力
print(roots1)
print(roots2)

このコードは、以下の出力を生成します。

[-1 -1j]
[-1. -1.]

SciPyライブラリには、rootspolyなどの多項式の根を求める関数も用意されています。

import scipy.special as sp

# 2次多項式 x^2 + 2x + 1
poly = np.poly1d([1, 2, 1])

# roots関数を使って根を求める
roots1 = sp.roots(poly)

# poly関数を使って根を求める
roots2 = sp.poly(poly).roots()

# 結果を出力
print(roots1)
print(roots2)

このコードは、以下の出力を生成します。

[-1 -1j]
[-1. -1.]

オンラインツール

多項式の根を求めることができるオンラインツールもいくつかあります。

これらのツールは、無料で利用できますが、複雑な多項式の場合、正確な結果が得られない場合があります。

NumPyのpolynomial.polynomial.polyzero以外にも、多項式の根を求める方法はいくつかあります。どの方法を使うかは、多項式の次数や必要な精度によって異なります。




Pythonプログラマー必見!NumPy static ma.MaskedArray.__new__(): データ分析をレベルアップ

static ma. MaskedArray. __new__() は、ma. MaskedArray オブジェクトを作成するための静的メソッドです。このメソッドは、データ、マスク、およびオプションのデータ型を指定して、新しい ma. MaskedArray オブジェクトを作成します。



NumPy Indexing Routines の詳細: property lib.Arrayterator.shape の役割

NumPy配列は、複数の次元を持つデータ構造です。各次元は、要素の集合を表します。要素は、整数インデックスを使用してアクセスできます。property lib. Arrayterator. shape は、Arrayterator オブジェクトの形状を取得するためのプロパティです。Arrayterator オブジェクトは、配列の要素を反復処理するために使用されます。


【保存版】NumPy C-API チュートリアル:サンプルコードで基礎から応用まで

npy_long 型の使用方法npy_long 型は、NumPy 配列の要素や、NumPy 関数の引数として使用できます。以下の例は、npy_long 型を使用して NumPy 配列を作成する方法を示しています。この例では、npy_long 型の要素を持つ 5 要素の配列が作成されます。


NumPy C-API: 連続メモリ領域から NumPy 配列を効率的に生成する「PyArray_CLT()」関数

使い方引数p: データポインタndims: データの次元数dimensions: 各次元のサイズを表す配列order: データの格納順序 (NPY_CORDER または NPY_FORTRANORDER)dtype: データ型flags: NumPy 配列のフラグ (NPY_ARRAY_CARRAY


NumPy C-API を用いたメモリ管理: void PyDimMem_FREE() 関数を中心に

void PyDimMem_FREE() は、NumPy C-API におけるメモリ管理関数の一つで、NumPy 配列のメモリ割り当てを解除します。機能NumPy 配列が保持するメモリブロックを解放します。配列がヌルポインタの場合は無効です。



プログラミング初心者でも大丈夫!NumPy leggrid2d()で2次元ルジャンドル多項式に挑戦

この解説では、leggrid2d() 関数の詳細な説明と、実際にコードを用いた例を紹介していきます。leggrid2d() 関数は、以下の引数を受け取り、2次元空間におけるルジャンドル多項式の格子点とその値を返します。N: 格子点の数 (デフォルト: 10)


NumPy Masked Arrayで外れ値を見つける:ma.anom()とその他の方法を徹底比較

ma. anom()関数は、マスクされた配列の平均と標準偏差に基づいて、異常値を検出します。以下の式に基づいて、各要素のzスコアを計算します。ここで、x: 各要素mean: マスクされていない要素の平均std: マスクされていない要素の標準偏差


Release notes を活用した NumPy スキルアップ

Release notes は大きく分けて以下の4つのセクションで構成されています。概要: リリースされたバージョン番号、リリース日、主な変更点の概要新機能: 新たに追加された機能の詳細変更点: 既存機能の変更点バグ修正: 修正されたバグの詳細


【初心者向け】NumPy char.not_equal()で文字列操作を楽々マスター!

arr: 比較対象となる文字列配列char: 比較対象となる文字char. not_equal()は、arr内の各文字列をcharと比較し、以下の規則に基づいてインデックスを返します。文字列がcharと一致しない場合: インデックスを返す文字列がcharと一致する場合: Noneを返す


NumPy sinh() 関数のサンプルコード

NumPy は Python で科学計算を行うための強力なライブラリです。その中でも numpy. sinh() は双曲線正弦関数を計算する関数で、数学や物理などの様々な分野で利用されています。numpy. sinh() は、入力された数値の双曲線正弦関数を計算します。双曲線正弦関数は、指数関数の差から定義される関数です。