返回 主页

目录

中心差分法:简要总结

中心差分方法是一种经典的显式时间积分算法,广泛应用于结构动力学、有限元分析及分子动力学模拟中。

1. 核心原理与公式推导

中心差分法基于泰勒级数展开,利用当前时刻 t 前后两个时刻( t-\Delta tt+\Delta t )的位移来近似计算 t 时刻的速度和加速度。

2. 算法特性:显式积分 (Explicit Integration)

中心差分法最显著的特征是其显式性质,这带来了巨大的计算优势:

这使得该方法非常适合大规模并行计算。

3. 起步程序 (Starting Procedure)

由于公式需要 u_{t-\Delta t} 来计算 u_{t+\Delta t} ,而在初始时刻 t=0 时只有 u_0\dot{u}_0 ,因此需要特殊处理来启动计算:

4. 常用变异格式

文档介绍了三种常见的变体,适用于不同场景:

  1. Verlet 格式
    • 直接利用 u_{t+\Delta t} = 2u_t - u_{t-\Delta t} + \ddot{u}_t \Delta t^2
    • 特点:位移截断误差为 O(\Delta t^4) ,精度较高;但不直接输出速度,速度需额外计算且误差为 O(\Delta t^2)
  2. 蛙跳格式 (Leapfrog)
    • 位移和速度在时间轴上交错求解(速度在 t+\Delta t/2 ,位移在 t+\Delta t )。
    • 特点:同样不直接给出同一时刻的速度和位移。
  3. 速度 Verlet 格式 (Velocity Verlet / Leapfrog Verlet)
    • 结合了蛙跳的思想,但通过两步更新速度,使得能在同一时刻获得位移、速度和加速度。
    • 应用:是显式有限元程序(如 LS-DYNA)和分子动力学程序中最常用的格式。
    • 步骤
      1. 更新半步速度;
      2. 更新全步位移;
      3. 计算新时刻加速度;
      4. 更新另半步速度得到全步速度。

5. 稳定性分析 (Stability Analysis)

中心差分法是条件稳定的,其稳定性取决于时间步长 \Delta t 与系统固有特性的关系。

6. 实际应用中的限制与注意事项

7. 算法流程总结

根据文档提供的 Fortran 代码逻辑,标准实施步骤为:

  1. 初始化:形成 M, C, K (或仅 M, C ),给定初值,计算 u_{-\Delta t} ,计算积分常数 c_0, c_1, c_2, c_3 ,形成并分解有效质量矩阵 \hat{M}
  2. 循环迭代 (每步 \Delta t )
    • 计算 t 时刻的有效载荷 \hat{Q}_t
    • 求解 \hat{M} u_{t+\Delta t} = \hat{Q}_t 得到新位移。
    • (可选)回代计算 t 时刻的速度和加速度。
    • 更新变量 ( u_{t-\Delta t} \leftarrow u_t , u_t \leftarrow u_{t+\Delta t} ),时间推进。

中心差分法以其显式、无需迭代、内存占用低的特点,成为解决高频、瞬态、非线性及接触问题(如冲击、爆炸)的首选方法。然而,其条件稳定性强制要求极小的时间步长,使其不适用于低频主导或长时程的动力学问题(此类问题通常选用 Newmark- \beta 法等隐式算法)。在实际工程中,往往需要在网格精度(影响最高频率)和计算成本之间寻找平衡。

中心差分法:算法流程

输入:

输出:

1. 初始化阶段

2. 时间步循环迭代

对于 k = 1N_{steps} 执行:

3. 结束处理

关键说明

中心差分法:算法推导

从泰勒级数展开出发,严格构建离散化格式,处理初始条件起步问题,并深入分析其稳定性准则。

1. 问题定义与控制方程

考虑一个 n 自由度线性动力学系统,其运动微分方程由下式给出:

\mathbf{M} \ddot{\mathbf{u}}(t) + \mathbf{C} \dot{\mathbf{u}}(t) + \mathbf{K} \mathbf{u}(t) = \mathbf{Q}(t) \quad \text{......(1)}

其中:

目标:已知 t=0 时刻的初始位移 \mathbf{u}_0 和初始速度 \dot{\mathbf{u}}_0 ,求解离散时间点 t_k = k \Delta t ( k=0, 1, 2, \dots ) 上的位移响应 \mathbf{u}_k 。其中 \Delta t 为时间步长。

2. 基于泰勒级数的差分近似推导

中心差分法的核心思想是利用当前时刻 t 前后两个时刻的位移值来近似该时刻的速度和加速度。

2.1 泰勒级数展开

将位移函数 \mathbf{u}(t) 在时刻 t 处分别向 t+\Delta tt-\Delta t 进行泰勒级数展开:

前向展开 (Forward Expansion):

\mathbf{u}_{t+\Delta t} = \mathbf{u}_t + \Delta t \dot{\mathbf{u}}_t + \frac{\Delta t^2}{2!} \ddot{\mathbf{u}}_t + \frac{\Delta t^3}{3!} \dddot{\mathbf{u}}_t + O(\Delta t^4) \quad \text{......(2)}

后向展开 (Backward Expansion):

\mathbf{u}_{t-\Delta t} = \mathbf{u}_t - \Delta t \dot{\mathbf{u}}_t + \frac{\Delta t^2}{2!} \ddot{\mathbf{u}}_t - \frac{\Delta t^3}{3!} \dddot{\mathbf{u}}_t + O(\Delta t^4) \quad \text{......(3)}

其中 O(\Delta t^4) 表示截断误差项,其量级为 \Delta t^4

2.2 速度与加速度的中心差分格式

为了消去高阶项并解出 \dot{\mathbf{u}}_t\ddot{\mathbf{u}}_t ,我们对上述两式进行线性组合。

推导速度公式: 将式 (2) 减去式 (3)

\mathbf{u}_{t+\Delta t} - \mathbf{u}_{t-\Delta t} = 2\Delta t \dot{\mathbf{u}}_t + \frac{2\Delta t^3}{3!} \dddot{\mathbf{u}}_t + O(\Delta t^5)

忽略 O(\Delta t^3) 及更高阶小量,整理得 t 时刻速度的中心差分近似:

\dot{\mathbf{u}}_t \approx \frac{1}{2\Delta t} (\mathbf{u}_{t+\Delta t} - \mathbf{u}_{t-\Delta t}) \quad \text{......(4)}

注:该近似的截断误差为 O(\Delta t^2) 推导加速度公式: 将式 (2) 加上式 (3):

\mathbf{u}_{t+\Delta t} + \mathbf{u}_{t-\Delta t} = 2\mathbf{u}_t + \Delta t^2 \ddot{\mathbf{u}}_t + O(\Delta t^4)

忽略 O(\Delta t^4) 项,整理得 t 时刻加速度的中心差分近似:

\ddot{\mathbf{u}}_t \approx \frac{1}{\Delta t^2} (\mathbf{u}_{t+\Delta t} - 2\mathbf{u}_t + \mathbf{u}_{t-\Delta t}) \quad \text{......(5)}

注:该近似的截断误差亦为 O(\Delta t^2)

3. 运动方程的离散化与递推公式

将推导出的近似公式 (4) 和 (5) 代入原始运动方程 (1) 中,且在 t 时刻建立平衡关系:

\mathbf{M} \left[ \frac{1}{\Delta t^2} (\mathbf{u}_{t+\Delta t} - 2\mathbf{u}_t + \mathbf{u}_{t-\Delta t}) \right] + \mathbf{C} \left[ \frac{1}{2\Delta t} (\mathbf{u}_{t+\Delta t} - \mathbf{u}_{t-\Delta t}) \right] + \mathbf{K} \mathbf{u}_t = \mathbf{Q}_t \quad \text{......(6)}

我们的目标是求解未知量 \mathbf{u}_{t+\Delta t} 。因此,需要将含有 \mathbf{u}_{t+\Delta t} 的项移至等式左侧,其余已知项( \mathbf{u}_t, \mathbf{u}_{t-\Delta t} )移至右侧。

3.1 合并同类项

提取 \mathbf{u}_{t+\Delta t} 的系数:

\left( \frac{1}{\Delta t^2} \mathbf{M} + \frac{1}{2\Delta t} \mathbf{C} \right) \mathbf{u}_{t+\Delta t} = \mathbf{Q}_t - \mathbf{K} \mathbf{u}_t + \mathbf{M} \left( \frac{2}{\Delta t^2} \mathbf{u}_t - \frac{1}{\Delta t^2} \mathbf{u}_{t-\Delta t} \right) + \mathbf{C} \left( \frac{1}{2\Delta t} \mathbf{u}_{t-\Delta t} \right)

整理右侧关于 \mathbf{u}_t\mathbf{u}_{t-\Delta t} 的项:

\begin{aligned} \text{Right Hand Side} &= \mathbf{Q}_t - \left( \mathbf{K} - \frac{2}{\Delta t^2} \mathbf{M} \right) \mathbf{u}_t - \left( \frac{1}{\Delta t^2} \mathbf{M} - \frac{1}{2\Delta t} \mathbf{C} \right) \mathbf{u}_{t-\Delta t} \end{aligned}

3.2 定义有效矩阵与载荷向量

为了简化表达,引入以下记号(对应 P1 中的积分常数):令 c_0 = \frac{1}{\Delta t^2}, \quad c_1 = \frac{1}{2\Delta t} 。则 c_2 = 2c_0 = \frac{2}{\Delta t^2}

定义 有效质量矩阵 (Effective Mass Matrix) \hat{\mathbf{M}}

\hat{\mathbf{M}} = c_0 \mathbf{M} + c_1 \mathbf{C} = \frac{1}{\Delta t^2} \mathbf{M} + \frac{1}{2\Delta t} \mathbf{C} \quad \text{......(7)}

定义 ** t 时刻的有效载荷向量 (Effective Load Vector)** \hat{\mathbf{Q}}_t

\hat{\mathbf{Q}}_t = \mathbf{Q}_t - \left( \mathbf{K} - c_2 \mathbf{M} \right) \mathbf{u}_t - \left( c_0 \mathbf{M} - c_1 \mathbf{C} \right) \mathbf{u}_{t-\Delta t} \quad \text{......(8)}

于是,离散化的运动方程简化为线性方程组:

\hat{\mathbf{M}} \mathbf{u}_{t+\Delta t} = \hat{\mathbf{Q}}_t \quad \text{......(9)}

3.3 显式积分特性分析

观察式 (9) 左端的 \hat{\mathbf{M}}

  1. 刚度矩阵缺席\mathbf{K} 仅出现在右端载荷项中,不参与左端系数矩阵的构成。这意味着不需要对 \mathbf{K} 进行三角分解或求逆。
  2. 对角化优势:若采用 集中质量矩阵 (Lumped Mass Matrix),则 \mathbf{M} 为对角阵。若阻尼 \mathbf{C} 可忽略或也为对角阵(如瑞利阻尼中的质量比例部分),则 \hat{\mathbf{M}} 也是对角阵。 此时,式 (9) 退化为 n 个独立的标量方程,第 i 个自由度的解为:u_{t+\Delta t}^{(i)} = \frac{\hat{Q}_t^{(i)}}{\hat{M}_{ii}} = \frac{\hat{Q}_t^{(i)}}{c_0 M_{ii} + c_1 C_{ii}} \quad \text{......(10)}这避免了大型矩阵求逆运算,计算效率极高,称为 显式积分 (Explicit Integration)

4. 起步程序 (Starting Procedure)

中心差分法是两步法(Two-step method),计算 \mathbf{u}_{t+\Delta t} 需要依赖 \mathbf{u}_t\mathbf{u}_{t-\Delta t} 。 在初始时刻 t=0 ,已知 \mathbf{u}_0\dot{\mathbf{u}}_0 ,但 \mathbf{u}_{-\Delta t} 未知。必须构造虚拟的起始位移。

4.1 初始加速度计算

首先利用 t=0 时刻的运动方程 (1) 求出初始加速度 \ddot{\mathbf{u}}_0

\mathbf{M} \ddot{\mathbf{u}}_0 = \mathbf{Q}_0 - \mathbf{C} \dot{\mathbf{u}}_0 - \mathbf{K} \mathbf{u}_0 \implies \ddot{\mathbf{u}}_0 = \mathbf{M}^{-1} (\mathbf{Q}_0 - \mathbf{C} \dot{\mathbf{u}}_0 - \mathbf{K} \mathbf{u}_0) \quad \text{......(11)}

4.2 反向泰勒展开推导 \mathbf{u}_{-\Delta t}

利用后差分公式 (3) 的截断形式,但在 t=0 处展开至二阶精度以保证启动精度:

\mathbf{u}_{-\Delta t} = \mathbf{u}_0 - \Delta t \dot{\mathbf{u}}_0 + \frac{\Delta t^2}{2} \ddot{\mathbf{u}}_0 + O(\Delta t^3)

忽略高阶项,得到起步公式:

\mathbf{u}_{-\Delta t} = \mathbf{u}_0 - \Delta t \dot{\mathbf{u}}_0 + \frac{\Delta t^2}{2} \ddot{\mathbf{u}}_0 \quad \text{......(12)}

注:P1 中使用积分常数 c_3 = 1/c_2 = \Delta t^2/2 ,故写作 \mathbf{u}_{-\Delta t} = \mathbf{u}_0 - \Delta t \dot{\mathbf{u}}_0 + c_3 \ddot{\mathbf{u}}_0

至此, \mathbf{u}_{-\Delta t} 已求得,算法可以进入 t=0 步,求解 \mathbf{u}_{\Delta t}

5. 稳定性分析 (Stability Analysis)

中心差分法是 条件稳定 (Conditionally Stable) 的。其稳定性取决于时间步长 \Delta t 与系统最高频率的关系。

5.1 单自由度无阻尼系统模型

考虑单自由度无阻尼自由振动方程:

\ddot{u} + \omega^2 u = 0

其中 \omega 为固有圆频率。 将中心差分格式 (5) 代入(此时 \mathbf{C}=0, \mathbf{Q}=0 ):

\frac{u_{t+\Delta t} - 2u_t + u_{t-\Delta t}}{\Delta t^2} + \omega^2 u_t = 0

整理得递推关系:

u_{t+\Delta t} - (2 - \omega^2 \Delta t^2) u_t + u_{t-\Delta t} = 0 \quad \text{......(13)}

5.2 特征方程与谱半径

设解的形式为 u_t = \lambda^t u_0 (或更严谨地,写成状态空间形式 \mathbf{X}_{t+\Delta t} = \mathbf{D} \mathbf{X}_t ,其中 \mathbf{X}_t = [u_t, u_{t-\Delta t}]^T )。 代入式 (13) 得到特征方程:

\lambda^2 - (2 - \omega^2 \Delta t^2) \lambda + 1 = 0 \quad \text{......(14)}

该二次方程的判别式为:

\Delta = (2 - \omega^2 \Delta t^2)^2 - 4

根据 P1 中的稳定性理论,算法稳定的充要条件是递推矩阵 \mathbf{D} 的谱半径 \rho(\mathbf{D}) = \max |\lambda_i| \le 1 。对于重根情况需严格小于 1,对于非重根可等于 1。

