単一のコマンドまたは少なくとも非常に少数のコマンドで固有値の多重度が高い場合に、一般化された固有ベクトルを取得する方法はありますか? 各固有値の多重度が 1 の場合、 を使用できます[V,D] = eig(A)
が、このコマンドは複数の固有値に対しては機能しません。
1 に答える
Matlab のドキュメントによると、 [V,D] = eig(A,B) は、一般化された固有値の対角行列 D と、列が対応する固有ベクトルである完全な行列 V を生成するため、A*V = B*V*D となります。
以下に、自分で行う方法の例を示します... まず、サンプル行列 A を入力します。
A = [ 35 -12 4 30 ;
22 -8 3 19 ;
-10 3 0 -9 ;
-27 9 -3 -23 ];
次に、その特徴的な多項式、固有値、および固有ベクトルを調べます。
poly(A)
ans =
1.0000 -4.0000 6.0000 -4.0000 1.0000
これらは特性多項式の係数であるため、(λ − 1)^4 となります。
[V, D] = eigensys(A)
V =
[ 1, 0]
[ 0, 1]
[-1, 3]
[-1, 0]
D =
[1]
[1]
[1]
[1]
したがって、MATLAB は 2 つの独立した固有ベクトルのみを見つけます。
w1 = [1 0 -1 -1]';
w2 = [0 1 3 0]';
単一の多重度 4 固有値 λ=1 に関連付けられているため、欠陥 2 があります。
したがって、4x4 単位行列と行列 B=A-λI を設定します。
Id = eye(4);
B = A - L*Id;
L=1 で、B^2 と B^3 を計算すると
B2 = B*B
B3 = B2*B
B2 ≠ 0 ですが、B3 = 0 であるため、固有値 λ = 1 に関連付けられた長さ 3 のチェーンがあるはずです。最初の一般化固有ベクトルの選択
u1 = [1 0 0 0]';
さらに一般化された固有ベクトルを計算します
u2 = B*u1
u2 =
34
22
-10
-27
と
u3 = B*u2
u3 =
42
7
-21
-42
したがって、(通常の) 固有ベクトル u3 に基づいて、長さ 3 のチェーン {u3, u2, u1} が見つかりました。(この結果を MATLAB の eigensys 計算と一致させるために、u3-42w1=7w2 を確認できます)