4

私の目的は、行列の固有ベクトルを見つけることです。Matlabには、[V,D] = eig(M)次を使用して行列の固有ベクトルを取得するためのがあります[V,D] = eig(M)。または、WebサイトWolframAlphaを使用して結果を再確認しました。

10X10呼ばれる行列がありMます:

0.736538062307847   -0.638137874226607  -0.409041107160722  -0.221115060391256  -0.947102932298308  0.0307937582853794  1.23891356582639    1.23213871779652    0.763885436104244   -0.805948245321096
-1.00495215920171   -0.563583317483057  -0.250162608745252  0.0837145788064272  -0.201241986127792  -0.0351472158148094 -1.36303599752928   0.00983020375259212 -0.627205458137858  0.415060573134481
0.372470672825535   -0.356014310976260  -0.331871925811400  0.151334279460039   0.0983275066581362  -0.0189726910991071 0.0261595600177302  -0.752014960080128  -0.00643718050231003    0.802097123260581
1.26898635468390    -0.444779390923673  0.524988731629985   0.908008064819586   -1.66569084499144   -0.197045800083481  1.04250295411159    -0.826891197039745  2.22636770820512    0.226979917020922
-0.307384714237346  0.00930402052877782 0.213893752473805   -1.05326116146192   -0.487883985126739  0.0237598951768898  -0.224080566774865  0.153775526014521   -1.93899137944122   -0.300158630162419
7.04441299430365    -1.34338456640793   -0.461083493351887  5.30708311554706    -3.82919170270243   -2.18976040860706   6.38272280044908    2.33331906669527    9.21369926457948    -2.11599193328696
1   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   0   0   0
0   0   0   1   0   0   0   0   0   0
0   0   0   0   0   0   1   0   0   0

D

2.84950796497613 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    1.08333535157800 + 0.971374792725758i   0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    1.08333535157800 - 0.971374792725758i   0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -2.05253164206377 + 0.00000000000000i   0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -0.931513274011512 + 0.883950434279189i 0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -0.931513274011512 - 0.883950434279189i 0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -1.41036956613286 + 0.354930202789307i  0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -1.41036956613286 - 0.354930202789307i  0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    -0.374014257422547 + 0.00000000000000i  0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.00000000000000 + 0.00000000000000i    0.165579401742139 + 0.00000000000000i

V

