一、Jacobi迭代法
 
     
      
       
       
         n 
        
       
         = 
        
       
         3 
        
       
      
        n=3 
       
      
    n=3 , 阶数为 3 时
  
      
       
        
        
          A 
         
        
          = 
         
         
         
           ( 
          
          
           
            
             
              
              
                a 
               
              
                11 
               
              
             
            
            
             
              
              
                a 
               
              
                12 
               
              
             
            
            
             
              
              
                a 
               
              
                13 
               
              
             
            
           
           
            
             
              
              
                a 
               
              
                21 
               
              
             
            
            
             
              
              
                a 
               
              
                22 
               
              
             
            
            
             
              
              
                a 
               
              
                23 
               
              
             
            
           
           
            
             
              
              
                a 
               
              
                31 
               
              
             
            
            
             
              
              
                a 
               
              
                32 
               
              
             
            
            
             
              
              
                a 
               
              
                33 
               
              
             
            
           
          
         
           ) 
          
         
        
          , 
         
         
        
          b 
         
        
          = 
         
         
         
           ( 
          
          
           
            
             
              
              
                b 
               
              
                1 
               
              
             
            
           
           
            
             
              
              
                b 
               
              
                2 
               
              
             
            
           
           
            
             
              
              
                b 
               
              
                3 
               
              
             
            
           
          
         
           ) 
          
         
        
          , 
         
        
       
         A=\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\quad b=\begin{pmatrix} b_1\\b_2\\ b_3 \end{pmatrix}, 
        
       
     A= 
              a11a21a31a12a22a32a13a23a33 
              ,b= 
              b1b2b3 
              ,
Jacobi公式为
  
      
       
        
         
          
           
            
             
             
               x 
              
             
               1 
              
              
              
                ( 
               
              
                k 
               
              
                + 
               
              
                1 
               
              
                ) 
               
              
             
            
              = 
             
             
              
               
               
                 b 
                
               
                 1 
                
               
              
                − 
               
               
               
                 a 
                
               
                 12 
                
               
               
               
                 x 
                
               
                 2 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
                − 
               
               
               
                 a 
                
               
                 13 
                
               
               
               
                 x 
                
               
                 3 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
              
              
                a 
               
              
                11 
               
              
             
            
           
          
         
         
          
           
            
             
             
               x 
              
             
               2 
              
              
              
                ( 
               
              
                k 
               
              
                + 
               
              
                1 
               
              
                ) 
               
              
             
            
              = 
             
             
              
               
               
                 b 
                
               
                 2 
                
               
              
                − 
               
               
               
                 a 
                
               
                 21 
                
               
               
               
                 x 
                
               
                 1 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
                − 
               
               
               
                 a 
                
               
                 23 
                
               
               
               
                 x 
                
               
                 3 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
              
              
                a 
               
              
                22 
               
              
             
            
           
          
         
         
          
           
            
             
             
               x 
              
             
               3 
              
              
              
                ( 
               
              
                k 
               
              
                + 
               
              
                1 
               
              
                ) 
               
              
             
            
              = 
             
             
              
               
               
                 b 
                
               
                 3 
                
               
              
                − 
               
               
               
                 a 
                
               
                 31 
                
               
               
               
                 x 
                
               
                 1 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
                − 
               
               
               
                 a 
                
               
                 32 
                
               
               
               
                 x 
                
               
                 2 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
              
              
                a 
               
              
                33 
               
              
             
            
           
          
         
        
       
         \begin{gathered} x_1^{(k+1)} =\frac{b_{1}-a_{12}x_{2}^{(k)}-a_{13}x_{3}^{(k)}}{a_{11}} \\ x_2^{(k+1)} =\frac{b_{2}-a_{21}x_{1}^{(k)}-a_{23}x_{3}^{(k)}}{a_{22}} \\ x_3^{(k+1)} =\frac{b_{3}-a_{31}x_{1}^{(k)}-a_{32}x_{2}^{(k)}}{a_{33}} \end{gathered} 
        
       
     x1(k+1)=a11b1−a12x2(k)−a13x3(k)x2(k+1)=a22b2−a21x1(k)−a23x3(k)x3(k+1)=a33b3−a31x1(k)−a32x2(k)
 由公式可以看出 ,每一次迭代的各个分量都是独立计算的,这也是为什么Jacobi迭代可以用于并行计算。
或等价的,将  
     
      
       
       
         A 
        
       
      
        A 
       
      
    A 分解为  
     
      
       
       
         A 
        
       
         = 
        
       
         D 
        
       
         − 
        
       
         L 
        
       
         − 
        
       
         U 
        
       
      
        A=D-L-U 
       
      
    A=D−L−U,其中
  
      
       
        
        
          D 
         
        
          = 
         
        
          d 
         
        
          i 
         
        
          a 
         
        
          g 
         
        
          ( 
         
         
         
           a 
          
         
           11 
          
         
        
          , 
         
         
         
           a 
          
         
           22 
          
         
        
          , 
         
         
         
           a 
          
         
           33 
          
         
        
          ) 
         
        
          , 
         
        
       
         D=diag(a_{11},a_{22},a_{33}), 
        
       
     D=diag(a11,a22,a33), 
      
       
        
        
          L 
         
        
          = 
         
        
          − 
         
         
         
           [ 
          
          
           
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
              
              
                a 
               
              
                21 
               
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
              
              
                a 
               
              
                31 
               
              
             
            
            
             
              
              
                a 
               
              
                32 
               
              
             
            
            
             
             
               0 
              
             
            
           
          
         
           ] 
          
         
        
          , 
         
         
        
          U 
         
        
          = 
         
        
          − 
         
         
         
           [ 
          
          
           
            
             
             
               0 
              
             
            
            
             
              
              
                a 
               
              
                12 
               
              
             
            
            
             
              
              
                a 
               
              
                13 
               
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                a 
               
              
                23 
               
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
           
          
         
           ] 
          
         
        
          . 
         
        
       
         L=-\begin{bmatrix} 0 & 0 &0\\ a_{21} & 0&0\\ a_{31} & a_{32} &0\\ \end{bmatrix},\quad U=-\begin{bmatrix} 0 & a_{12} &a_{13}\\ 0 & 0&a_{23}\\ 0 & 0 &0\\ \end{bmatrix}. 
        
       
     L=− 
              0a21a3100a32000 
              ,U=− 
              000a1200a13a230 
              . 
      
       
        
         
          
           
            
            
              ( 
             
            
              D 
             
            
              − 
             
            
              L 
             
            
              − 
             
            
              U 
             
            
              ) 
             
            
              x 
             
            
              = 
             
            
              b 
             
            
           
          
         
         
          
           
            
            
              D 
             
            
              x 
             
            
              = 
             
            
              b 
             
            
              + 
             
            
              ( 
             
            
              L 
             
            
              + 
             
            
              U 
             
            
              ) 
             
            
              x 
             
            
           
          
         
         
          
           
            
            
              x 
             
            
              = 
             
             
             
               D 
              
              
              
                − 
               
              
                1 
               
              
             
            
              ( 
             
            
              b 
             
            
              + 
             
            
              ( 
             
            
              L 
             
            
              + 
             
            
              U 
             
            
              ) 
             
            
              x 
             
            
              ) 
             
            
           
          
         
        
       
         \begin{gathered} (D-L-U)x = b\\ Dx = b+(L+U)x\\ x=D^{-1}(b+(L+U)x)\\ \end{gathered} 
        
       
     (D−L−U)x=bDx=b+(L+U)xx=D−1(b+(L+U)x)
 得Jacobi公式  
      
       
        
         
         
           x 
          
          
          
            ( 
           
          
            k 
           
          
            + 
           
          
            1 
           
          
            ) 
           
          
         
        
          = 
         
         
         
           D 
          
          
          
            − 
           
          
            1 
           
          
         
        
          ( 
         
        
          b 
         
        
          + 
         
        
          ( 
         
        
          L 
         
        
          + 
         
        
          U 
         
        
          ) 
         
         
         
           x 
          
          
          
            ( 
           
          
            k 
           
          
            ) 
           
          
         
        
          ) 
         
        
       
         x^{(k+1)}=D^{-1}(b+(L+U)x^{(k)}) 
        
       
     x(k+1)=D−1(b+(L+U)x(k))
 写成矩阵的形式
  
      
       
        
         
         
           [ 
          
          
           
            
             
              
              
                x 
               
              
                1 
               
               
               
                 ( 
                
               
                 k 
                
               
                 + 
                
               
                 1 
                
               
                 ) 
                
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                2 
               
               
               
                 ( 
                
               
                 k 
                
               
                 + 
                
               
                 1 
                
               
                 ) 
                
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                3 
               
               
               
                 ( 
                
               
                 k 
                
               
                 + 
                
               
                 1 
                
               
                 ) 
                
               
              
             
            
           
          
         
           ] 
          
         
        
          = 
         
         
         
           [ 
          
          
           
            
             
              
              
                1 
               
               
               
                 a 
                
               
                 11 
                
               
              
             
            
            
             
              
             
            
            
             
              
             
            
           
           
            
             
              
             
            
            
             
              
              
                1 
               
               
               
                 a 
                
               
                 22 
                
               
              
             
            
            
             
              
             
            
           
           
            
             
              
             
            
            
             
              
             
            
            
             
              
              
                1 
               
               
               
                 a 
                
               
                 33 
                
               
              
             
            
           
          
         
           ] 
          
         
         
         
           ( 
          
          
          
            [ 
           
           
            
             
              
               
               
                 b 
                
               
                 1 
                
               
              
             
            
            
             
              
               
               
                 b 
                
               
                 2 
                
               
              
             
            
            
             
              
               
               
                 b 
                
               
                 3 
                
               
              
             
            
           
          
            ] 
           
          
         
           − 
          
          
          
            [ 
           
           
            
             
              
               
              
             
             
              
               
               
                 a 
                
               
                 12 
                
               
              
             
             
              
               
               
                 a 
                
               
                 13 
                
               
              
             
            
            
             
              
               
               
                 a 
                
               
                 21 
                
               
              
             
             
              
               
              
             
             
              
               
               
                 a 
                
               
                 23 
                
               
              
             
            
            
             
              
               
               
                 a 
                
               
                 31 
                
               
              
             
             
              
               
               
                 a 
                
               
                 32 
                
               
              
             
             
              
               
              
             
            
           
          
            ] 
           
          
          
          
            [ 
           
           
            
             
              
               
               
                 x 
                
               
                 1 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
             
            
            
             
              
               
               
                 x 
                
               
                 2 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
             
            
            
             
              
               
               
                 x 
                
               
                 3 
                
                
                
                  ( 
                 
                
                  k 
                 
                
                  ) 
                 
                
               
              
             
            
           
          
            ] 
           
          
         
           ) 
          
         
        
       
         \begin{bmatrix} x_1^{(k+1)}\\x_2^{(k+1)}\\ x_3^{(k+1)} \end{bmatrix} = \begin{bmatrix} \frac{1}{a_{11}} & &\\ & \frac{1}{a_{22}} &\\ & &\frac{1}{a_{33}}\\ \end{bmatrix}\left( \begin{bmatrix} b_1\\b_2\\ b_3 \end{bmatrix}-\begin{bmatrix} & a_{12} &a_{13}\\ a_{21} & &a_{23}\\ a_{31} & a_{32} &\\ \end{bmatrix}\begin{bmatrix} x_1^{(k)}\\x_2^{(k)}\\ x_3^{(k)} \end{bmatrix}\right) 
        
       
      
              x1(k+1)x2(k+1)x3(k+1) 
              = 
              a111a221a331 
               
               
               b1b2b3 
               − 
               a21a31a12a32a13a23 
                
               x1(k)x2(k)x3(k) 
                
              
 下面是其一般形式下的算法
二、算法
💖 Jacobi迭代法
主要思路
输入:  
     
      
       
       
         A 
        
       
         , 
        
       
         b 
        
       
         , 
        
        
        
          x 
         
         
         
           ( 
          
         
           0 
          
         
           ) 
          
         
        
       
      
        A,b,x^{(0)} 
       
      
    A,b,x(0),输出  
     
      
       
       
         x 
        
       
      
        x 
       
      
    x
  
      
       
        
         
          
           
            
            
              x 
             
             
             
               ( 
              
             
               0 
              
             
               ) 
              
             
            
           
          
          
           
            
             
            
              = 
             
            
               initial vector  
             
            
           
          
         
         
          
           
            
            
              x 
             
             
             
               ( 
              
             
               k 
              
             
               + 
              
             
               1 
              
             
               ) 
              
             
            
           
          
          
           
            
             
            
              = 
             
             
             
               D 
              
              
              
                − 
               
              
                1 
               
              
             
            
              ( 
             
            
              b 
             
            
              + 
             
            
              ( 
             
            
              L 
             
            
              + 
             
            
              U 
             
            
              ) 
             
             
             
               x 
              
              
              
                ( 
               
              
                k 
               
              
                ) 
               
              
             
            
              ) 
             
            
           
          
         
        
       
         \begin{aligned} x^{(0)} &= \text{ initial vector } \\ x^{(k+1)} &= D^{-1}(b+(L+U)x^{(k)}) \end{aligned} 
        
       
     x(0)x(k+1)= initial vector =D−1(b+(L+U)x(k))
添加一些限制
- 容许误差 e_tol
- 最大迭代步 N N N
当 残差 < e_tol 或 迭代步数 ≥ N \geq N ≥N 时,停止迭代,输出结果
实现步骤
- 步骤 1: k = 0 k=0 k=0, x = x ( 0 ) x=x^{(0)} x=x(0);
- 步骤 2: 计算残差  
      
       
        
        
          r 
         
        
          = 
         
        
          ∥ 
         
        
          b 
         
        
          − 
         
        
          A 
         
        
          x 
         
        
          ∥ 
         
        
       
         r=\|b-Ax\| 
        
       
     r=∥b−Ax∥, 
  - 如果残差 r r r > e_tol 且 k < N k<N k<N,转步骤 3;
- 否则,转步骤 5;
 
- 步骤 3: 更新解向量
 x = D − 1 ( b + ( L + U ) x ( 0 ) ) x=D^{-1}(b+(L+U)x^{(0)}) x=D−1(b+(L+U)x(0))
- 步骤 4: x 0 = x x0=x x0=x, k = k + 1 k=k+1 k=k+1,转步骤 2;
- 步骤 5: 输出 x x x。

三、北太天元源程序
Jacobi迭代
function [x,k,r] = myJacobi(A,b,x0,e_tol,N)
% Jacobi迭代法解线性方程组
% Input: A, b(列向量), x0(初始值)
%        e_tol: error tolerant  
%        N: 限制迭代次数小于 N 次
% Output: x , k(迭代次数),r:残差
%   Version:            1.0
%   last modified:      01/27/2024
    n = length(b); k = 0; 
    x=zeros(n,N); % 记录每一次迭代的结果,方便后续作误差分析
    x(:,1)=x0; 
    L = -tril(A,-1); U = -triu(A,1); D = diag(diag(A));
    r = norm(b - A*x,2);
    while r > e_tol && k < N
        x(:,k+2) = inv(D)*(b+(L+U)*x(:,k+1));
        r = norm(b - A*x(:,k+2),2); % 残差
        k = k+1;
    end
    x = x(:,2:k+1); % x取迭代时的结果
    
    if k>N
        fprintf('迭代超出最大迭代次数');
    else
        fprintf('迭代次数=%i\n',k);
    end
end
保存为 myJacobi.m文件
四、数值算例
例1
 
     
      
       
       
         A 
        
       
         x 
        
       
         = 
        
       
         b 
        
       
      
        Ax=b 
       
      
    Ax=b,求  
     
      
       
       
         x 
        
       
      
        x 
       
      
    x
  
      
       
        
        
          A 
         
        
          = 
         
         
         
           ( 
          
          
           
            
             
             
               10 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               2 
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               11 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
           
           
            
             
             
               2 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               10 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               8 
              
             
            
           
          
         
           ) 
          
         
         
        
          b 
         
        
          = 
         
         
         
           ( 
          
          
           
            
             
             
               6 
              
             
            
           
           
            
             
             
               25 
              
             
            
           
           
            
             
              
              
                − 
               
              
                11 
               
              
             
            
           
           
            
             
             
               15 
              
             
            
           
          
         
           ) 
          
         
        
       
         A = \begin{pmatrix} 10 & -1 & 2 & 0 \\ -1 & 11 & -1 & 3 \\ 2 & -1 & 10 & -1 \\ 0 & 3 & -1 & 8 \\ \end{pmatrix}\quad b = \begin{pmatrix} 6 \\ 25 \\ -11 \\ 15 \\ \end{pmatrix} 
        
       
     A= 
              10−120−111−132−110−103−18 
              b= 
              625−1115 
              
用Gauss列主元消去法,得
x = 
   1.000000000000000
   2.000000000000000
  -1.000000000000000
   1.000000000000000
下面我们用Jacobi迭代法进行求解
设 N = 100 , e_tol = 1e-8, x0=[0; 0; 0; 0]
clc;clear all,format long;
N = 100; e_tol = 1e-8;
A=[10 -1 2 0; -1 11 -1 3; 2 -1 10 -1; 0 3 -1 8];
b=[6; 25; -11; 15];
x0=[0; 0; 0; 0];
t1 =tic;
    [x11,k1] = myJacobi(A,b,x0,e_tol,N)
toc(t1);
t2 = tic;
    [x12] = gsem_column(A,b)
toc(t2);
% 作图查看误差变化
    x_exact=[1;2;-1;1]; %真解
    n = length(b);
    error=zeros(n,k1);% 每个分量的误差
        error = abs(x_exact - x11) 
    res =zeros(1,k1); % 残差
    for i=1:1:k1
        res(i) = norm(b-A*x11(:,i),2);
    end 
    % 数值解
        figure(1);
        plot(1:k1,x11(1,:),'-*r',1:k1,x11(2,:),'-og', 1:k1,x11(3,:),'-+b',1:k1,x11(4,:),'-dk');
        legend('x_1','x_2','x_3','x_4');
        title('每个数值解的变化')
    % 残差变化
        figure(2);
        plot(1:k1,res,'-*r');
        legend('残差');
        title('残差变化')
    % 误差
        figure(3);
        plot(1:k1,error(1,:),'-*r',1:k1,error(2,:),'-og', 1:k1,error(3,:),'-+b',1:k1,error(4,:),'-dk');
        legend('x_1','x_2','x_3','x_4');
        title('误差变化')
得
迭代次数=26

 
 
例2
 
      
       
        
         
         
           [ 
          
          
           
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                1 
               
              
                2 
               
              
             
            
           
           
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                1 
               
              
                2 
               
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               0 
              
             
            
           
           
            
             
             
               0 
              
             
            
            
             
              
               
               
                 1 
                
               
                 2 
                
               
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
           
           
            
             
              
              
                1 
               
              
                2 
               
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
             
               0 
              
             
            
            
             
              
              
                − 
               
              
                1 
               
              
             
            
            
             
             
               3 
              
             
            
           
          
         
           ] 
          
         
         
         
           [ 
          
          
           
            
             
              
              
                x 
               
              
                1 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                2 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                3 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                4 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                4 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                5 
               
              
             
            
           
           
            
             
              
              
                x 
               
              
                6 
               
              
             
            
           
          
         
           ] 
          
         
        
          = 
         
         
         
           [ 
          
          
           
            
             
              
              
                5 
               
              
                2 
               
              
             
            
           
           
            
             
              
              
                3 
               
              
                2 
               
              
             
            
           
           
            
             
             
               1 
              
             
            
           
           
            
             
             
               1 
              
             
            
           
           
            
             
              
              
                3 
               
              
                2 
               
              
             
            
           
           
            
             
              
              
                5 
               
              
                2 
               
              
             
            
           
          
         
           ] 
          
         
        
          . 
         
        
       
         \begin{bmatrix}3&-1&0&0&0&\frac{1}{2}\\-1&3&-1&0&\frac{1}{2}&0\\0&-1&3&-1&0&0\\0&0&-1&3&-1&0\\0&\dfrac{1}{2}&0&-1&3&-1\\\frac{1}{2}&0&0&0&-1&3\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_4\\x_5\\x_6\end{bmatrix}=\begin{bmatrix}\frac{5}{2}\\ \frac{3}{2}\\1\\1\\\frac{3}{2}\\\frac{5}{2}\end{bmatrix}. 
        
       
      
              3−100021−13−102100−13−10000−13−100210−13−121000−13 
               
              x1x2x3x4x4x5x6 
              = 
              2523112325 
              .
 使用Gauss消去法与Jacobi迭代法分别对其进行求解,并观察有何差异。
 试着得到在更高阶数下的结果。
x x x的真解为 [ 1 , 1 , 1 , 1 , 1 , 1 ] T [1,1,1,1,1,1]^T [1,1,1,1,1,1]T
稀疏矩阵的构造:
function [A,b,x_sp] = setup_Sparse1(n)
    % 定义一个 n 阶的稀疏矩阵, 真解全为1
    % Input: n
    % Output: A,b
    %
    %   Version:            1.0
    %   last modified:      09/28/2023
    A = zeros(n,n);b = ones(n,1) * 1.5;
    b([1,n],1) = 2.5; b([n/2,n/2 + 1],1) = 1;
    x_sp = ones(n,1); % 真解
    for i = 1:1:n
        A(i,n+1-i) = 1/2;
        A(i,i) = 3;
    end
    for i =1:1:n-1
        A(i,i+1)= -1;A(i+1,i)= -1;
    end
end
保存为 setup_Sparse1.m 文件
实现代码
%% 测试 消去法 与 迭代法 在处理稀疏矩阵问题上的差距
clc;clear all,format long;
N = 100; e_tol = 1e-8;
n = 6; %  n 为 6 50 100 500 1000
[A,b,x]=setup_Sparse1(n);
x0 = zeros(n,1); 
t1 =tic;
[x11,k1,r1] = myJacobi(A,b,x0,e_tol,N);
toc(t1);
t2 = tic;
[x12] = gsem_column(A,b);
toc(t2);
r2 = norm(b-A*x12);
结果如下:
 n=6时
- Jacobi迭代次数为33次,耗时 0.254356 秒。 r = 8.383869485405770 e − 09 r= 8.383869485405770e-09 r=8.383869485405770e−09
- Gauss列主元耗时 0.246983 秒。 r = 0 r=0 r=0
n=50时
- Jacobi迭代次数为84次,耗时 0.252936 秒。 r = 8.506205291756777 e − 09 r= 8.506205291756777e-09 r=8.506205291756777e−09
- Gauss列主元耗时 0.499854 秒。 r = 5.197930934883577 e − 15 r=5.197930934883577e-15 r=5.197930934883577e−15
n=100时
- Jacobi迭代次数为84次,耗时 1.017717 秒。 r = 9.969971572640032 e − 09 r= 9.969971572640032e-09 r=9.969971572640032e−09
- Gauss列主元耗时 1.121281 秒。 r = 7.077617359078848 e − 15 r=7.077617359078848e-15 r=7.077617359078848e−15
n=500时
- Jacobi迭代次数为84次,耗时 20.812204 秒。 r = 9.964771950043455 e − 09 r= 9.964771950043455e-09 r=9.964771950043455e−09
- Gauss列主元耗时 21.329216 秒。 r = 8.862333997095065 e − 15 r=8.862333997095065e-15 r=8.862333997095065e−15
n=1000时
- Jacobi迭代次数为84次,耗时 34.252031 秒。 r = 9.964771950894769 e − 09 r= 9.964771950894769e-09 r=9.964771950894769e−09
- Gauss列主元耗时 89.985333 秒。 r = 1.072960336432300 e − 14 r=1.072960336432300e-14 r=1.072960336432300e−14
可以看出,随着稀疏矩阵规模的不断增大,迭代法相比直接法的优势越来越明显。
 直接法即能够在有限步内完成计算,随着阶数增大,(gauss消去法运算量 
     
      
       
       
         O 
        
       
         ( 
        
        
        
          n 
         
        
          3 
         
        
       
         ) 
        
       
      
        O(n^3) 
       
      
    O(n3)),所需步数,指数级增加。
而Jacobi迭代法,只需把精度控制在所需范围内即算完成任务,能够节约很多时间。



















