NumPyで多項式の根を求める:polynomial.polynomial.polyzero徹底解説
NumPyのPolynomialsにおけるpolynomial.polynomial.polyzero解説
polynomial.polynomial.polyzero
は、多項式の根を求める関数です。この関数は、与えられた多項式の根をすべて返します。
インポート
まず、numpy
とpolynomial
モジュールをインポートする必要があります。
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()
roots1
とroots2
は、それぞれpoly1
とpoly2
の根を複素数として格納した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には、roots
やpolyfit
などの多項式の根を求める関数も用意されています。
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ライブラリには、roots
やpoly
などの多項式の根を求める関数も用意されています。
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 を用いたメモリ管理: void PyDimMem_FREE() 関数を中心に
void PyDimMem_FREE() は、NumPy C-API におけるメモリ管理関数の一つで、NumPy 配列のメモリ割り当てを解除します。機能NumPy 配列が保持するメモリブロックを解放します。配列がヌルポインタの場合は無効です。
NumPy C-API: PyArray_GETPTR2() 関数で多次元配列を自在に操る - 高速アクセスとデータ操作
関数概要:引数:arr: 要素へのポインタを取得したいNumPy配列オブジェクトへのポインタind: 各次元におけるインデックスを表す整数配列へのポインタstrides: 各次元におけるストライドを表す整数配列へのポインタ(オプション)戻り値:
NumPy C-API: 連続メモリ領域から NumPy 配列を効率的に生成する「PyArray_CLT()」関数
使い方引数p: データポインタndims: データの次元数dimensions: 各次元のサイズを表す配列order: データの格納順序 (NPY_CORDER または NPY_FORTRANORDER)dtype: データ型flags: NumPy 配列のフラグ (NPY_ARRAY_CARRAY
NumPy char.chararray.isnumeric() 関数:詳細解説と応用例
NumPyのchararrayオブジェクトは、文字列データの操作に特化した機能を提供します。char. chararray. isnumeric()関数は、chararrayオブジェクト内の各要素が数字のみで構成されているかどうかを判定するものです。
欠損値処理はもう怖くない! NumPy の MaskedArray オブジェクトと ma.MaskedArray.__float__() メソッドでスマートに処理しよう
NumPy の ma. MaskedArray オブジェクトは、欠損値を含むデータ配列を扱うための強力なツールです。ma. MaskedArray. __float__() メソッドは、MaskedArray オブジェクトを浮動小数点型に変換します。
NumPy record.argmin() の概要
概要record. argmin(axis=None) 指定された列の最小値を持つレコードのインデックスを返します。 複数列を指定する場合は、各列の最小値を持つレコードのインデックスを含む配列を返します。指定された列の最小値を持つレコードのインデックスを返します。
異なるエンディアンのコンピュータ間で NumPy recarray を使用する方法
recarray. byteswap() は、以下の引数を受け取ります。inplace: bool 型。デフォルトは False。True に設定すると、元の配列を書き換えます。このメソッドは、以下の動作を行います。数値型の要素のバイト順序を切り替えます。
Python でランダムサンプリング:NumPy Bit Generator の威力
従来のランダムサンプリングNumPy v1. 17以前では、numpy. randomモジュールを使ってランダムサンプリングを行っていました。この方法は、以下のような特徴があります。random. random() などの関数を使って、直接乱数を生成する