基于一阶后向欧拉法(BDF1)求解非线性动力学系统的牛顿迭代推导

在结构动力学和有限元分析中,求解二阶非线性常微分方程是常见需求。本文将详细推导利用 一阶后向欧拉法(BDF1/Backward Euler) 配合 直接牛顿-拉夫逊(Newton-Raphson)迭代法 求解该类动力学系统的完整公式推导过程。


1. 动力学控制方程与状态降阶

考虑一般的二阶非线性动力学平衡方程:
Mu¨+K(u)u=FM \ddot{u} + K(u)u = FMu¨+K(u)u=F

其中:

  • MMM 为质量矩阵;
  • K(u)K(u)K(u) 为依赖于位移的非线性刚度矩阵;
  • u,u˙,u¨u, \dot{u}, \ddot{u}u,u˙,u¨ 分别为位移、速度与加速度向量;
  • FFF 为外载荷向量。

为了使用一阶隐式积分算法(后向欧拉),引入速度变量 v=u˙v = \dot{u}v=u˙,将二阶系统降阶为一阶耦合微分方程组:
{u˙=vMv˙+K(u)u=F\begin{cases} \dot{u} = v \\ M \dot{v} + K(u)u = F \end{cases}{u˙=vMv˙+K(u)u=F


2. 时间离散化(后向欧拉法 BDF1)

设时间步长为 Δt\Delta tΔt(简记为 dtdtdt),在离散时刻 tn+1t_{n+1}tn+1,采用一阶后向差分近似时间导数:

  • 速度与位移的关系:
    u˙n+1≈un+1−undt=vn+1\dot{u}_{n+1} \approx \frac{u_{n+1} - u_n}{dt} = v_{n+1}u˙n+1dtun+1un=vn+1
  • 加速度与速度的关系:
    v˙n+1≈vn+1−vndt\dot{v}_{n+1} \approx \frac{v_{n+1} - v_n}{dt}v˙n+1dtvn+1vn

将其代入动力学方程组,在 tn+1t_{n+1}tn+1 时刻的理想平衡状态应满足:
{un+1−undt−vn+1=0Mdt(vn+1−vn)+K(un+1)un+1−Fn+1=0\begin{cases} \dfrac{u_{n+1} - u_n}{dt} - v_{n+1} = 0 \\ \dfrac{M}{dt}(v_{n+1} - v_n) + K(u_{n+1})u_{n+1} - F_{n+1} = 0 \end{cases}dtun+1unvn+1=0dtM(vn+1vn)+K(un+1)un+1Fn+1=0


3. 构造残差方程(Residuals)

在非线性求解过程中,第 kkk 次牛顿迭代给出的状态估计值记为 (un+1k,vn+1k)(u_{n+1}^k, v_{n+1}^k)(un+1k,vn+1k)。此时系统尚未完全平衡,定义如下残差向量

3.1 运动学位移残差

Ru=un+1k−undt−vn+1kR_u = \frac{u_{n+1}^k - u_n}{dt} - v_{n+1}^kRu=dtun+1kunvn+1k

3.2 动力学平衡残差

Rv=Mdt(vn+1k−vn)+K(un+1k)un+1k−Fn+1R_v = \frac{M}{dt}(v_{n+1}^k - v_n) + K(u_{n+1}^k)u_{n+1}^k - F_{n+1}Rv=dtM(vn+1kvn)+K(un+1k)un+1kFn+1

(当残差范数 ∥Ru∥→0\|R_u\| \to 0Ru0∥Rv∥→0\|R_v\| \to 0Rv0 时,方程收敛)


4. 多元牛顿法一阶泰勒展开(线性化)

寻求增量步 Δu\Delta uΔuΔv\Delta vΔv,令更新后的残差近似为零:
{Ru+∂Ru∂uΔu+∂Ru∂vΔv=0Rv+∂Rv∂uΔu+∂Rv∂vΔv=0\begin{cases} R_u + \dfrac{\partial R_u}{\partial u}\Delta u + \dfrac{\partial R_u}{\partial v}\Delta v = 0 \\ R_v + \dfrac{\partial R_v}{\partial u}\Delta u + \dfrac{\partial R_v}{\partial v}\Delta v = 0 \end{cases}Ru+uRuΔu+vRuΔv=0Rv+uRvΔu+vRvΔv=0

计算 Jacobian 偏导数矩阵:

  1. RuR_uRu 求导:
    ∂Ru∂u=1dt,∂Ru∂v=−I\frac{\partial R_u}{\partial u} = \frac{1}{dt}, \quad \frac{\partial R_u}{\partial v} = -IuRu=dt1,vRu=I
  2. RvR_vRv 求导:
    ∂Rv∂u=∂(K(u)u)∂u=K(un+1k)+∂K∂uun+1k≜KT(切线刚度矩阵 Tangent Stiffness)\frac{\partial R_v}{\partial u} = \frac{\partial \big(K(u)u\big)}{\partial u} = K(u_{n+1}^k) + \frac{\partial K}{\partial u}u_{n+1}^k \triangleq K_T \quad (\text{切线刚度矩阵 Tangent Stiffness})uRv=u(K(u)u)=K(un+1k)+uKun+1kKT(切线刚度矩阵 Tangent Stiffness)
    ∂Rv∂v=Mdt\frac{\partial R_v}{\partial v} = \frac{M}{dt}vRv=dtM

代入得到线性方程组:
{1dtΔu−Δv=−Ru⋯(1)KTΔu+MdtΔv=−Rv⋯(2)\begin{cases} \dfrac{1}{dt}\Delta u - \Delta v = -R_u & \quad \cdots (1) \\ K_T \Delta u + \dfrac{M}{dt}\Delta v = -R_v & \quad \cdots (2) \end{cases}dt1ΔuΔv=RuKTΔu+dtMΔv=Rv(1)(2)


5. 变量消元与核心方程推导

由方程 (1)(1)(1) 可将速度增量 Δv\Delta vΔv 显式表达为位移增量 Δu\Delta uΔu 的形式:
Δv=Δudt+Ru⋯(3)\Delta v = \frac{\Delta u}{dt} + R_u \quad \cdots (3)Δv=dtΔu+Ru(3)

将方程 (3)(3)(3) 代入方程 (2)(2)(2) 中:
KTΔu+Mdt(Δudt+Ru)=−RvK_T \Delta u + \frac{M}{dt} \left( \frac{\Delta u}{dt} + R_u \right) = -R_vKTΔu+dtM(dtΔu+Ru)=Rv

展开整理:
KTΔu+Mdt2Δu+MdtRu=−RvK_T \Delta u + \frac{M}{dt^2}\Delta u + \frac{M}{dt}R_u = -R_vKTΔu+dt2MΔu+dtMRu=Rv

合并同类项,得到核心求解方程
(KT+Mdt2)Δu=−Rv−MdtRu\left( K_T + \frac{M}{dt^2} \right)\Delta u = -R_v - \frac{M}{dt}R_u(KT+dt2M)Δu=RvdtMRu

核心符号定义:

  • 等效切线刚度矩阵
    K^=KT+Mdt2\hat{K} = K_T + \frac{M}{dt^2}K^=KT+dt2M
  • 等效右端残差项
    R^=−Rv−MdtRu\hat{R} = -R_v - \frac{M}{dt}R_uR^=RvdtMRu

6. 状态更新与算法流程

算法步骤总结:

  1. 求解增量
    Δu=K^−1R^\Delta u = \hat{K}^{-1} \hat{R}Δu=K^1R^
  2. 更新位移
    un+1k+1=un+1k+Δuu_{n+1}^{k+1} = u_{n+1}^k + \Delta uun+1k+1=un+1k+Δu
  3. 更新速度
    vn+1k+1=vn+1k+Δudt+Ruv_{n+1}^{k+1} = v_{n+1}^k + \frac{\Delta u}{dt} + R_uvn+1k+1=vn+1k+dtΔu+Ru
  4. 收敛判断
    检查 ∥R^∥≤tol\|\hat{R}\| \le \text{tol}R^tol∥Δu∥≤tol\|\Delta u\| \le \text{tol}∥Δutol。若未达到收敛准则,令 k=k+1k = k + 1k=k+1 重复上述步骤;若收敛,则进入下一个时间步 tn+2t_{n+2}tn+2
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