📄 poweritinv.m
字号:
function [lam,v] = poweritInv(A,s,nit,x0,verbose)
% poweritInv Inverse power iterations with shift to find an eigenvalue of A
%
% Synopsis: lam = poweritInv(A) [lam,u] = poweritInv(A)
% lam = poweritInv(A,s) [lam,u] = poweritInv(A,s)
% lam = poweritInv(A,s,nit) [lam,u] = poweritInv(A,s,nit)
% lam = poweritInv(A,s,nit,x0,verbose) [lam,u] = poweritInv(A,s,nit,x0,verbose)
%
% Input: A = square matrix
% s = (optional) estimate at an eigenvalue of A. Inverse power
% iterations converge to the eigenvalue nearest to rho.
% Default: rho = 0, used to find the smallest eigenvalue
% nit = (optional) number of iterations; Default: nit = 5
% x = (optional) n by 1 (column) vector to start the iterations
% Default: x = rand(m,1), [m,n] = size(A) (nr = nc)
% verbose = (optional) flag to control printing of results at each iteration.
% Default: verbose = 0, no printing
%
% Output: lam = eigenvalue of A nearest to s
% u = eigenvector associated with lam
[m,n] = size(A);
if nargin<2, s = 0; end
if nargin<3, x0 = rand(m,1); end
if nargin<4, nit = 10; end
if nargin<5, verbose = 0; end
u = x0;
[L,U] = lu(A - s*eye(size(A))); % Factor shifted matrix only once
if verbose, fprintf(' k norm(u,inf)\n'); end
for k=1:nit
u = U\(L\u); % uses triangular solves; same as solving Ay = b
mu = norm(u,inf);
u = u/mu;
if verbose, fprintf('%3d %f\n',k,r); end
end
lam = s + 1/mu; % 1/(lam-s) is eigenvalue of A^(-1)-s*I
if nargout==2, v = u; end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -