system: [SYSTEM]

user: 3. KdV方程的谱配置方法 3.1. KdV方程的谱配置格式 在式(1)中去 γ = ν = 1 ，考虑KdV方程的初边值问题： { ∂ t u + u ∂ x u + ∂ x 3 u = 0 ，     x ∈ R + ，   t > 0 ， u ( x ， t ) ， ∂ x u ( x ， t ) → 0 ，     x → + ∞ ，   t ≥ 0 ， u ( x ， 0 ) = g 0 ( x ) ，                       x ∈ R + ， u ( 0 ， t ) = g 1 ( t ) ，                           t ≥ 0. (6) 用 w N ( x ， t ) = ∑ j = 0 N u ( x j ， t ) φ j ( β ) ( x ) ， x ∈ R + ，逼近式(6)的解 u ( x ， t ) ，将其代入式(6)，得 { ∂ t w N ( x ， t ) + w N ( x ， t ) ∂ x w N ( x ， t ) + ∂ x 3 w N ( x ， t ) = 0 ， x = x k ， k = 1 ， 2 ， ⋯ ， N ， t > 0 w N ( x ， 0 ) = g 0 ( x ) ， x = x k ， k = 0 ， 1 ， ⋯ ， N ， w N ( 0 ， t ) = g 1 ( t ) ， t ≥ 0 (7) 式(7)等价于 { ∂ t u k ( t ) = − u k ( t ) ∑ j = 0 N u j ( t ) d k ， j ( β ) − ∑ j = 0 N u j ( t ) d ˜ k ， j ( β ) ， u j ( t ) = u ( x j ， t ) ， k = 1 ， 2 ， ⋯ ， N ， u k ( 0 ) = g 0 ( x k ) ， k = 0 ， 1 ， ⋯ ， N ， u 0 ( t ) = g 1 ( t ) . (8) 令 X ( t ) = ( u 1 ( t ) ， u 2 ( t ) ， ⋯ ， u N ( t ) ) T ， X 0 = ( g 0 ( x 1 ) ， g 0 ( x 2 ) ， ⋯ ， g 0 ( x N ) ) T ，及 A = ( d 1 ， 1 ( β ) d 1 ， 2 ( β ) ⋯ d 1 ， N ( β ) d 2 ， 1 ( β ) d 2 ， 2 ( β ) ⋯ d 2 ， N ( β ) ⋮ ⋮ ⋱ ⋮ d N ， 1 ( β ) d N ， 2 ( β ) ⋯ d N ， N ( β ) ) ，   B = ( d ˜ 1 ， 1 ( β ) d ˜ 1 ， 2 ( β ) ⋯ d ˜ 1 ， N ( β ) d ˜ 2 ， 1 ( β ) d ˜ 2 ， 2 ( β ) ⋯ d ˜ 2 ， N ( β ) ⋮ ⋮ ⋱ ⋮ d ˜ N ， 1 ( β ) d ˜ N ， 2 ( β ) ⋯ d ˜ N ， N ( β ) ) ，   C = ( d 1 ， 0 ( β ) ⋯ 0 0 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ d N ， 0 ( β ) ) ，   F = ( d ˜ 1 ， 0 ( β ) d ˜ 1 ， 0 ( β ) ⋮ d ˜ N ， 0 ( β ) ) 式(8)的矩阵形式为 { d X ( t ) d t = − B X ( t ) − X ( t ) ⋅ * ( A X ( t ) ) − g 1 ( t ) C X ( t ) − g 1 ( t ) F ，     t > 0 X ( 0 ) = X 0 ， (9) 其中符号“ ⋅ * ”表示对应位置元素相乘。 3.2. 数值结果 用格式(9)求解式(6)。在时间方向用步长为 τ 的Crank-Nicolson格式离散式(9)，得 { ( I + 1 2 τ ( B + g 1 ( t + τ ) C ) ) X ( t + τ ) = ( I − 1 2 τ ( B + g 1 ( t ) C ) ) X ( t ) − 1 2 τ ( X ( t + τ ) ⋅ * ( D X ( t + τ ) ) + X ( t ) ⋅ * ( D X ( t ) ) )       − 1 2 τ ( g 1 ( t ) + g 1 ( t + τ ) ) ，       t = 0 ， τ ， 2 τ ， ⋯ T − τ ， X ( 0 ) = X 0 . (10) 上式中I是N阶单位矩阵。显然(10)式是关于 X ( t ) 的非线性方程，通常用解非线性方程的迭代方法求其近似解。实际计算时一般用的是Newton迭代方法，但计算迭代矩阵比较麻烦。为简单起见，用如下的不动点迭代方法：对时间方向 t + τ 处构造迭代格式： { ( I + 1 2 τ ( B + g 1 ( t + τ ) C ) ) X n + 1 ( t + τ ) = ( I − 1 2 τ ( B + g 1 ( t ) C ) ) X n ( t ) − 1 2 τ ( X n + 1 ( t + τ ) ⋅ * ( D X n + 1 ( t + τ ) ) + X n ( t ) ⋅ * ( D X n ( t ) ) )         − 1 2 τ ( g 1 ( t ) + g 1 ( t + τ ) ) ，       t = 0 ， τ ， 2 τ ， ⋯ T − τ ， X ( 0 ) = X 0 . (11) 在迭代过程中给出条件：对任给的 ε > 0 ，当 | X n + 1 ( t + τ ) − X n ( t + τ ) | ≤ ε 时终止迭代，可得 X ( t ) 在 t + τ 处的值。 在(1)式中取 γ = ν = 1 ，相应的KdV方程有如下孤波解 [ 1 ] [ 10 ]： u = 12 κ 2 sech 2 ( κ ( x − 4 κ 2 t − x 0 ) ) ， (12) 上式中的 κ 和 x 0 是任意参数。用如下的无穷范数 E N ， τ ( t ) = max 0 ≤ j ≤ N | u ( x j ， t ) − w N ( β ) ( x j ， t ) | 计算数值解与理论解之间的误差。图(a)给出 t = 1 时不同时间步长 τ 对应的误差 E N ， τ ( t ) 的常用对数 log 10 E N ， τ ( t ) 随N的变化关系。可以发现，数值误差 E N ， τ ( 1 ) 只须空间节点数 N ≥ 8 ，时间步长 τ ≤ 0.001 时，误差即达到 O ( 10 − 14 ) 量级，说明所提算法格式有谱精度；图(b)与图(a)相比较，就是理论解(12)中的参数 κ 由0.3变为0.5，插值函数中的伸缩因子 β 由1变为1.5。可以看出，算法格式(9)对(10)式中的参数 κ 有较强的适应性，当 κ 较大时插值基函数中的 β 也适当的变大，空间方向仍可以达到谱精度；而已有的文献通常对较小的 κ 逼近精确解(10)，所以算法格式(9)对参数 κ 是稳定的，这是所提算法的一个优点。图(c)给出时间t分别取1和50时的误差变化，当 t ≥ 50 时，需要增加节点个数，所提算法格式仍然有效。图(d)是选取插值函数中的伸缩因子 β 不同的值时的误差，表明对孤波解而言，当选择较大的 β 时，数值误差 E N ， τ ( 1 ) 会变的小一些， β 的值通过试验得到的，理论上还没有解决如何选取最好的 β 值。 (a) β = 1 ， κ = 0.3 ， x 0 = − 20 (b) β = 1.5 ， κ = 0.5 ， x 0 = − 20 (c) β = 1 ， κ = 0.3 ， x 0 = − 20 ， τ = 0.001 (d) κ = 0.3 ， x 0 = − 20 ， τ = 0.01