情形讨论:

  1. **若 (2 - \omega^2 \Delta t^2)^2 < 4 **: 此时 \Delta < 0 ,特征根为一对共轭复数。 由韦达定理,两根之积 \lambda_1 \lambda_2 = 1 。因为是共轭复数,模长相等,故 |\lambda_1| = |\lambda_2| = 1 。 此时算法稳定,且无数值阻尼(能量守恒)。 条件等价于:

    -2 < 2 - \omega^2 \Delta t^2 < 2

    右不等式 2 - \omega^2 \Delta t^2 < 2 \implies -\omega^2 \Delta t^2 < 0 恒成立。 左不等式 -2 < 2 - \omega^2 \Delta t^2 \implies \omega^2 \Delta t^2 < 4 \implies \omega \Delta t < 2

  2. (2 - \omega^2 \Delta t^2)^2 \ge 4 **: 此时 \Delta \ge 0 ,特征根为实数。 由于两根之积为 1,必有一个根的模 |\lambda| \ge 1 。若 \Delta > 0 ,则必有一根 |\lambda| > 1 ,导致解随时间指数增长,算法 **不稳定

5.3 临界时间步长

综上所述,稳定性条件为:

\omega \Delta t \le 2

即:

\Delta t \le \frac{2}{\omega} = \frac{2}{2\pi/T} = \frac{T}{\pi} \quad \text{......(15)}

其中 T 为系统周期。

对于多自由度系统,稳定性由 最高频率 \omega_{\max} (或最小周期 T_{\min} )控制:

\Delta t \le \Delta t_{cr} = \frac{2}{\omega_{\max}} = \frac{T_{\min}}{\pi} \quad \text{......(16)}

结论:中心差分法没有数值阻尼(在稳定区内谱半径恒为 1),且时间步长必须小于临界步长 \Delta t_{cr} 。如果网格划分导致某些单元极小, \omega_{\max} 会极大,从而迫使 \Delta t 极小,显著增加计算成本。

6. 常用变异格式 (Variants)

P1 中还提到了几种基于中心差分思想的变体,主要用于不同场景(如分子动力学):

6.1 Verlet 格式

直接利用位移展开式相加的结果:

\mathbf{u}_{t+\Delta t} = 2\mathbf{u}_t - \mathbf{u}_{t-\Delta t} + \ddot{\mathbf{u}}_t \Delta t^2

6.2 蛙跳格式 (Leapfrog)

速度与位移在时间轴上交错半步:

\begin{aligned} \mathbf{v}_{t+\frac{1}{2}\Delta t} &= \mathbf{v}_{t-\frac{1}{2}\Delta t} + \ddot{\mathbf{u}}_t \Delta t \\ \mathbf{u}_{t+\Delta t} &= \mathbf{u}_t + \mathbf{v}_{t+\frac{1}{2}\Delta t} \Delta t \end{aligned}

6.3 速度 Verlet 格式 (Velocity Verlet)

结合了 Leapfrog 的优点,能在同一时刻获得位移、速度和加速度,步骤如下:

1: \mathbf{v}_{t+\frac{1}{2}\Delta t} = \mathbf{v}_t + \frac{1}{2} \ddot{\mathbf{u}}_t \Delta t ,

2: \mathbf{u}_{t+\Delta t} = \mathbf{u}_t + \mathbf{v}_{t+\frac{1}{2}\Delta t} \Delta t ,

3: 计算新加速度 \ddot{\mathbf{u}}_{t+\Delta t} = \mathbf{M}^{-1}(\mathbf{Q}_{t+\Delta t} - \mathbf{K}\mathbf{u}_{t+\Delta t}) ,

4: \mathbf{v}_{t+\Delta t} = \mathbf{v}_{t+\frac{1}{2}\Delta t} + \frac{1}{2} \ddot{\mathbf{u}}_{t+\Delta t} \Delta t ,

此格式广泛应用于 LS-DYNA 等显式有限元软件及分子动力学模拟。该方法是解决短时、高频、强非线性(如冲击、碰撞)动力学问题的首选数值工具。

返回 主页