% Jacobi迭代法
% 注释的地方需要修改
clear
% 以下A,b即原方程组化为矩阵形式Ax=b的A,b
A=[5,2,1;-1,4,2;2,-3,10]; % 系数矩阵A,逗号分隔行,分号分隔列
b=[-12;20;3]; % 向量b
x0=[0;0;0]; % 迭代初始向量
p=inf; % 范数,inf表示无穷范数
ep=1e-4; % 精度要求,1e-n表示10的-n次幂
maxiter=500; % 最大迭代次数
% 若迭代到最大迭代次数后,误差的p范数仍然达不到精度要求,则判断迭代发散
n=length(b);
iter=1;
exitflag=1;
xs(iter,:)=x0;
err(iter,1)=nan;
L=tril(A,-1);
U=triu(A,1);
while exitflag
x=-((L+U)*x0(:)-b(:))./diag(A);
xs(iter+1,:)=x;
err(iter+1,1)=norm(x-x0(:),p);
if err(iter+1,1)<=ep
break
end
x0=x;
iter=iter+1;
if iter>maxiter
exitflag=0;
end
end
if exitflag % 若迭代发散,不会输出结果
vpa(x,10) % 线性方程组的解有效数字位数
iter % 迭代次数,不需要可删除
vpa(xs,10) % 完整的迭代序列的有效数字位数,不需要可删除
vpa(err(end),10) % 最终误差的有效数字位数,不需要可删除
end