对于这个问题,我必须采用100×100矩阵的随机生成值和一个初始x向量,并尝试获得特征值和相关对流的最大绝对值以及迭代次数。 / p>
所述的电源方法:
我必须找到最大特征值的绝对值,相应的特征向量和迭代次数。
我的代码:
%% 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)
答案 0 :(得分:1)
当我用C
制作D
和eigs
时,我得到:
>> [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
rk
是eigs
生成的最后一个特征值,它对应于C
中的最后一个特征向量/最后一列。如果我们比较x
和C
的最后一列,我们会得到:
>> 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
看起来也不错。我们再做一次测试吗?让我们找出x
与C
的最后一个特征向量之间的最大偏差:
>> max(abs(x - C(:,6)))
ans =
7.42337632364531e-07
这也与你在开始时指定的宽容度一致,即< 1e-6
。
因此,我认为您的代码没有任何问题。你应该仔细检查一下你对Power方法的理论,因为它会产生你所期望的。