MATLAB代码 解线性方程组的迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解线性方程组的迭代法
1.rs里查森迭代法求线性方程组Ax=b的解
function[x,n]=rs(A,b,x0,eps,M)
if(nargin==3)
eps=1.0e-6;%eps表示迭代精度
M=10000;%M表示迭代步数的限制值elseif(nargin==4)
M=10000;
end
I=eye(size(A));
n=0;
x=x0;
tol=1;
%迭代过程
while(tol>eps)
x=(I-A)*x0+b;
n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0);
x0=x;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
2.crs里查森参数迭代法求线性方程组Ax=b的解
function[x,n]=crs(A,b,x0,w,eps,M)
if(nargin==4)
eps=1.0e-6;%eps表示迭代精度
M=10000;%M表示迭代步数的限制值
elseif(nargin==5)
M=10000;
end
I=eye(size(A));
n=0;
x=x0;
tol=1;
%迭代过程
while(tol>eps)
x=(I-w*A)*x0+w*b;
n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0);
x0=x;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
3.grs里查森迭代法求线性方程组Ax=b的解
function[x,n]=grs(A,b,x0,W,eps,M)
if(nargin==4)
eps=1.0e-6;%eps表示迭代精度
M=10000;%M表示迭代步数的限制值
elseif(nargin==5)
M=10000;
end
I=eye(size(A));
n=0;
x=x0;
tol=1;%前后两次迭代结果误差
%迭代过程
while(tol>eps)
x=(I-W*A)*x0+W*b;%迭代公式
n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0);
x0=x;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
4.jacobi雅可比迭代法求线性方程组Ax=b的解
function[x,n]=jacobi(A,b,x0,eps,varargin)
if nargin==3
eps=1.0e-6;
M=200;
elseif nargin<3
error
return
elseif nargin==5
M=varargin{1};
end
D=diag(diag(A));%求A的对角矩阵
L=-tril(A,-1);%求A的下三角阵
U=-triu(A,1);%求A的上三角阵
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1;%迭代次数
while norm(x-x0)>=eps
x0=x;
x=B*x0+f;
n=n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
5.gauseidel高斯-赛德尔迭代法求线性方程组Ax=b的解function[x,n]=gauseidel(A,b,x0,eps,M)
if nargin==3
eps=1.0e-6;
M=200;
elseif nargin==4
M=200;
elseif nargin<3
error
return;
end
D=diag(diag(A));%求A的对角矩阵
L=-tril(A,-1);%求A的下三角阵
U=-triu(A,1);%求A的上三角阵
G=(D-L)\U;
f=(D-L)\b;
x=G*x0+f;
n=1;%迭代次数
while norm(x-x0)>=eps
x0=x;
x=G*x0+f;
n=n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
6.SOR超松弛迭代法求线性方程组Ax=b的解
function[x,n]=SOR(A,b,x0,w,eps,M)
if nargin==4
eps=1.0e-6;
M=200;
elseif nargin<4
error
return
elseif nargin==5
M=200;
end
if(w<=0||w>=2)
error;
return;
end
D=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)>=eps
x0=x;
x=B*x0+f;
n=n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
7.SSOR对称逐次超松弛迭代法求线性方程组Ax=b的解function[x,n]=SSOR(A,b,x0,w,eps,M)
if nargin==4
eps=1.0e-6;
M=200;
elseif nargin<4
error
return