线性方程组的SOR迭代法

写在前面

  • 1 SOR简介
  • 2 SOR算法推导
  • 3 SOR算法收敛性
  • 4 实例分析
  • 5 代码实现
  • 6 参考文献与链接

迭代法收敛定理

定理1(充要条件):
矩阵 M \mathbf{M} M的谱半径
ρ ( M ) = max ⁡ i { λ i ∣ i = 1 , 2 , ⋯ n } < 1 ( ∥ M ∥ 2 < 1 )    (1) \rho \left( \mathbf{M} \right) =\mathop {\max} \limits_i\left\{ \lambda _i\left| i=1,2,\cdots n \right. \right\} <1\left( \lVert \mathbf{M} \rVert _2<1 \right) \,\, \tag{1} ρ(M)=imax{λii=1,2,n}<1(M2<1)(1)

定理2(充分条件):
矩阵 M \mathbf{M} M的某个算子范数
∥ M ∥ < 1 (2) \lVert \mathbf{M} \rVert <1 \tag{2} M<1(2)

1 SOR简介

SOR是Successive Over Relaxation(逐次超松弛)的缩写。该方法是求解大型稀疏矩阵方程组的有效方法之一,也可看作为Gauss-Seidel迭代法的加速,Gauss-Seidel是SOR迭代的一种特殊形式。

2 SOR算法推导

将方程组 A X = b \mathbf{AX}=b AX=b写成
a i 1 x 1 + a i 2 x 2 + ⋯ + a i , i − 1 x i − 1 + a i i x i ⋯ + a i n x n = b i , ( i = 1 , 2 , ⋯   , n ) (2.1) a_{i 1} x_{1}+a_{i 2} x_{2}+\cdots+a_{i, i-1} x_{i-1}+a_{i i} x_{i} \cdots+a_{i n} x_{n}=b_{i}, \quad(i=1,2, \cdots, n)\tag{2.1} ai1x1+ai2x2++ai,i1xi1+aiixi+ainxn=bi,(i=1,2,,n)(2.1)

⇒ a i i x i = b i − ( a i 1 x 1 + a i 2 x 2 + ⋯ + a i , i − 1 x i − 1 ) − ( a i , i + 1 x i + 1 + ⋯ + a i n x n ) ⇒ a i i x i = a i i x i + ( b i − a i 1 x 1 − a i 2 x 2 − ⋯ − a i , i − 1 x i − 1 − a i i x i − a i , i + 1 x i + 1 − ⋯ − a i n x n ) ⇒ x i = x i + 1 a i i ( b i − a i 1 x 1 − a i 2 x 2 − ⋯ − a i , i − 1 x i − 1 − a i t x i − a i , i + 1 x i + 1 − ⋯ − a i n x n ) \begin{aligned} &\Rightarrow a_{i i} x_{i}=b_{i}-\left(a_{i 1} x_{1}+a_{i 2} x_{2}+\cdots+a_{i, i-1} x_{i-1}\right)-\left(a_{i, i+1} x_{i+1}+\cdots+a_{i n} x_{n}\right)\\ &\Rightarrow a_{i i} x_{i}=a_{i i} x_{i}+\left(b_{i}-a_{i 1} x_{1}-a_{i 2} x_{2}-\cdots-a_{i, i-1} x_{i-1}-a_{i i} x_{i}-a_{i, i+1} x_{i+1}-\cdots-a_{i n} x_{n}\right)\\ &\Rightarrow x_{i}=x_{i}+\frac{1}{a_{i i}}\left(b_{i}-a_{i 1} x_{1}-a_{i 2} x_{2}-\cdots-a_{i, i-1} x_{i-1}-a_{i t} x_{i}-a_{i, i+1} x_{i+1}-\cdots-a_{i n} x_{n}\right) \end{aligned} aiixi=bi(ai1x1+ai2x2++ai,i1xi1)(ai,i+1xi+1++ainxn)aiixi=aiixi+(biai1x1ai2x2ai,i1xi1aiixiai,i+1xi+1ainxn)xi=xi+aii1(biai1x1ai2x2ai,i1xi1aitxiai,i+1xi+1ainxn)
于是Gauss-Seidel迭代法可写成( a i , i ≠ 0 a_{i,i}\ne 0 ai,i=0
x i ( k + 1 ) = x i ( k ) + 1 a i i ( b i − a i 1 x 1 ( k + 1 ) − ⋯ − a i , i − 1 x i − 1 ( k + 1 ) − a i n x i ( k ) − ⋯ − a i n x n ( k ) ) = x i ( k ) + 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i n a i j x j ( k ) ) r i ( k ) = ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i n a i j x j ( k ) ) , i = 1 , 2 , ⋯   , n (2.2) \begin{array}{c} x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{1}{a_{i i}}\left(b_{i}-a_{i 1} x_{1}^{(k+1)}-\cdots-a_{i, i-1} x_{i-1}^{(k+1)}-a_{i n} x_{i}^{(k)}-\cdots-a_{i n} x_{n}^{(k)}\right) \\ =x_{i}^{(k)}+\frac{1}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right) \\ r_{i}^{(k)}=\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n \end{array}\tag{2.2} xi(k+1)=xi(k)+aii1(biai1x1(k+1)ai,i1xi1(k+1)ainxi(k)ainxn(k))=xi(k)+aii1(bij=1i1aijxj(k+1)j=inaijxj(k))ri(k)=(bij=1i1aijxj(k+1)j=inaijxj(k)),i=1,2,,n(2.2)

r i ( k ) = ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i n a i j x j ( k ) ) , i = 1 , 2 , ⋯   , n r_{i}^{(k)}=\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n ri(k)=(bij=1i1aijxj(k+1)j=inaijxj(k)),i=1,2,,n
则(2.2)式可写成
x i ( k + 1 ) = x i ( k ) + 1 a i i r i ( k ) (2.3) x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{1}{a_{i i}} r_{i}^{(k)}\tag{2.3} xi(k+1)=xi(k)+aii1ri(k)(2.3)
由(2.3)式可看出,Gauss-Seidel迭代法的第 k + 1 k+1 k+1步的基础上每个分量上加上 1 a i i r i ( k ) \frac{1}{a_{i i}} r_{i}^{(k)} aii1ri(k)。为了获得更快的收敛效果,在修正项的前面乘以一个参数 ω \omega ω,于是得到逐次超松弛算法
x i ( k + 1 ) = x i ( k ) + ω a i i r i ( k ) , i = 1 , 2 , ⋯   , n (2.4) x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{\omega}{a_{i i}} r_{i}^{(k)}, \quad i=1,2, \cdots, n\tag{2.4} xi(k+1)=xi(k)+aiiωri(k),i=1,2,,n(2.4)

x i ( k + 1 ) = ( 1 − ω ) x i ( k ) + ω a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i + 1 n a i j x j ( k ) ) , i = 1 , 2 , ⋯   , n (2.5) x_{i}^{(k+1)}=(1-\omega) x_{i}^{(k)}+\frac{\omega}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i+1}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n\tag{2.5} xi(k+1)=(1ω)xi(k)+aiiω(bij=1i1aijxj(k+1)j=i+1naijxj(k)),i=1,2,,n(2.5)
其矩阵形式为
X ( k + 1 ) = ( 1 − ω ) X ( k ) + ω D − 1 ( b + L X ( k ) + U X ( k ) ) (2.6) \mathbf{X}^{(k+1)}=(1-\omega) \mathbf{X}^{(k)}+\omega \mathbf{D}^{-1}\left(b+\mathbf{L} \mathbf{X}^{(k)}+\mathbf{U} \mathbf{X}^{(k)}\right)\tag{2.6} X(k+1)=(1ω)X(k)+ωD1(b+LX(k)+UX(k))(2.6)
其中, A = D − L − U \mathbf{A=D-L-U} A=DLU
D = ( a 11 a 22 ⋱ a n n ) , L = ( 0 a 21 0 ⋮ ⋱ ⋱ a n 1 a n 2 ⋯ 0 ) , U = ( 0 a 12 ⋯ a 1 n 0 ⋱ a 2 n ⋱ ⋮ 0 ) \mathbf{D}=\left( \begin{matrix} a_{11}& & & \\ & a_{22}& & \\ & & \ddots& \\ & & & a_{nn}\\ \end{matrix} \right), \mathbf{L}=\left( \begin{matrix} 0& & & \\ a_{21}& 0& & \\ \vdots& \ddots& \ddots& \\ a_{n1}& a_{n2}& \cdots& 0\\ \end{matrix} \right) , \mathbf{U}=\left( \begin{matrix} 0& a_{12}& \cdots& a_{1n}\\ & 0& \ddots& a_{2n}\\ & & \ddots& \vdots\\ & & & 0\\ \end{matrix} \right) D=a11a22ann,L=0a21an10an20,U=0a120a1na2n0

