MATLAB代码 解线性方程组的迭代法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档