(4) 若k=N,则停止计算(有选择的输出信息);否则,k=k+1,回到(2)进行下一次迭代。
Jacobi迭代的Matlab 程序Jacobi.m如下:源:自*751~·论,文'网·www.751com.cn/
function [x,k] = jacobi(A, b, ep, it_max)
% 求解线性方程组的Jacobi迭代法,调用方法为
% [x,k]=Jacobi(A, b ,ep, it_max)
% 其中
% A 为方程组的系数矩阵,b 为方程组的右端项;
% ep 为精度要求,缺省值为1e-5
% it_max 为最大迭代次数,缺省值100;
% x为方程的解,k为迭代次数。
if nargin < 4, it_max = 100;
end
if nargin < 3, ep = 1e-5;
end
d = diag(A);L = - tril(A,-1);U = -triu(A,1);
if min(abs(d)) < 1e-10
error('% 对角元素为0, 计算失败!');
end
n = length(b); x = zeros(n,1); k = 1;
invD = spdiags(1。/d,0,n,n);
B = invD*(L+U);f = invD*b;
while k < it_max
y = B*x + f;
if norm(y - x, inf) < ep break;
end
x = y; k = k + 1;
end
程序中的函数 spdiags 是生成稀疏形式的对角阵;这样做的好处是: 如果矩阵 A 是稀疏矩阵,那么整个运算可以保持稀疏性。
Jacobi迭代法的优点是计算相对的简单,每次迭代只需要作向量和矩阵的一次乘法。一般情况,在迭代法收敛的前提下,下一次的迭代比上一次更加准确,所以,为了每次迭代充分利用最新的迭代值,于是就出现了Gauss-Seidel迭代法。文献综述
Gauss-Seidel迭代法
Gauss-Seidel迭代的基本思想与Jacobi迭代的基本思想类似。区别在于Gauss-Seidel迭代法,每次迭代都会充分利用最新的迭代值,即如果Jacobi迭代法是收敛的,那么在Jacobi迭代算法的第 (2) 步中,将计算出的x^((k+1))的分量立刻应用到下一个迭代方程中去,这就是Gauss-Seidel迭代。
线性方程组的迭代法及其Matlab实现程序(3):http://www.751com.cn/shuxue/lunwen_67860.html