欢迎来到天天文库
浏览记录
ID:53113236
大小:12.50 KB
页数:2页
时间:2020-04-01
《高斯赛德尔迭代法matlab编程.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、function[x,k]=GaussSeidel(A,b,x0,eps,M)%高斯赛德尔迭代法求方程组的解(矩阵公式求解)%A为方程组的系数矩阵;b为方程组的右端项%x为线性方程组的解了;x0为迭代初值%eps为误差限;M为迭代的最大次数ifnargin==3eps=1.0e-6;%默认精度M=10000;%参数不足时默认后两个条件elseifnargin==4M=10000;%参数的默认值elseifnargin<3error('参数不足');returnend[n,m]=size(A);nb=length(b);%当方程组行与列的维数不相等时,停止计算,并输出出错信息
2、ifn~=merror('矩阵A行数和列数必须相等!');return;end%当方程组与右端项的维数不匹配时,停止计算,并输出出错信息ifn~=nberror('矩阵A的行数必须和b的长度相等!');return;endL=zeros(n,n);U=zeros(n,n);D=zeros(n,n);fori=2:nforj=1:i-1L(i,j)=-A(i,j);endendfori=1:n-1forj=i+1:nU(i,j)=-A(i,j);endendfori=1:nD(i,i)=A(i,i);endB=inv(D-L)*U;%B为迭代矩阵g=inv(D-L)*b;%g
3、为右端项pr=max(abs(eig(B)));%求迭代矩阵谱半径ifpr>=1error('迭代矩阵谱半径大于1迭代法不收敛');return;endk=0;tol=1;whiletol>=epsx=B*x0+g;k=k+1;%迭代步数tol=norm(x-x0);%前后两步迭代结果的误差x0=x;if(k>=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend
此文档下载收益归作者所有