幂迭代
function [v,r] = power_iter(A)
[~,m] = size(A);
v = rand(m,1);
v = v/norm(v,2);
n = 100;
for k = 1:n
w = A*v;
v = w/norm(w,2);
r = v'*A*v;
end
end
逆迭代
function [v,r] = inverse_iter(A)
[~,m] = size(A);
mu = 3;
v = rand(m,1);
v = v/norm(v,2);
n = 100;
for k = 1:n
w = (A-mu*eye(m))\v;
v = w/norm(w,2);
r = v'*A*v;
end
end
瑞利商迭代
function [v,r] = rayleigh_iter(A)
[~,m] = size(A);
v = rand(m,1);
v = v/norm(v,2);
r = v'*A*v;
n = 3;
for k = 1:n
w = (A-r*eye(m))\v;
v = w/norm(w,2);
r = v'*A*v;
end
end
原理太难敲了,具体见教材数值线性代数(陆金甫版)