このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
多項式の根
この例では、多項式の根を計算するためのいくつかの異なる方法を示します。
数値根
関数 roots
は、係数ベクトルで表される 1 変数多項式の根を計算します。
たとえば、多項式 を表現するベクトルを作成し、次に根を計算します。
p = [1 -1 -6]; r = roots(p)
r = 3 -2
慣例により、MATLAB® は根を列ベクトルで返します。
関数 poly
は根を多項式の係数に変換し直します。ベクトルの演算では、poly
と roots
は逆関数の関係となり、poly(roots(p))
は p
を返します (丸め誤差、順序、スケーリングを除く)。
p2 = poly(r)
p2 = 1 -1 -6
行列の演算では、関数 poly
は行列の特性多項式を計算します。特性多項式の根は行列の固有値です。したがって、roots(poly(A))
と eig(A)
は同じ解を返します (丸め誤差、順序、スケーリングを除く)。
代入を使用した根
代入を使用して方程式を単純化することで、三角関数が含まれる多項方程式を解くことができます。結果として得られる 1 変数の多項式に三角関数は含まれません。
たとえば、次の方程式を解く の値を求めます。
という事実を利用して、正弦関数によって方程式全体を表します。
代入 を使用して、方程式を単純な多項方程式として表現します。
多項式を表すベクトルを作成します。
p = [-3 -1 6];
多項式の根を求めます。
r = roots(p)
r = 2×1
-1.5907
1.2573
代入を元に戻すには、 を使用します。関数 asin
で逆正弦を計算します。
theta = asin(r)
theta = 2×1 complex
-1.5708 + 1.0395i
1.5708 - 0.7028i
theta
内の要素が (丸め誤差の範囲内で) 元の方程式を解く の値であることを確認します。
f = @(Z) 3*cos(Z).^2 - sin(Z) + 3; f(theta)
ans = 2×1 complex
10-14 ×
-0.0888 + 0.0647i
0.2665 + 0.0399i
特定の区間内の根
関数 fzero
を使用して、特定の区間内にある多項式の根を求めます。この方法は、いくつかある用途の中で特に多項式をプロットして特定の根の値を調べる場合に適しています。
たとえば、多項式 を表す関数ハンドルを作成します。
p = @(x) 3*x.^7 + 4*x.^6 + 2*x.^5 + 4*x.^4 + x.^3 + 5*x.^2;
の区間でこの関数をプロットします。
x = -2:0.1:1; plot(x,p(x)) ylim([-100 50]) grid on hold on
プロットから、多項式には自明な根が 0
にあり、もう 1 つの根が -1.5
付近にあることがわかります。fzero
を使用して -1.5
付近の根を計算し、プロットします。
Z = fzero(p, -1.5)
Z = -1.6056
plot(Z,p(Z),'r*')
シンボリックな根
Symbolic Math Toolbox™ を所有している場合は、多項式をシンボリックに評価するための追加オプションがあります。1 つは、関数 solve
(Symbolic Math Toolbox) を使用する方法です。
syms x
s = solve(x^2-x-6)
s = -2 3
もう 1 つは、関数 factor
(Symbolic Math Toolbox) を使用して多項式の項を因数分解する方法です。
F = factor(x^2-x-6)
F = [ x + 2, x - 3]
詳細については、代数方程式の求解 (Symbolic Math Toolbox)を参照してください。