MATLAB Function Reference | ![]() ![]() |
表示
p = poly(A) p = poly(r)
詳細
A
が、n
行n
列の行列のとき、p = poly(A)
は、特性多項式 det(sI - A) の係数を要素にもつ n+1
個の要素からなる行ベクトルを出力します。係数は、次数の降順に並べられています。ベクトル c
が n+1
項をもつ場合、多項式はつぎのようになります。
pre>
p = poly(r)
は、r
が、多項式の根を要素にもつとき、p = poly(r)
は、その要素が多項式の係数である行ベクトルを出力します。
注意
r = roots(p)
の関係について注意してください。これは、多項式の係数となる行ベクトル p
によって指定される多項式の根を要素とする列ベクトルを出力します。ベクトルに対して、roots
と poly
は、順序付け、スケーリング、丸め誤差について、お互いが逆関数です。
例題
MATLAB は、降順に並んだ係数を含む行ベクトルとして、多項式を表現します。つぎの行列
A = 1 2 3 4 5 6 7 8 0
の特性方程式は、poly
によって行ベクトルとして出力されます。
p = poly(A) p = 1 -6 -72 -27
この多項式の根(行列 A
の固有値)は、roots
によって列ベクトルとして出力されます。
r = roots(p) r = 12.1229 -5.7345 -0.3884
アルゴリズム
poly
と roots
で使用されているアルゴリズムは、固有値計算に関する最新のアプローチを使っています。poly(A)
は、A
の特性多項式を作成し、roots(poly(A))
は、その多項式の根を計算します。この根は、A
の固有値になります。poly
と roots
は、共に、相似変換をベースにした eig
を使っています。特性多項式の根として、固有値を特徴付ける古典的なアプローチは、実際には使われていません。
A
が、n
行 n
列の行列の場合、poly(A)
は、係数 c(1)
から c(n+1)
までを作成します。ここで、つぎの関係にあり、c(1)
=
1
とします。
z = eig(A); c = zeros(n+1,1); c(1) = 1; for j = 1:n c(2:j+1) = c(2:j+1)-z(j)*c(1:j); end
A
の丸め誤差内で、行列の特性多項式の係数を作成することを証明することができます。このことは、A
の固有値が、条件数の悪いときでさえも、真です。固有値を使わないで、特性方程式を得るための従来までのアルゴリズムは、このような満足の行く数値的な特性をもっていません。
参考
![]() | polar | polyarea | ![]() |