使用幂法求最大特征值

Finding the Largest Eigenvalue Using the Power method

对于这个问题,我必须采用随机生成值的 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)

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

当我用 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

另外,rk 从你的 Power Method 得到:

>> 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


因此,我没有发现您的代码有任何问题。您可能应该仔细检查您的 Power Method 理论,因为它会产生您期望的结果。