您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 高斯赛德尔迭代法matlab编程
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;%参数的默认值elseifnargin3error('参数不足');returnend[n,m]=size(A);nb=length(b);%当方程组行与列的维数不相等时,停止计算,并输出出错信息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为右端项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
本文标题:高斯赛德尔迭代法matlab编程
链接地址:https://www.777doc.com/doc-1784044 .html