《Jacobi迭代法和Gauss-Seidel迭代法Matlab程序》由会员分享,可在线阅读,更多相关《Jacobi迭代法和Gauss-Seidel迭代法Matlab程序(7页珍藏版)》请在金锄头文库上搜索。
1、 解(1):采用 Jacobi 迭代法时,Matlab 计算程序为:clearclci=1;a=5 2 1;-1 4 2;2 -3 10;d=diag(diag(a);l=d-tril(a);u=d-triu(a);d0=inv(d);b=-12;20;3;x0=1;1;1;B=d0*(l+u);f=d0*b;x=B*x0+f;while norm(x-x0,inf)=1e-4x0=x;x=B*x0+f;i=i+1;endxi采用 Gauss-Seidel 迭代法计算时,Matlab 计算程序为:clearclci=1;a=5 2 1;-1 4 2;2 -3 10;d=diag(diag(a)
2、;l=d-tril(a);u=d-triu(a);b=-12;20;3;x0=zeros(3,1);B=inv(d-l)*u;f=inv(d-l)*b;x=B*x0+f;while norm(x-x0,inf)=1e-4x0=x;x=B*x0+f; i=i+1;endxi习题6.7function n,x=sor22(A,b,X,x1,nm,w,ww)%用超松弛迭代法求解方程组Ax=b%输入:A为方程组的系数矩 阵,b为方程组右端的列向量,X为迭代初值构成的列向量,x1为方程的精确解, nm为最大迭代次数, w为误差精度,ww为松弛因子%输出:x为求得的方程组 的解构成的列向量,n为迭代次数n
3、=1;m=length(A);D=diag(diag(A); %令A=D-L-U, 计算矩阵DL=tril(-A)+D; %令A=D-L-U, 计算矩阵LU=triu(-A)+D; %令A=D-L-U, 计算矩阵UM=inv(D-ww*L)*(1-ww)*D+ww*U); %计算迭代矩阵g=ww*inv(D-ww*L)*b; %计算迭代格式中的常数项%下面是迭代 过程while n=nmx=M*X+g; %用迭代格式进行迭代if norm(x1-X,inf)wdisp(迭代次数为);ndisp(方程组的解为);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x
4、;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(在最大迭代次数内不收敛! );disp(最大迭代次数后的结果为);xa=4 -1 0;-1 4 -1;0 -1 4;b=1;4;-3;c=200;d=5e-3;f=1.03;k=0 ;0; 0;x1=1/2;1;-1/2;g=sor22(a,b,k,x1,c,d,f)习题 6.8function n,x=sor(A,b,X,nm,w,ww)%用超松弛迭代法求解方程组Ax=b%输入:A为方程组的系数矩 阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数, w为
5、误差精度,ww为松弛因子%输出:x为求得的方程组 的解构成的列向量,n为迭代次数n=1;m=length(A);D=diag(diag(A); %令A=D-L-U, 计算矩阵DL=tril(-A)+D; %令A=D-L-U, 计算矩阵LU=triu(-A)+D; %令A=D-L-U, 计算矩阵UM=inv(D-ww*L)*(1-ww)*D+ww*U); %计算迭代矩阵g=ww*inv(D-ww*L)*b; %计算迭代格式中的常数项%下面是迭代 过程while n=nmx=M*X+g; %用迭代格式进行迭代if norm(x-X,inf)wdisp(迭代次数为);ndisp(方程组的解为);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(在最大迭代次数内不收敛! );disp(最大迭代次数后的结果为);xa=5 2 1;-1 4 2;2 -3 10;b=-12;20;3;c=200;d=5e-6;f=0.9;k=0;0;0;g=sor(a,b,k,c,d,f)