📄 lanczosnosym.m
字号:
function [xk,nres,niter]=lanczosnosym(A,b,x0,m,toll)r0=b-A*x0; nres0=norm(r0,2); if nres0 ~= 0 V=r0/nres0; Z=V; gamma(1)=0; beta(1)=0; k=1; nres=1; while k <= m & nres > toll vk=V(:,k); zk=Z(:,k); if k==1, vk1=0*vk; zk1=0*zk; else, vk1=V(:,k-1); zk1=Z(:,k-1); end alpha(k)=zk'*A*vk; tildev=A*vk-alpha(k)*vk-beta(k)*vk1; tildez=A'*zk-alpha(k)*zk-gamma(k)*zk1; gamma(k+1)=sqrt(abs(tildez'*tildev)); if gamma(k+1) == 0, k=m+2; else beta(k+1)=tildez'*tildev/gamma(k+1); Z=[Z,tildez/beta(k+1)]; V=[V,tildev/gamma(k+1)]; end if k~=m+2 if k==1 Tk = alpha; else Tk=diag(alpha)+diag(beta(2:k),1)+diag(gamma(2:k),-1); end yk=Tk \ (nres0*[1,0*[1:k-1]]'); xk=x0+V(:,1:k)*yk; nres=abs(gamma(k+1)*[0*[1:k-1],1]*yk)*norm(V(:,k+1),2)/nres0; k=k+1; end endelse x=x0;endif k==m+2, niter=-k; else, niter=k-1; endreturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -