Jocabi迭代法

设线性方程组为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