-0.118788118233448 + 0.00000000000000i  0.458452024790792 + 0.00000000000000i   0.458452024790792 + -0.00000000000000i  -0.00893883603500744 + 0.00000000000000i    -0.343151745490688 - 0.0619235203325516i    -0.343151745490688 + 0.0619235203325516i    -0.415371644459693 + 0.00000000000000i  -0.415371644459693 + -0.00000000000000i -0.0432672840354827 + 0.00000000000000i 0.0205670999343567 + 0.00000000000000i
0.0644460666316380 + 0.00000000000000i  -0.257319460426423 + 0.297135138351391i -0.257319460426423 - 0.297135138351391i 0.000668740843331284 + 0.00000000000000i    -0.240349418297316 + 0.162117384568559i -0.240349418297316 - 0.162117384568559i -0.101240986260631 + 0.370051721507625i -0.101240986260631 - 0.370051721507625i 0.182133003667802 + 0.00000000000000i   0.0870047828436781 + 0.00000000000000i
-0.0349638967773464 + 0.00000000000000i -0.0481533171088709 - 0.333551383088345i    -0.0481533171088709 + 0.333551383088345i    -5.00304864960391e-05 + 0.00000000000000i   -0.0491721720673945 + 0.235973015480054i    -0.0491721720673945 - 0.235973015480054i    0.305000451960374 + 0.180389787086258i  0.305000451960374 - 0.180389787086258i  -0.766686233364027 + 0.00000000000000i  0.368055402163444 + 0.00000000000000i
-0.328483258287378 + 0.00000000000000i  -0.321235466934363 - 0.0865401147007471i    -0.321235466934363 + 0.0865401147007471i    -0.0942807049530764 + 0.00000000000000i -0.0354015249204485 + 0.395526630779543i    -0.0354015249204485 - 0.395526630779543i    -0.0584777280581259 - 0.342389123727367i    -0.0584777280581259 + 0.342389123727367i    0.0341847135233905 + 0.00000000000000i  -0.00637190625187862 + 0.00000000000000i
0.178211880664383 + 0.00000000000000i   0.236391683569043 - 0.159628238798322i  0.236391683569043 + 0.159628238798322i  0.00705341924756006 + 0.00000000000000i 0.208292766328178 + 0.256171148954103i  0.208292766328178 - 0.256171148954103i  -0.319285221542254 - 0.0313551221105837i    -0.319285221542254 + 0.0313551221105837i    -0.143900055026164 + 0.00000000000000i  -0.0269550068563120 + 0.00000000000000i
-0.908350536903352 + 0.00000000000000i  0.208752559894992 + 0.121276611951418i  0.208752559894992 - 0.121276611951418i  -0.994408141243082 + 0.00000000000000i  0.452243212306010 + 0.00000000000000i   0.452243212306010 + -0.00000000000000i  0.273997199582534 - 0.0964058973906923i 0.273997199582534 + 0.0964058973906923i -0.0270087356931836 + 0.00000000000000i 0.00197408431000798 + 0.00000000000000i
-0.0416872385315279 + 0.00000000000000i 0.234583850413183 - 0.210340074973091i  0.234583850413183 + 0.210340074973091i  0.00435502958971167 + 0.00000000000000i 0.160642433241717 + 0.218916331789935i  0.160642433241717 - 0.218916331789935i  0.276971588308683 + 0.0697020017773242i 0.276971588308683 - 0.0697020017773242i 0.115683515205146 + 0.00000000000000i   0.124212913671392 + 0.00000000000000i
0.0226165595687948 + 0.00000000000000i  0.00466011130798999 + 0.270099580217056i    0.00466011130798999 - 0.270099580217056i    -0.000325812684017280 + 0.00000000000000i   0.222664282388928 + 0.0372585184944646i 0.222664282388928 - 0.0372585184944646i 0.129604953142137 - 0.229763189016417i  0.129604953142137 + 0.229763189016417i  -0.486968076893485 + 0.00000000000000i  0.525456559984271 + 0.00000000000000i
-0.115277185508808 + 0.00000000000000i  -0.204076984892299 + 0.103102999488027i -0.204076984892299 - 0.103102999488027i 0.0459338618810664 + 0.00000000000000i  0.232009172507840 - 0.204443701767505i  0.232009172507840 + 0.204443701767505i  -0.0184618718969471 + 0.238119465887194i    -0.0184618718969471 - 0.238119465887194i    -0.0913994930540061 + 0.00000000000000i -0.0384824814248494 + 0.00000000000000i
-0.0146296269545178 + 0.00000000000000i 0.0235283849818557 - 0.215256480570249i 0.0235283849818557 + 0.215256480570249i -0.00212178438590738 + 0.00000000000000i    0.0266030060993678 - 0.209766836873709i 0.0266030060993678 + 0.209766836873709i -0.172989400304240 - 0.0929551855455724i    -0.172989400304240 + 0.0929551855455724i    -0.309302420721495 + 0.00000000000000i  0.750171291624984 + 0.00000000000000i

次の結果が得られました。

  1. 元のマトリックス:

オリジナルマトリックスM

  1. WolframAlphaの結果:

ウォルフラムアルファ

  1. Matlab Eigの結果:

D(固有値)

固有値-D

V(固有ベクトル)

固有ベクトル

固有ベクトルのさまざまな解を得ることが可能ですか、それとも独自の答えである必要があります。この概念を明確にすることに興味があります。

4

4 に答える 4

18

固有ベクトルは、さまざまな理由で一意ではありません。符号を変更しても、固有ベクトルは同じ固有値の固有ベクトルのままです。実際、任意の定数を掛けても、固有ベクトルはそれでもかまいません。ツールが異なれば、正規化も異なる場合があります。

固有値の多重度が1より大きい場合、固有ベクトルは、同じ部分空間にまたがっている限り、やはり一意ではありません。

于 2012-10-24T00:25:12.497 に答える
13

ウッドチップが指摘しているように(+1)、固有ベクトルは線形変換までしか一意ではありません。この事実は、定義からすぐに明らかになります。つまり、固有ベクトル/固有値のペアは、特性関数A * v = k * vを解きます。ここで、Aは行列、vは固有ベクトル、kは固有値です。

あなたの(恐ろしい)質問よりもはるかに単純な例を考えてみましょう:

M = [1, 2, 3; 4, 5, 6; 7, 8, 9];
[EigVec, EigVal] = eig(M);

Matlabの歩留まり:

EigVec =
-0.2320   -0.7858    0.4082
-0.5253   -0.0868   -0.8165
-0.8187    0.6123    0.4082

Mathematicaは以下を生成します:

EigVec = 
0.2833    -1.2833    1
0.6417    -0.1417    -2
1         1          1

Matlabのドキュメントから:

「eig(A)の場合、固有ベクトルは、それぞれのノルムが1.0になるようにスケーリングされます。」

一方、Mathematicaは、最終的な要素が1になるように、固有ベクトルを明確にスケーリングしています。

私が与えた出力を目で見ても、関係が現れるのを見ることができます(特に、両方の出力からの3番目の固有ベクトルを比較します)。

ちなみに、ここで使用したような、より単純な入力マトリックスを持つように質問を編集することをお勧めしますM。これにより、将来このページにアクセスするすべての人が読みやすくなります。実際にはそれほど悪い質問ではありませんが、現在のフォーマット方法により、反対票が投じられる可能性があります。

