Matlab与Mathematica,特征向量?

jon*_*jon 2 matlab wolfram-mathematica

function H = calcHyperlinkMatrix(M)
    [r c] = size(M);
    H = zeros(r,c);
    for i=1:r,
        for j=1:c,
            if (M(j,i) == 1)
                colsum = sum(M,2);
                H(i,j) = 1 / colsum(j);
            end;
        end;
    end;
    H     


function V = pageRank(M)
    [V D] = eigs(M,1);
    V

function R = google(links)
    R = pageRank(calcHyperlinkMatrix(links));
    R

M=[[0 1 1 0 0 0 0 0];[0 0 0 1 0 0 0 0];[0 1 0 0 1 0 0 0];[0 1 0 0 1 1 0 0];
    [0 0 0 0 0 1 1 1];[0 0 0 0 0 0 0 1];[1 0 0 0 1 0 0 1];[0 0 0 0 0 1 1 0];]
google(M)

ans =

   -0.1400
   -0.1576
   -0.0700
   -0.1576
   -0.2276
   -0.4727
   -0.4201
   -0.6886
Run Code Online (Sandbox Code Playgroud)

数学:

calculateHyperlinkMatrix[linkMatrix_] := {
  {r, c} = Dimensions[linkMatrix];
  H = Table[0, {a, 1, r}, {b, 1, c}];
  For[i = 1, i < r + 1, i++,
   For[j = 1, j < c + 1, j++,
    If[linkMatrix[[j, i]] == 1, H[[i, j]] = 1/Total[linkMatrix[[j]]], 
     0]
    ]
   ];
  H
  }


H = {{0, 0, 0, 0, 0, 0, 1/3, 0}, {1/2, 0, 1/2, 1/3, 0, 0, 0, 0}, {1/2,
     0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 1/2, 1/3, 
    0, 0, 1/3, 0}, {0, 0, 0, 1/3, 1/3, 0, 0, 1/2}, {0, 0, 0, 0, 1/3, 
    0, 0, 1/2}, {0, 0, 0, 0, 1/3, 1, 1/3, 0}};
R = Eigensystem[H];
VR = {R[[1, 1]], R[[2, 1]]}
PageRank = VR[[2]]


{1, {12/59, 27/118, 6/59, 27/118, 39/118, 81/118, 36/59, 1}}
Run Code Online (Sandbox Code Playgroud)

Matlab和Mathematica没有给出具有特征值1的相同特征向量.两者都有效...但哪一个是正确的,为什么它们不同?如何使用特征值1来获取所有特征向量?

bri*_*ler 5

特征向量 的定义XX满足的一些向量

AX = kX

A矩阵在哪里,k是一个常数.从定义中cX可以清楚地看出,对于任何c不等于的函数,它也是一个特征向量0.因此,有一些不变c这样X_matlab = cX_mathematica.

看起来第一个是正常的(欧几里德长度为1,即加上坐标的平方和,然后取平方根,你将得到1),第二个被归一化,使得最终坐标为1(任何特征向量是找到然后所有坐标除以最终坐标).

如果你需要的只是一个特征向量,你可以使用你想要的任何一个.