第六章线性方程组的迭代解法
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<tol)
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<tol)
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<tol)
break;
end
end。