4

我的目的是找到矩阵的特征向量。在 Matlab 中,有一个[V,D] = eig(M)通过使用来获取矩阵的特征向量:[V,D] = eig(M)。或者,我使用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 的结果:

wolframalpha

  1. Matlab Eig 的结果:

D(特征值)

特征值 - D

V(特征向量)

eigenVectors

是否有可能为 eigenVectors 获得不同的解决方案,或者它应该是一个独特的答案。我有兴趣澄清这个概念。

4

4 回答 4

18

由于各种原因,特征向量不是唯一的。改变符号,一个特征向量仍然是相同特征值的特征向量。事实上,乘以任何常数,特征向量仍然如此。不同的工具有时可以选择不同的规范化。

如果特征值的多重性大于 1,则特征向量也不是唯一的,只要它们跨越相同的子空间。

于 2012-10-24T00:25:12.497 回答
13

正如woodchips 指出的那样(+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 清楚地缩放了特征向量,因此最终元素是统一的。

即使只是观察我给出的输出,您也可以开始看到关系的出现(特别是比较两个输出的第三个特征向量)。

顺便说一句,我建议您编辑您的问题以获得更简单的输入矩阵M,例如我在这里使用的那个。这将使将来访问此页面的任何人都更具可读性。这实际上并不是一个糟糕的问题,但它当前的格式化方式可能会导致它被否决。

于 2012-10-24T00:38:33.933 回答
3

我完全同意Mr.Colin T Bowers的观​​点,即 MATHEMATICA 进行标准化,以便 EigenVectors 的最后一个值变为一个。如果有人想生成像 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 使用的规范化是使最后一个元素统一。其他 eig 函数,如 QZ 算法(例如,由于不支持 Cholesky,您必须在 Matlab 编码器中使用它),不要将 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 是对称的,则 eig(A,'nobalance') 会忽略 nobalance 选项,因为 A 已经是平衡的。

对于[V, lam]=eig(C);特征向量被缩放,使得每个的范数为 1.0。 这就是我们在这里所需要的。Matlab 对 Cholesky 公式执行此操作,那么,如何重新归一化 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,它们仍然是特征向量)。请注意,必须对 lambda(特征值)应用相同的排序,否则这些排序将无序。

如果列中的第一个元素为负,则典型的约定是对列的符号进行 filp。

如果超过 2 个为负数,您可以做的一件事是翻转符号:

%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”的最佳方法来改进此算法并使其给出更接近 Cholesky 的答案或更准确的答案? 您可以使用任何(相同大小的实矩阵)值作为 B,再次包括 A 或 A'(A 是输入矩阵),但什么是“好的选择”?也许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 回答