function [l,lN]=myeig(A,p,N,tol)
%幂法,反幂法,QR法,本次实验我写的是幂法
% tol 精度
if nargin<4
tol=eps;
end
% N 迭代次数
if nargin<3
N=17;
end
% p 原点平移的量
if nargin<2
p=0;
end
n=size(A,1);
B=A-p*eye(n);
% v的初始值,全 1 向量
v=ones(n,1);
u=v;
% 每次迭代的特征值
lN=zeros(1,N);
lN(1)=signmax(v)+p;
%从第2个开始迭代
for i=2:N
%幂法 是相乘
v=B*u;
% 每次迭代取得是绝对值最大的,调用 signmax 函数
u=v/signmax(v);
% 存储每次的特征值
N(i)=signmax(v)+p;
%前后两次的差如果小于精度,找到特征值,跳出循环
if abs(lN(i)-lN(i-1))<tol
break
end
end
l=lN(i);
% case 2
% B=A-p*eye(n);
% v=ones(n,1);
% u=v;
% lN=zeros(1,N);
% lN(1)=1/signmax(v)+p;
% for i=2:N
% v=B\u;
% u=v/signmax(v);
% lN(i)=1/signmax(v)+p;
% if abs(lN(i)-lN(i-1))<tol
% break
% end
% end
% l=lN(i);
% case 3
% p=A(n,n);
% lN=zeros(n,N);
% lN(:,1)=diag(A);
% for i=2:N
% [Q,R]=qr(A-p*eye(n));
% A=R*Q+p*eye(n);
% p=A(n,n);
% lN(:,i)=diag(A);
% if norm(tril(A,-1),Inf)<tol
% break
% end
% end
% l=lN(:,i);
% 从一组数中得到绝对值最大的一个数,返回位置
function mx=signmax(x)
[~,k]=max(abs(x));
mx=x(k);
end
end
own
Guess you like
Origin blog.csdn.net/weixin_48450741/article/details/112464680
Ranking