【问题标题】:Could we get different solutions for eigenVectors from a matrix?我们能否从矩阵中得到不同的 eigenVectors 解决方案?
【发布时间】:2012-10-14 00:26:56
【问题描述】:

我的目的是找到一个矩阵的特征向量。在 Matlab 中,有一个[V,D] = eig(M) 可以使用:[V,D] = eig(M) 来获取矩阵的特征向量。或者,我使用网站 WolframAlpha 来仔细检查我的结果。

我们有一个名为M10X10 矩阵:

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. 原始矩阵:

  1. WolframAlpha 的结果:

  1. Matlab Eig 的结果:

D(特征值)

V(特征向量)

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

【问题讨论】:

    标签: matlab linear-algebra eigenvector eigenvalue wolframalpha


    【解决方案1】:

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

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

    【讨论】:

    • 它也适用于虚部吗? [在 eigenVector 中] 或者换一种说法:当我们使用不同的归一化时,我们会得到不同的 eigenVector。到目前为止一切都很好......如果我们想象的其余方法的解决方案/答案之一的虚部是 ZERO,我们能否说出我们从任何计算方法中获得的 eigenVectors 的结果对应答案的部分为零?
    • 我可以将一个特征向量乘以任何复数,包括 i=sqrt(-1),它仍然是一个特征向量。所以你不能声称你想要什么。
    • 我想看看我是否可以将它作为一项规则用于某些工作实施。 EX)想象特征向量 V[i,j] 中的一个元素等于通过方法 A 计算的 a+bi。使用另一种方法 B:它是同一位置 V[i,j] 中的 a'+ b'i。我们能否说这两个不同的答案( a+bi AND a'+ b'i )是对应的答案。 [如果是,是否有必要满足以下条件:a^2 + b^2 = a'^2 + b'^2 ]
    • 你不能从一个单一的元素说任何话。
    【解决方案2】:

    正如 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,例如我在这里使用的那个。这将使将来访问此页面的任何人都更具可读性。这实际上不是一个糟糕的问题,但它当前的格式可能会导致它被否决。

    【讨论】:

    • 为什么在某些方法中 eigenVectors 具有虚值而在某些方法中没有?
    • @farzinparsa 求特征值的问题可以等同于求多项式根的问题。任何关于线性代数的好文章都应该证明这一点。现在,众所周知,多项式的根可以是虚数(例如,想想高中的quadratic formula)。因此特征值和特征向量可能是复杂的。是否有保证真实特征值的条件?是的,如果矩阵是对称的,则其特征值将是实数。这些东西在线性代数的任何标准文本中都有。
    【解决方案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
    

    【讨论】:

    • 它也适用于虚部吗? [在 eigenVector 中] 或者换一种说法:当我们使用不同的归一化时,我们会得到不同的 eigenVector。到目前为止一切都很好......如果解决方案/答案之一的虚部为零,我们能否说我们为特征向量(来自任何计算方法)得到的结果,对于其他方法,我们的虚部将为零对应的答案?
    • 我刚收到一条通知,您尝试编辑我的答案并将其替换为您的答案。我猜您以为您正在编辑自己的答案,但不小心点击了我的答案:-) 无论如何,没问题,版主选择了它并阻止了编辑。顺便说一句,这是对我的回答的一个巧妙的小扩展 - 值得 +1。
    • @Colin T Bowers:我没有,我问了一个问题并寻找答案。我没有任何可以替换的答案:) 我想看看我是否可以将它作为一项规则用于某些工作实施。 EX)想象特征向量 V[i,j] 中的一个元素等于通过方法 A 计算的 a+bi。使用另一种方法 B:它是同一位置 V[i,j] 中的 a'+ b'i。我们能否说这两个不同的答案( a+bi AND a'+ b'i )是对应的答案。 [如果是,是否有必要满足以下条件:a^2 + b^2 = a'^2 + b'^2 ]
    • @farzinparsa 我的评论是针对veeresh,而不是您:-) 关于您的问题,最好说这两个答案同样有效。我不认为你所说的条件是必要或充分的。
    【解决方案4】:

    正如 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',我注意到某些输入是 3x3 -1 似乎给出的答案与“chol”接近?

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

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多