在matlab中分别用雅可比迭代法、高斯-塞德尔迭代法和超松弛迭代法求解给定的线性方程组 亲,你找到答案了告诉我一下哈!谢啦!同为经济学院统数专业的伤不起啊!
SOR迭代法 求MATLAB程序 function[n,x]=sor22(A,b,X,nm,w,ww)用超松弛迭代法求解方程组Ax=b输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w为误差精度,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 nx=M*X+g;用迭代格式进行迭代if norm(x-X,'inf')disp('迭代次数为');ndisp('方程组的解为');xreturn;上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp('在最大迭代次数内不收敛。');disp('最大迭代次数后的结果为');x上面是完整的超松弛迭代法
超松弛迭代法用matlab function[x,n]=SOR(A,b,x0,w,eps,M)if nargin=4eps=1.0e-6;M=200;elseif narginerrorreturnelseif nargin=5M=200;endif(w|w>;=2)error;return;endD=diag(diag(A));求A的对角矩阵L=-tril(A,-1);求A的下三角阵U=-triu(A,1);求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;n=1;迭代次数while norm(x-x0)>;=epsx0=x;x=B*x0+f;n=n+1;if(n>;=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend