【问题标题】:Finding the Largest Eigenvalue Using the Power method使用幂法查找最大特征值
【发布时间】:2015-04-12 18:25:47
【问题描述】:

对于这个问题,我必须取一个 100 x 100 的随机生成值矩阵和一个初始 x 向量,并尝试获得特征值和相关对向量的最大绝对值以及迭代次数。

所描述的幂法:

我要求最大特征值的绝对值,对应的特征向量,迭代次数。

我的代码:

%% problem 2b: Power method
% code snippet from class generates A and x
nx = 10;
ex = ones(nx,1);
Dxx = spdiags([ex -2*ex ex], [-1 0 1], nx, nx);
A = kron(Dxx, speye(nx)) + kron(speye(nx), Dxx);
rng(2);
x = rand(nx*nx,1); % initial vector

yk = [] % stores yk values
count = 0; % keeps track of iterations
value = 1; % 1 to ensure while loop is entered
tolerance = 10^(-6); % tol

while (value >= tolerance)
    yk = A*x; % yk = A*xk
    xnext = yk/norm(yk); % Xk+1=yk/2norm(yk)
    rk = dot(xnext,(A*xnext)); % rk = Xk+1 * (A*Xk+1)
    count = count+1; % iterate count
    value = norm(yk - rk*x); % update tolerance check
    x = xnext;
end
value

x % final eigenvector
rk % the largest eignvalue in abs value
count % the number of iterations

根据答案,我最大的特征值——rk——是正确的,但是对应的特征向量和迭代次数不正确。有人可以为我澄清一下吗?我用的时候特征值和特征向量是一致的:

[C, D] = eigs(A)

