您好,欢迎访问三七文档
5.三种迭代速度比较程序:function[v,sN,vChain]=gaussseidel(A,b,x0,errorBound,maxSp)%Gauss-Seidel迭代法求解线性方程组%A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数%v-近似解sN-迭代次数vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;fori=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);whileerror=errorBound&stepmaxSpx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;function[x,k,index]=jacobi(A,b,ep,it_max)%求解线性方程组的Jacobi迭代法,其中%A---方程组的系数矩阵%b---方程组的右端项%ep---精度要求。省缺为1e-5%it_max---最大迭代次数,省缺为100%x---方程组的解%k---迭代次数%index---index=1表示迭代收敛到指定要求;%index=0表示迭代失败ifnargin4it_max=100;endifnargin3ep=1e-5;endn=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==it_maxindex=0;return;endy(i)=y(i)/A(i,i);endifnorm(y-x,inf)epbreak;endx=y;k=k+1;Endfunction[x,k,index]=SOR(A,b,ep,w,it_max)%求解线性方程组的SOR迭代法%A为系数矩阵%b为方程组右端项%ep为精度要求,缺省值1e-5%w为超松弛因子,缺省值为1;%it_max为最大迭代次数,缺省值100%x为方程组的解%k为迭代次数%index为指标变量index=1表示迭代收敛到指定要求index=0表示迭代失败。ifnargin5it_max=100;endifnargin4w=1;endifnargin3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while1y=x;fori=1:nz=b(i);forj=1:nifj~=iz=z-A(i,j)*x(j);endendifabs(A(i,i))1e-10|k==it_maxindex=0;return;endz=z/A(i,i);x(i)=(1-w)*x(i)+w*z;endifnorm(y-x,inf)epbreak;endk=k+1;end运行结果:A=[430;34-1;-104];b=[24;30;-24];[x,k,index]=jacobi(A,b,5e-8,100)x=3.09683.8710-5.2258k=80index=1A=[430;34-1;-104];b=[24;30;-24];x0=[1;1;1];[v,sN,vChain]=gaussseidel(A,b,x0,5e-008,11)v=3.31584.1326-5.3058sN=11vChain=5.25007.0000-5.75000.75002.1250-4.68754.40635.7656-5.81251.67582.7422-4.89843.94345.0186-5.58112.23613.1472-5.01423.63964.5694-5.44102.57303.4101-5.09013.44254.2978-5.35682.77673.5790-5.13943.31584.1326-5.3058000000000000A=[430;34-1;-104];b=[24;30;-24];ep=5e-008;w=1.25;[x,k,index]=SOR(A,b,ep,w)x=3.09683.8710-5.2258k=17index=1
本文标题:三种迭代速度比较
链接地址:https://www.777doc.com/doc-2781187 .html