3 SOR算法收敛性

由(2.6)式有
D X ( k + 1 ) = ( 1 − ω ) D X ( k ) + ω ( b + L X ( k + 1 ) + U X ( k ) ) \mathbf{DX}^{\left( k+1 \right)}=\left( 1-\omega \right) \mathbf{DX}^{\left( k \right)}+\omega \left( b+\mathbf{LX}^{\left( k+1 \right)}+\mathbf{UX}^{\left( k \right)} \right) DX(k+1)=(1ω)DX(k)+ω(b+LX(k+1)+UX(k))

D X ( k + 1 ) − ω L X ( k + 1 ) = ( 1 − ω ) D X ( k ) + ω U X ( k ) + ω b \mathbf{D} \mathbf{X}^{(k+1)}-\omega \mathbf{L} \mathbf{X}^{(k+1)}=(1-\omega) \mathbf{D} \mathbf{X}^{(k)}+\omega \mathbf{U} \mathbf{X}^{(k)}+\omega b DX(k+1)ωLX(k+1)=(1ω)DX(k)+ωUX(k)+ωb
于是有
( D − ω L ) X ( k + 1 ) = [ ( 1 − ω ) D + ω U ] X ( k ) + ω b ⇒ X ( k + 1 ) = ( D − ω L ) − 1 [ ( 1 − ω ) D + ω U ] X ( k ) + ω ( D − ω L ) − 1 b \begin{array}{l} (\mathbf{D}-\omega \mathbf{L}) \mathbf{X}^{(k+1)}=[(1-\omega) \mathbf{D}+\omega \mathbf{U}] \mathbf{X}^{(k)}+\omega b \\ \Rightarrow \mathbf{X}^{(k+1)}=(\mathbf{D}-\omega \mathbf{L})^{-1}[(1-\omega) \mathbf{D}+\omega \mathbf{U}] \mathbf{X}^{(k)}+\omega(\mathbf{D}-\omega \mathbf{L})^{-1} b \end{array} (DωL)X(k+1)=[(1ω)D+ωU]X(k)+ωbX(k+1)=(DωL)1[(1ω)D+ωU]X(k)+ω(DωL)1b

{ B ω = ( D − ω L ) − 1 [ ( 1 − ω ) D + ω U ] F ω = ω ( D − ω L ) − 1 b (3.1) \left\{\begin{array}{c} \mathbf{B}_{\omega}=(\mathbf{D}-\omega \mathbf{L})^{-1}[(1-\omega) \mathbf{D}+\omega \mathbf{U}] \\ \mathbf{F}_{\omega}=\omega(\mathbf{D}-\omega \mathbf{L})^{-1} b \end{array}\right. \tag{3.1} {Bω=(DωL)1[(1ω)D+ωU]Fω=ω(DωL)1b(3.1)
则有
X ( k + 1 ) = B ω ( X ) ( k ) + F ω (3.2) \mathbf{X}^{(k+1)}=\mathbf{B_{\omega}} \mathbf(X)^{(k)}+\mathbf{F_{\omega}} \tag{3.2} X(k+1)=Bω(X)(k)+Fω(3.2)
其中, B ω \mathbf{B_{ \omega}} Bω为SOR迭代矩阵。
由收敛定理的定理1和定理2可知,SOR收敛的充要条件是 ρ ( B ω ) < 1 \rho{(\mathbf{B_{\omega}})}<1 ρ(Bω)<1或者 ∥ B ω ∥ 2 < 1 \lVert \mathbf{B}_{\omega} \rVert _2 <1 Bω2<1,可以看出SOR迭代法收敛与否或收敛的快慢都与松弛因子 ω \omega ω有关,因此SOR迭代算法存在如下定理.
定理3: SOR迭代法收敛的充要条件是松弛因子 0 < ω < 2 0<\omega<2 0<ω<2 .
证:由于SOR收敛,则 ρ ( B ω ) < 1 \rho{(\mathbf{B_{\omega}})}<1 ρ(Bω)<1。记 B ω \mathbf{B_{\omega}} Bω的特征值为 λ 1 , λ 2 , ⋯   , λ n \lambda _1,\lambda _2,\cdots ,\lambda _n λ1,λ2,,λn,而 n n n阶矩阵的 n n n个特征值之积等于其行列式之值,即
∣ det ⁡ B ω ∣ = ∣ λ 1 λ 2 ⋯ λ n ∣ \left|\operatorname{det} \mathbf{B}_{\omega}\right|=\left|\lambda_{1} \lambda_{2} \cdots \lambda_{n}\right| detBω=λ1λ2λn

∣ λ i ∣ ≤ ∣ ρ ( B ω ) ∣ \left|\lambda_{i}\right| \leq\left|\rho\left(\mathbf{B}_{\omega}\right)\right| λiρ(Bω)

∣ det ⁡ B ω ∣ = ∣ λ 1 λ 2 ⋯ λ n ∣ ≤ [ ρ ( B ω ) ] n < 1 \left|\operatorname{det} \mathbf{B}_{\omega}\right|=\left|\lambda_{1} \lambda_{2} \cdots \lambda_{n}\right| \leq\left[\rho\left(\mathbf{B}_{\omega}\right)\right]^{n}<1 detBω=λ1λ2λn[ρ(Bω)]n<1
另一方面,由
B ω = ( D − ω L ) − 1 [ ( 1 − ω ) D + ω U ] \mathbf{B}_{\omega}=(\mathbf{D}-\omega \mathbf{L})^{-1}[(1-\omega) \mathbf{D}+\omega \mathbf{U}] Bω=(DωL)1[(1ω)D+ωU]

∣ det ⁡ B ω ∣ = ∣ det ⁡ ( D − ω L ) − 1 ∣ ⋅ ∣ det ⁡ [ ( 1 − ω ) D + ω U ] \left|\operatorname{det} \mathbf{B}_{\omega}\right|=\left|\operatorname{det}(\mathbf{D}-\omega \mathbf{L})^{-1}\right| \cdot | \operatorname{det}[(1-\omega) \mathbf{D}+\omega \mathbf{U}] detBω=det(DωL)1det[(1ω)D+ωU]

∣ det ⁡ B ω ∣ = ∣ det ⁡ [ ( 1 − ω ) D + ω U ] ∣ ∣ det ⁡ ( D − ω L ) ∣ = ∣ 1 − ω ∣ n \left|\operatorname{det} \mathbf{B}_{\omega}\right|=\frac{|\operatorname{det}[(1-\omega) \mathbf{D}+\omega \mathbf{U}]|}{|\operatorname{det}(\mathbf{D}-\omega \mathbf{L})|}=|1-\omega|^{n} detBω=det(DωL)det[(1ω)D+ωU]=1ωn
因此有 ∣ 1 − ω ∣ n < 1 |1-\omega|^{n}<1 1ωn<1或者 ∣ 1 − ω ∣ < 1 |1-\omega|<1 1ω<1,也即 0 < ω < 2 0<\omega<2 0<ω<2.            □ \square

定理4:如果矩阵 A \mathbf{A} A是对称正定的,则SOR法对于 0 < ω < 2 0<\omega<2 0<ω<2是收敛的。

4 实例分析

用逐次超松弛(SOR)迭代法求解方程组 A X = b \mathbf{AX}=b AX=b,其中矩阵 A \mathbf{A} A
A = [ 12 − 2 1 − 2 12 − 2 1 1 − 2 12 − 2 1 ⋱ ⋱ ⋱ ⋱ ⋱ 1 − 2 12 − 2 1 1 − 2 12 − 2 1 − 2 12 ] [ x 1 x 2 x 3 ⋮ x 18 x 19 x 20 ] = [ 5 5 5 ⋮ 5 5 5 ] (4.1) \mathbf{A}=\left[\begin{array}{ccccccc} 12 & -2 & 1 & & & & \\ -2 & 12 & -2 & 1 & & & \\ 1 & -2 & 12 & -2 & 1 & & \\ & \ddots & \ddots & \ddots & \ddots & \ddots & \\ & & 1 & -2 & 12 & -2 & 1 \\ & & & 1 & -2 & 12 & -2 \\ & & & & 1 & -2 & 12 \end{array}\right]\left[\begin{array}{c} x_{1} \\ x_{2} \\ x_{3} \\ \vdots \\ x_{18} \\ x_{19} \\ x_{20} \end{array}\right]=\left[\begin{array}{c} 5 \\ 5 \\ 5 \\ \vdots \\ 5 \\ 5 \\ 5 \end{array}\right]\tag{4.1} A=122121221212112211122121221212x1x2x3x18x19x20=555555(4.1)
利用Matlab2016a软件求解(4.1)式(具体程序见第五节),讨论不同的松弛因子 ω \omega ω对迭代速度的影响。其中参数设置为:最大迭代值为500。

由于(4.1)式是一个对称正定阵,且本文规定松弛因子 0 < ω < 2 0<\omega<2 0<ω<2,因此由定理4可知,式(4.1)一定收敛,也即有解。求解的结果如下表。

表1 不同 ω \omega ω值对方程收敛速度的影响

w
迭代次数
0.3
120
0.6
50
0.9
25
1.2
30
1.5
50
1.8
150

在这里插入图片描述
.

图1 不同 ω \omega ω值时的SOR迭代曲线值

由表1或图1可知,(1)当SOR迭代法松弛因子 ω > 1 \omega>1 ω>1时, ω \omega ω值越大,迭代的次数就越多,收敛速度就越慢, ω \omega ω越接近1时,迭代的次数越少,收敛速度越快;(2)当SOR迭代法松弛因子 ω < 1 \omega<1 ω<1时, ω \omega ω越小,迭代的次数就越多,收敛速度就越慢, ω \omega ω越接近1时,迭代的次数越少,收敛速度越快;(3)SOR迭代法松弛因子不在范围内时,系数矩阵的谱半径大于1,不收敛。

小结

  1. 在SOR迭代算法中,松弛因子 ω \omega ω越接近1时,迭代的次数越小,收敛速度越快,故 ω \omega ω最优值应选择 ω = 1 \omega=1 ω=1
  2. 在SOR迭代算法中,松弛因子 ω \omega ω距离1越远时,迭代次数越多,收敛速度越慢。
  3. 在SOR迭代算法中,松弛因子应选择 0 < ω < 2 0<\omega<2 0<ω<2,当 ω \omega ω超过这个范围时,不满足收敛定理,即谱半径不小于1,此时方程无解。

5 代码实现

close all;clear;clc;%清空环境变量
load('A.mat');%导入矩阵A
b=5*ones(20,1);%导入矩阵b
D=diag(diag(A));%求解对角阵
LA=tril(A);%抽取下三角矩阵
U=LA-A;%得到去除对角线元素的上三角阵
L=D-LA;%得到去除对角线元素的下三角阵
XXX=[];%存储不同松弛因子的迭代值
I=[];%记录迭代终止次数
for w=0.3:0.3:2;%设置松弛因子大小0<w<2
    XX=[];
    %% SOR迭代公式
    M=(D-w*L)\((1-w)*D+w*U);
    f=w*((D-w*L)\b);
    MaxEigM = max(abs(eig(M)));%求谱半径
    x=[];
    x(:,1)=5.*randn(size(b));%给出任意的迭代初始值
    N=500;%最大迭代次数
    %% 如果谱半径小于1则说明收敛,否则不收敛    
    if MaxEigM<1
        i=1;        
        while i<N
            if norm(A*x(:,i)-b)>=1e-10;
                x(:,i+1)=M*x(:,i)+f;
                z=x(:,i+1);
                i=i+1;                              
            else
                n=i;
                z=x(:,i);
                i=N;
            end
        end
        XX=[XX,x];
        I=[I length(XX)];
        XXX=[XXX XX];
        e=norm(A*z-b);       
    else
        out='谱半径大于等于1,该方程不能用SOR方法求解'
    end
end
%% 绘图
subplot(2,3,1)
plot(1:I(1,1),XXX(:,1:I(1,1)),'linewidth',1.5)
grid on
title('\omega = 0.3')
subplot(2,3,2)
plot(1:I(1,2),XXX(:,1:I(1,2)),'linewidth',1.5)
grid on
title('\omega = 0.6')
subplot(2,3,3)
plot(1:I(1,3),XXX(:,1:I(1,3)),'linewidth',1.5)
grid on
title('\omega = 0.9')
subplot(2,3,4)
plot(1:I(1,4),XXX(:,1:I(1,4)),'linewidth',1.5)
grid on
title('\omega = 1.2')
subplot(2,3,5)
plot(1:I(1,5),XXX(:,1:I(1,5)),'linewidth',1.5)
grid on
title('\omega = 1.5')
subplot(2,3,6)
plot(1:I(1,6),XXX(:,1:I(1,6)),'linewidth',1.5)
grid on
title('\omega = 1.8')
suptitle('不同\omega值对SOR迭代法的影响')

数据下载地址
可关注微信公众号用数学看世界回复“SOR密码”获取数据下载地址及密码

6 参考文献与链接

[1] 数值分析 曾繁慧
[2] 科学计算与应用软件讲义_迭代思想 胡行华
[3] https://mdnice.com/
[4] Markdown Nice插件下载
[5] Markdown三线表制作方法
为了能够敲公式,第一次使用Markdown写文章,有很多不足之处请谅解
Markdown真香,更多内容请关注公众号获取

在这里插入图片描述

  • 18
    点赞
  • 162
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
当您想使用 LaTeX 创建一个包含三线表(也称为\toprule, \midrule 和 \bottomrule)的算法时,可以使用以下代码示例: ```latex \usepackage{algorithm} \usepackage{algorithmicx} \usepackage{algpseudocode} \usepackage{booktabs} \begin{algorithm} \caption{算法标题} \hspace*{\algorithmicindent} \textbf{输入:} 输入描述 \hspace*{\algorithmicindent} \textbf{输出:} 输出描述 \begin{algorithmic}[1] \Procedure{你的算法名称}{输入参数} \State 初始化 \State 执行步骤1 \State 执行步骤2 \State \Return 结果 \EndProcedure \end{algorithmic} \end{algorithm} ``` 上述代码示例中,我们首先引入了一些必要的包,包括`algorithm`、`algorithmicx`、`algpseudocode`和`booktabs`。然后,在`algorithm`环境中,使用`\caption`命令来添加算法标题。紧接着,我们使用`\hspace*{\algorithmicindent}`来设置输入和输出的缩进。在`\begin{algorithmic}`中,数字1表示行号从1开始递增。 在算法的主体部分,您可以使用`\Procedure`命令来定义自己的算法名称,并在其中编写算法的逻辑步骤。每个步骤都使用`\State`命令表示,并且可以根据需要自行添加或删除步骤。最后,使用`\EndProcedure`命令来结束算法定义。 请注意,上述代码示例中没有直接包含三线表的代码。如果您想在算法中添加三线表,可以在`\begin{algorithm}`之前或`\end{algorithm}`之后插入表格代码,并使用`booktabs`包提供的`\toprule`、`\midrule`和`\bottomrule`命令来创建三线表的不同部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小黑吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值