【问题讨论】:

    标签: matlab linear-algebra eigenvector eigenvalue


    【解决方案1】:

    你确定吗?在我看来是正确的。

    当我用eigs 生成CD 时,我得到:

    >> [C, D] = eigs(A)
    
    C =
    
        0.0520    0.0170    0.0531    0.0158   -0.0358   -0.0144
       -0.0788   -0.0433   -0.0894   -0.0327    0.0626    0.0277
        0.0717    0.0801    0.0973    0.0510   -0.0741   -0.0387
       -0.0437   -0.1180   -0.0743   -0.0694    0.0684    0.0466
        0.0200    0.1424    0.0277    0.0855   -0.0486   -0.0507
       -0.0200   -0.1424    0.0277   -0.0959    0.0217    0.0507
        0.0437    0.1180   -0.0743    0.0974    0.0038   -0.0466
       -0.0717   -0.0801    0.0973   -0.0876   -0.0204    0.0387
        0.0788    0.0433   -0.0894    0.0664    0.0243   -0.0277
       -0.0520   -0.0170    0.0531   -0.0358   -0.0158    0.0144
       -0.0892   -0.0116   -0.0894   -0.0243    0.0664    0.0277
        0.1308    0.0427    0.1504    0.0511   -0.1157   -0.0531
       -0.1090   -0.0972   -0.1637   -0.0814    0.1359    0.0743
        0.0494    0.1585    0.1250    0.1135   -0.1236   -0.0894
       -0.0009   -0.1993   -0.0466   -0.1427    0.0849    0.0973
        0.0009    0.1993   -0.0466    0.1627   -0.0333   -0.0973
       -0.0494   -0.1585    0.1250   -0.1671   -0.0149    0.0894
        0.1090    0.0972   -0.1637    0.1517    0.0456   -0.0743
       -0.1308   -0.0427    0.1504   -0.1157   -0.0511    0.0531
        0.0892    0.0116   -0.0894    0.0626    0.0327   -0.0277
        0.1051   -0.0223    0.0973    0.0204   -0.0876   -0.0387
       -0.1453    0.0142   -0.1637   -0.0456    0.1517    0.0743
        0.0999    0.0326    0.1781    0.0777   -0.1760   -0.1038
       -0.0060   -0.0973   -0.1360   -0.1151    0.1560    0.1250
       -0.0674    0.1433    0.0507    0.1521   -0.1004   -0.1360
        0.0674   -0.1433    0.0507   -0.1801    0.0282    0.1360
        0.0060    0.0973   -0.1360    0.1902    0.0377   -0.1250
       -0.0999   -0.0326    0.1781   -0.1760   -0.0777    0.1038
        0.1453   -0.0142   -0.1637    0.1359    0.0814   -0.0743
       -0.1051    0.0223    0.0973   -0.0741   -0.0510    0.0387
       -0.1049    0.0695   -0.0743   -0.0038    0.0974    0.0466
        0.1334   -0.0988    0.1250    0.0149   -0.1671   -0.0894
       -0.0622    0.0750   -0.1360   -0.0377    0.1902    0.1250
       -0.0626   -0.0205    0.1038    0.0714   -0.1617   -0.1504
        0.1571   -0.0229   -0.0387   -0.1100    0.0926    0.1637
       -0.1571    0.0229   -0.0387    0.1437   -0.0057   -0.1637
        0.0626    0.0205    0.1038   -0.1617   -0.0714    0.1504
        0.0622   -0.0750   -0.1360    0.1560    0.1151   -0.1250
       -0.1334    0.0988    0.1250   -0.1236   -0.1135    0.0894
        0.1049   -0.0695   -0.0743    0.0684    0.0694   -0.0466
        0.1002   -0.1031    0.0277   -0.0217   -0.0959   -0.0507
       -0.1184    0.1604   -0.0466    0.0333    0.1627    0.0973
        0.0302   -0.1555    0.0507   -0.0282   -0.1801   -0.1360
        0.1133    0.1112   -0.0387    0.0057    0.1437    0.1637
       -0.2201   -0.0719    0.0144    0.0290   -0.0656   -0.1781
        0.2201    0.0719    0.0144   -0.0656   -0.0290    0.1781
       -0.1133   -0.1112   -0.0387    0.0926    0.1100   -0.1637
       -0.0302    0.1555    0.0507   -0.1004   -0.1521    0.1360
        0.1184   -0.1604   -0.0466    0.0849    0.1427   -0.0973
       -0.1002    0.1031    0.0277   -0.0486   -0.0855    0.0507
       -0.1002    0.1031    0.0277    0.0486    0.0855    0.0507
        0.1184   -0.1604   -0.0466   -0.0849   -0.1427   -0.0973
       -0.0302    0.1555    0.0507    0.1004    0.1521    0.1360
       -0.1133   -0.1112   -0.0387   -0.0926   -0.1100   -0.1637
        0.2201    0.0719    0.0144    0.0656    0.0290    0.1781
       -0.2201   -0.0719    0.0144   -0.0290    0.0656   -0.1781
        0.1133    0.1112   -0.0387   -0.0057   -0.1437    0.1637
        0.0302   -0.1555    0.0507    0.0282    0.1801   -0.1360
       -0.1184    0.1604   -0.0466   -0.0333   -0.1627    0.0973
        0.1002   -0.1031    0.0277    0.0217    0.0959   -0.0507
        0.1049   -0.0695   -0.0743   -0.0684   -0.0694   -0.0466
       -0.1334    0.0988    0.1250    0.1236    0.1135    0.0894
        0.0622   -0.0750   -0.1360   -0.1560   -0.1151   -0.1250
        0.0626    0.0205    0.1038    0.1617    0.0714    0.1504
       -0.1571    0.0229   -0.0387   -0.1437    0.0057   -0.1637
        0.1571   -0.0229   -0.0387    0.1100   -0.0926    0.1637
       -0.0626   -0.0205    0.1038   -0.0714    0.1617   -0.1504
       -0.0622    0.0750   -0.1360    0.0377   -0.1902    0.1250
        0.1334   -0.0988    0.1250   -0.0149    0.1671   -0.0894
       -0.1049    0.0695   -0.0743    0.0038   -0.0974    0.0466
       -0.1051    0.0223    0.0973    0.0741    0.0510    0.0387
        0.1453   -0.0142   -0.1637   -0.1359   -0.0814   -0.0743
       -0.0999   -0.0326    0.1781    0.1760    0.0777    0.1038
        0.0060    0.0973   -0.1360   -0.1902   -0.0377   -0.1250
        0.0674   -0.1433    0.0507    0.1801   -0.0282    0.1360
       -0.0674    0.1433    0.0507   -0.1521    0.1004   -0.1360
       -0.0060   -0.0973   -0.1360    0.1151   -0.1560    0.1250
        0.0999    0.0326    0.1781   -0.0777    0.1760   -0.1038
       -0.1453    0.0142   -0.1637    0.0456   -0.1517    0.0743
        0.1051   -0.0223    0.0973   -0.0204    0.0876   -0.0387
        0.0892    0.0116   -0.0894   -0.0626   -0.0327   -0.0277
       -0.1308   -0.0427    0.1504    0.1157    0.0511    0.0531
        0.1090    0.0972   -0.1637   -0.1517   -0.0456   -0.0743
       -0.0494   -0.1585    0.1250    0.1671    0.0149    0.0894
        0.0009    0.1993   -0.0466   -0.1627    0.0333   -0.0973
       -0.0009   -0.1993   -0.0466    0.1427   -0.0849    0.0973
        0.0494    0.1585    0.1250   -0.1135    0.1236   -0.0894
       -0.1090   -0.0972   -0.1637    0.0814   -0.1359    0.0743
        0.1308    0.0427    0.1504   -0.0511    0.1157   -0.0531
       -0.0892   -0.0116   -0.0894    0.0243   -0.0664    0.0277
       -0.0520   -0.0170    0.0531    0.0358    0.0158    0.0144
        0.0788    0.0433   -0.0894   -0.0664   -0.0243   -0.0277
       -0.0717   -0.0801    0.0973    0.0876    0.0204    0.0387
        0.0437    0.1180   -0.0743   -0.0974   -0.0038   -0.0466
       -0.0200   -0.1424    0.0277    0.0959   -0.0217    0.0507
        0.0200    0.1424    0.0277   -0.0855    0.0486   -0.0507
       -0.0437   -0.1180   -0.0743    0.0694   -0.0684    0.0466
        0.0717    0.0801    0.0973   -0.0510    0.0741   -0.0387
       -0.0788   -0.0433   -0.0894    0.0327   -0.0626    0.0277
        0.0520    0.0170    0.0531   -0.0158    0.0358   -0.0144
    
    
    D =
    
       -7.2287         0         0         0         0         0
             0   -7.2287         0         0         0         0
             0         0   -7.3650         0         0         0
             0         0         0   -7.6015         0         0
             0         0         0         0   -7.6015         0
             0         0         0         0         0   -7.8380
    

    另外,来自您的 Power Method 的rk 给出:

    >> rk
    
    rk =
    
       -7.8380
    

    rkeigs 产生的最后一个特征值,它对应于C 中的最后一个特征向量/最后一列。如果我们比较xC 的最后一列,我们得到:

    >> format long g;
    >> [x C(:,6)]
    
    ans =
    
           -0.0144315780109194       -0.0144314970153476
            0.0276939697943544         0.027693839969929
           -0.0387127177669401       -0.0387125927117545
            0.0465951447011548        0.0465950814247274
           -0.0507026743311123        -0.050702713752288
            0.0507025614842252        0.0507027137522879
           -0.0465948419885827       -0.0465950814247267
            0.0387123212977858        0.0387125927117535
            -0.027693605444773        -0.027693839969928
            0.0144313614593288         0.014431497015347
            0.0276940018504475        0.0276938399699289
           -0.0531443512380279        -0.053144089727102
            0.0742891786790794        0.0742889213946561
           -0.0894154487195339       -0.0894153064640425
            0.0972977421934561        0.0972977951770151
           -0.0972975256418808        -0.097297795177015
            0.0894148678184032        0.0894153064640416
           -0.0742884178603978        -0.074288921394655
            0.0531436520563511        0.0531440897271008
           -0.0276935862910177       -0.0276938399699281
           -0.0387128332167354       -0.0387125927117545
             0.074289314234918         0.074288921394656
            -0.103847201265651         -0.10384680347939
             0.124991879901604         0.124991635146944
             -0.13601036376947        -0.136010387888769
             0.136010061056953         0.136010387888769
            -0.124991067873139        -0.124991635146943
             0.103846137734539         0.103846803479389
           -0.0742883368647708       -0.0742889213946555
            0.0387122523156699         0.038712592711754
            0.0465953928808543        0.0465950814247275
           -0.0894158214731441       -0.0894153064640426
             0.124992172891791         0.124991635146944
            -0.150442250463584        -0.150441884904116
             0.163704276053648         0.163704227858698
            -0.163703911704186        -0.163704227858698
             0.150441273093578         0.150441884904117
            -0.124990892809312        -0.124991635146944
            0.0894146450953342        0.0894153064640427
           -0.0465946936993567       -0.0465950814247274
           -0.0507030799451604       -0.0507027137522887
            0.0972984079372535        0.0972977951770161
            -0.136011046217971         -0.13601038788877
             0.163704713723789         0.163704227858698
             -0.17813587316184        -0.178135724874045
             0.178135476692881         0.178135724874045
            -0.163703650193004        -0.163704227858699
             0.136009653288871          0.13601038788877
           -0.0972971278549844       -0.0972977951770159
            0.0507023191267988        0.0507027137522887
            0.0507031083768884        0.0507027137522886
           -0.0972984624973554        -0.097297795177016
             0.136011122486338          0.13601038788877
             -0.16370480552164        -0.163704227858699
              0.17813597305228         0.178135724874046
            -0.178135576583388        -0.178135724874046
             0.163703741991037         0.163704227858699
            -0.136009729557476         -0.13601038788877
            0.0972971824153056        0.0972977951770162
           -0.0507023475586572       -0.0507027137522885
           -0.0465954691491656       -0.0465950814247277
             0.089415967831003        0.0894153064640427
            -0.124992377482224        -0.124991635146945
             0.150442496711966         0.150441884904117
            -0.163704544010458        -0.163704227858698
             0.163704179661178         0.163704227858698
            -0.150441519342448        -0.150441884904117
             0.124991097400385         0.124991635146944
           -0.0894147914537812       -0.0894153064640427
            0.0465947699680175        0.0465950814247277
              0.03871293310698        0.0387125927117539
           -0.0742895059229478       -0.0742889213946556
             0.103847469222133          0.10384680347939
            -0.124992202418397        -0.124991635146944
             0.136010714718256          0.13601038788877
            -0.136010412005978        -0.136010387888769
             0.124991390390572         0.124991635146944
            -0.103846405691859        -0.103846803479389
            0.0742885285535708        0.0742889213946558
           -0.0387123522063723       -0.0387125927117542
           -0.0276940936481785       -0.0276938399699281
            0.0531445273966335        0.0531440897271008
           -0.0742894249273207       -0.0742889213946552
             0.089415745107934        0.0894153064640417
            -0.097298064710459       -0.0972977951770146
             0.097297848159103        0.0972977951770148
           -0.0894151642073914       -0.0894153064640414
            0.0742886641094094        0.0742889213946553
           -0.0531438282156646        -0.053144089727101
            0.0276936780891695        0.0276938399699285
            0.0144316325710059        0.0144314970153468
           -0.0276940744944232       -0.0276938399699279
            0.0387128641248642        0.0387125927117535
           -0.0465953208599396       -0.0465950814247267
            0.0507028660194621        0.0507027137522877
           -0.0507027531727052       -0.0507027137522875
             0.046595018147717        0.0465950814247267
           -0.0387124676561676       -0.0387125927117538
            0.0276937101452626        0.0276938399699282
           -0.0144314160196653       -0.0144314970153473
    

    看起来也不错。我们要不要再做一次测试?让我们找出xC的最后一个特征向量之间的最大偏差:

    >> max(abs(x - C(:,6)))
    
    ans =
    
          7.42337632364531e-07
    

    这也与您在开头指定的容差一致,即< 1e-6


    因此,我认为您的代码没有任何问题。您可能应该仔细检查您关于幂法的理论,因为它会产生您所期望的结果。

    【讨论】:

    • 谢谢,这让人放心。我会问我的教授这件事;我只是不明白如何才能使特征值正确但特征向量和迭代计数错误。
    • @JackL。 - 我想我知道你可能在哪里感到困惑。我会更新我的答案...但是在幂方法中,有些人对特征向量进行归一化,以便将最大分量设置为 1。您正在做的是通过 2 范数进行归一化,这是正确的做法.这可能是迭代次数和特征向量不同的地方......但请记住,特征向量是非唯一的。它们相当于一个比例因子。让我更新我的帖子。
    • @JackL。 - 是的,没关系。我过去已经回答过类似的问题,哈哈。在这里检查:stackoverflow.com/questions/29198277/power-method-in-matlab/… - 查看此方法是否产生“正确的”迭代和特征向量,但请记住特征向量在一定范围内有效。让我知道你的教授怎么说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多