设线性方程组为AX=B,则Jacobi迭代法的迭代公式为[大谦MATLAB,dqmatlab点com]
\[{x}_{m}^{k+1}=\frac{1}{{a}_{mm}}(-\sum_{\begin{matrix} \begin{aligned} i=1 \\ i\neq m \end{aligned} \\ \end{matrix}}^{n} {{a}_{mi}{x}_{i}^{k}+{b}_{m}})\]
与之对应的Jacobi迭代公式的矩阵表示形式为
\[{X}^{\{k+1\}}={B}_{0}{X}^{k}+f\]
其中,B0为Jacobi迭代矩阵,B0=D1(L+U),f=D1b,D为对角矩阵,L和U分别为严格下三角矩阵和严格上三角矩阵。据此,可以编写实现Jacobi迭代法的M文件jacobi.m,如下所示。
code.matlab
function s=jacobi(a,b,x0,eps)
% 用Jacobi 迭代法解线性方程组
% a为系数矩阵,b为方程组ax=b的右端项,x0为初值
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(a)); %求对角矩阵
D=inv(D); %求对角矩阵的逆
L=tril(a,-1); %求严格下三角矩阵
U=triu(a,1); %求严格上三角矩阵
B=-D*(L+U);
f=D*b;
s=B*x0+f;
while norm(s-x0)>=eps
x0=s;
s=B*x0+f;
end
return
【例3】用上例编写的jacobi函数求解下列方程组
\[\left\{ \begin{matrix} 10{x}_{1}-2{x}_{2}-{x}_{3}=3 \\ -2{x}_{1}+10{x}_{2}-{x}_{3}=15 \\ -{x}_{1}-2{x}_{2}+5{x}_{3}=10 \end{matrix} \right.\]
下面用MATLAB实现,在命令窗口中输入
code.matlab
>> a=[10 -2 -1;-2 10 -1;-1 -2 5];
>> b=[3 15 10]';
>> x0=[0 0 0]';
>> eps=0.0001;
>> s=jacobi(a,b,x0,eps)
s =
1.0000
2.0000
3.0000