线性方程组的迭代解法(Matlab)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章线性方程组的迭代解法

2015年12月27日17:12

迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR)

1.雅可比迭代法(Jacobi)

A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。

A=D+L+U

要解的方程变为Dx+Lx+Ux=b

x=D^(-1)(b-(L+U)x)

所以Jocabi方法如下:

Matlab程序

function [x,iter] =jacobi(A,b,tol)

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

x=zeros(size(b));

for iter=1:500

x=D\(b+L*x+U*x);

error=norm(b-A*x)/norm(b);

if(error

break;

end

End

2.高斯-塞德尔迭代法(Guass-Seidel)

在雅可比迭代法中将算出来的的分 马上投入到下一个迭代方程中进行

Matlab程序

function [x,iter]=guass_seidel(A,b,tol)

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

x=zeros(size(b));

for iter=1:500

x=(D-L)\(U*x+b);

error=norm(b-A*x)/norm(b);

if(error

break;

end

end

3.超松弛迭代法(SOR)

GS迭代格式可以改写成

上面等式的右边第二项可以看成修正 ,在修正 之前加参数w(松弛因子),SOR迭代格式为

Matlab程序

function [x,iter]=sor(A,b,omega,tol)

D=diag(diag(A));

L=D-tril(A);

U=D-triu(A);

x=zeros(size(b));

for iter=1:500

x=(D-omega*L)\(omega*b+(1-omega)*D*x+omega*U*x);

error=norm(b-A*x)/norm(b);

if(error

break;

end

end

相关文档
最新文档