您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > jacobi迭代和G-S迭代
function[x,k,index]=Jacobi(A,b,ep,Nmax)%求解线性方程组的Jacobi迭代法,其中%A---方程组的系数矩阵%b---方程组的右端项%ep---精度要求。省缺为1e-5%Nmax---最大迭代次数,省缺为100%x---方程组的解%k---迭代次数%index=1表示迭代收敛到指定要求;%index=0表示迭代失败ifnargin4Nmax=100;end%设置默认值ifnargin3ep=1e-5;end%设置默认值n=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while1fori=1:ny(i)=b(i);forj=1:nifj~=iy(i)=y(i)-A(i,j)*x(j);endendifabs(A(i,i))1e-10||k==Nmaxindex=0;return;endy(i)=y(i)/A(i,i);endifnorm(y-x,inf)epbreak;endx=y;k=k+1;endendfunction[x,k,index]=Gausseidel(A,b,ep,Nmax)%求解线性方程组的Jacobi迭代法,其中%A---方程组的系数矩阵%b---方程组的右端项%ep---精度要求。省缺为1e-5%Nmax---最大迭代次数,省缺为100%x---方程组的解%k---迭代次数%index=1表示迭代收敛到指定要求;%index=0表示迭代失败ifnargin4Nmax=100;end%设置默认值ifnargin3ep=1e-5;end%设置默认值n=length(A);k=0;x=zeros(n,1);z=zeros(n,1);index=1;while1y=x;fori=1:nz(i)=b(i);forj=1:nifj~=i%不等于z(i)=z(i)-A(i,j)*x(j);endendifabs(A(i,i))1e-10||k==Nmaxindex=0;return;endz(i)=z(i)/A(i,i);x(i)=z(i);endifnorm(y-x,inf)epbreak;endk=k+1;endendfunction[x,N,index]=lineGS(A,b,x0,d,eps,M)ifnargin==4eps=1.0e-6;M=10000;elseifnargin==5M=10000;endindex=1NS=size(A);n=NS(1,1);bnum=length(d);bs=ones(bnum,1);fori=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;endDB=zeros(n,n);fori=1:bnumendb=bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb);endLB=-tril(A-DB);UB=-triu(A-DB);N=0;tol=1;whiletol=epsinvDL=inv(DB-LB);x=invDL\UB*x0+invDLb;N=N+1;tol=norm(x-x0);x0=x;if(N=M)index=0return;endendend
本文标题:jacobi迭代和G-S迭代
链接地址:https://www.777doc.com/doc-4721328 .html