Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

多項式の根

この例では、多項式の根を計算するためのいくつかの異なる方法を示します。

数値根

関数 roots は、係数ベクトルで表される 1 変数多項式の根を計算します。

たとえば、多項式 x2x6 を表現するベクトルを作成し、次に根を計算します。

p = [1 -1 -6];
r = roots(p)
r =

     3
    -2

慣例により、MATLAB® は根を列ベクトルで返します。

関数 poly は根を多項式の係数に変換し直します。ベクトルの演算では、polyroots は逆関数の関係となり、poly(roots(p))p を返します (丸め誤差、次数、スケーリング次第)。

p2 = poly(r)
p2 =

     1    -1    -6

行列の演算では、関数 poly は行列の特性多項式を計算します。特性多項式の根は行列の固有値です。したがって、roots(poly(A))eig(A) は同じ解を返します (丸め誤差、次数、スケーリング次第)。

代入を使用した根

代入を使用して方程式を単純化することで、三角関数が含まれる多項方程式を解くことができます。結果として得られる 1 変数の多項式に三角関数は含まれません。

たとえば、次の方程式を解く θ の値を求めます。

3cos2(θ)-sin(θ)+3=0.

cos2(θ)=1-sin2(θ) という事実を利用して、正弦関数によって方程式全体を表します。

-3sin2(θ)-sin(θ)+6=0.

代入 x=sin(θ) を使用して、方程式を単純な多項方程式として表現します。

-3x2-x+6=0.

多項式を表すベクトルを作成します。

p = [-3 -1 6];

多項式の根を求めます。

r = roots(p)
r = 2×1

   -1.5907
    1.2573

代入を元に戻すには、θ=sin-1(x) を使用します。関数 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 を使用して、特定の区間内にある多項式の根を求めます。この方法は、いくつかある用途の中で特に多項式をプロットして特定の根の値を調べる場合に適しています。

たとえば、多項式 3x7+4x6+2x5+4x4+x3+5x2 を表す関数ハンドルを作成します。

p = @(x) 3*x.^7 + 4*x.^6 + 2*x.^5 + 4*x.^4 + x.^3 + 5*x.^2;

[-2,1] の区間でこの関数をプロットします。

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)を参照してください。

参考

| |

関連するトピック