私は次のような問題を抱えていますA*x=lambda*x
。ここA
で、次の順序d*d
でx
あり、次の順序d*c
であり、ラムダは定数です。A
とlambda
は既知で、行列x
は不明です。matlabでこの問題を解決する方法はありますか?? (固有値に似ていますが、ベクトルでx
はd*c
なく行列です)。
3 に答える
私があなたのことを正しく理解していれば、 の解決策があるとは限りませんx
。の場合A*x=lambda*x
、 の任意の列y
が をx
満たすA*y=lambda*y
ため、 の列x
は単に固有値 にA
対応する の固有ベクトルであり、 が実際に固有値であるlambda
場合にのみ解が存在します。lambda
ドキュメントから:
[V,D] = eig(A) は、行列 A の固有値 (D) と固有ベクトル (V) の行列を生成するため、A*V = V*D となります。行列 D は、A の正準形式です。つまり、主対角に A の固有値を持つ対角行列です。行列 V はモーダル行列です — その列は A の固有ベクトルです。
これを使用してlambda
が固有値であるかどうかを確認し、対応する固有ベクトルを見つけることができます。
それは実際には些細なことです。あなたの要件は、A*X = lambda*X であり、X は配列です。事実上、X の 1 つの列に対して何が起こるかを見てください。配列 X が存在する場合、それは真です。
A*X(:,i) = ラムダ*X(:,i)
そして、これは X のすべての列の lambda の同じ値に当てはまります。基本的に、これは、X(:,i) が A の固有ベクトルであり、対応する固有値 lambda を持つことを意味します。さらに重要なことに、X のすべての列が他のすべての列と同じ固有値を持つことを意味します。
したがって、この問題の簡単な解決策は、その列が A の固有ベクトルである限り、同じ列を持つ行列 X を単純に持つことです。固有値の多重度が 1 より大きい場合 (したがって、同じ固有値を持つ複数の固有ベクトルが存在する場合)、 X の列は、これらの固有ベクトルの任意の線形結合である場合があります。
実際に試してみてください。いくつかの単純な行列 A を選びます。
>> A = [2 3;3 2];
>> [V,D] = eig(A)
V =
-0.70711 0.70711
0.70711 0.70711
D =
-1 0
0 5
V の 2 列目は固有ベクトルで、固有値は 5 です。任意の定数で固有ベクトルを任意にスケーリングできます。そこで、ベクトル vec を選択して、複製された列を持つ行列を作成します。
>> vec = [1;1];
>> A*[vec,vec,vec]
ans =
5 5 5
5 5 5
これは誰も驚かないはずです。
この問題を変換できます。x(:) を使用して x をベクトルとして書き込みます (サイズは d*cx 1 です)。次に、A を対角線に沿って c 個のバージョンの A を持つ ad*cxd*c 行列に書き換えることができます。
今は単純な固有値の問題です。