于 2012-10-24T00:38:33.933 に答える
3

私は、MATHEMATICAがEigenVectorsの最後の値が1になるように正規化を行うというColinTBowers氏に完全に同意します。誰かがMATHEMATICAのようなEigenVectorsの結果を生成したい場合は、MATLABを使用して、次の正規化手順を使用して、MATLABにEigenVectorsの結果の最後の値を1に正規化するように指示できます。

M = [1, 2, 3; 4, 5, 6; 7, 8, 9];

[EigVec, EigVal] = eig(M);

sf=1./EigVec(end,:); %get the last value of each eigen vector and inverse for scale factor

sf=repmat(sf,size(EigVec,1),1); % Repeat Scale value of each element in the vector

Normalize_EigVec=EigVec.*sf;

Normalize_EigVec =

    0.2833   -1.2833    1.0000
    0.6417   -0.1417   -2.0000
    1.0000    1.0000    1.0000
于 2012-10-24T05:49:39.960 に答える
0

Rodyが指摘しているように、Mathematicaが使用する正規化は、最後の要素を1にすることです。QZアルゴリズム(たとえば、コレスキーがサポートされていないため、Matlabコーダーで使用する必要があります)のような他のeig関数は、Matlabが[V、lam] = eig(C)に対して行う方法を正規化しないでください。例:[V、lam] = eig(C、eye(size(C))、'qz');

ドキュメントからhttp://www.mathworks.com/help/techdoc/ref/eig.html

注:eig(A)の場合、固有ベクトルは、それぞれのノルムが1.0になるようにスケーリングされます。eig(A、B)、eig(A、'nobalance')、およびeig(A、B、flag)の場合、固有ベクトルは正規化されません。また、Aが対称である場合、Aはすでにバランスが取れているため、eig(A、'nobalance')はnobalanceオプションを無視することに注意してください。

[V、lam] = eig(C);の場合 固有ベクトルは、それぞれのノルムが1.0になるようにスケーリングされます。 それが私たちがここで必要としているものです。Matlabはコレスキー定式化に対してそれを行います。それでは、QZによって生成された固有ベクトルをどのように再正規化して、同じスケールになるようにするのでしょうか。そのようです:

W = V;
for i = 1:size(V,2) % for each column
    V(:,i) = V(:,i) / norm(V(:,i), 2);  % Normalize column i
end

これにより、各ベクトルの長さが検出され、要素がその長さで除算されてベクトルがスケーリングされます。Mathamaticaは基本的に同じことを行い、ベクトルを正規化する代わりに最後の要素を1にします。 http://www.fundza.com/vectors/normalize/

ベクトルと値は必ずしも同じ順序ではないため、並べ替える必要がある場合があります。MatlabのCholeskyアルゴリズムは、次のような並べ替え順序でアイテムを生成します。

lam=diag(lam);
[sorted_lam,index]=sort(lam);
for cont=1:length(sorted_lam)
   sorted_V(:,cont)=V(:,index(cont));
end
W=sorted_W;
lam = diag(sorted_lam);

そして、これを行った後でも、符号が同じ方向を向いていない可能性があります(固有ベクトルは、-1倍された場合でも固有ベクトルです)。同じ並べ替えをラムダ(固有値)に適用する必要があることに注意してください。そうしないと、順序が狂ってしまいます。

一般的な規則は、列の最初の要素が負の場合、列の符号を修正することです。

2つ以上が負の場合、できることの1つは符号を反転することです。

%FLIP SIGNS IF MORE THAN 2 ARE NEGATIVE
W=sorted_W;
for i = 1:size(W,2) % for each column in V
    A = W(:,i);
    s=sign(A);
    inegatif=sum(s(:)==-1);
    if(inegatif>1)
        W(:,i) = -W(:,i);
    end
end

ただし、これは、要素が0に近くない場合にのみ実際に役立ちます。これは、要素が0に近い場合、別のアルゴリズムが代わりに0の反対側の値を見つける可能性があるためですが、何もないよりはましです。

最後に、「B」値(一般化された固有値問題の入力行列)には、「eye(size(C))」を使用しています。 このアルゴリズムを改善し、コレスキーの答えに近い、またはより正確な答えを与えるために「B」を選択する最適な方法はありますか? 再びAまたはA'(Aは入力行列)を含むBと同じサイズの任意の(実際の行列)値を使用できますが、'良い選択は何ですか?' 多分A'、いくつかの入力で-1の3x3が' chol'とほぼ同じ答えを与えるように見えることに気づきましたか?

https://www.mathworks.com/help/matlab/ref/eig.html?searchHighlight=eig&s_tid=doc_srchtitle#inputarg_B

于 2016-11-04T14:36:03.203 に答える