一阶后向欧拉法(BDF1)
基于一阶后向欧拉法(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+1≈dtun+1−un=vn+1 - 加速度与速度的关系:
v˙n+1≈vn+1−vndt\dot{v}_{n+1} \approx \frac{v_{n+1} - v_n}{dt}v˙n+1≈dtvn+1−vn
将其代入动力学方程组,在 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+1−un−vn+1=0dtM(vn+1−vn)+K(un+1)un+1−Fn+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+1k−un−vn+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+1k−vn)+K(un+1k)un+1k−Fn+1
(当残差范数 ∥Ru∥→0\|R_u\| \to 0∥Ru∥→0 且 ∥Rv∥→0\|R_v\| \to 0∥Rv∥→0 时,方程收敛)
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+∂u∂RuΔu+∂v∂RuΔv=0Rv+∂u∂RvΔu+∂v∂RvΔv=0
计算 Jacobian 偏导数矩阵:
- 对 RuR_uRu 求导:
∂Ru∂u=1dt,∂Ru∂v=−I\frac{\partial R_u}{\partial u} = \frac{1}{dt}, \quad \frac{\partial R_u}{\partial v} = -I∂u∂Ru=dt1,∂v∂Ru=−I - 对 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})∂u∂Rv=∂u∂(K(u)u)=K(un+1k)+∂u∂Kun+1k≜KT(切线刚度矩阵 Tangent Stiffness)
∂Rv∂v=Mdt\frac{\partial R_v}{\partial v} = \frac{M}{dt}∂v∂Rv=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=−Rv−dtMRu
核心符号定义:
- 等效切线刚度矩阵:
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^=−Rv−dtMRu
6. 状态更新与算法流程
算法步骤总结:
- 求解增量:
Δu=K^−1R^\Delta u = \hat{K}^{-1} \hat{R}Δu=K^−1R^ - 更新位移:
un+1k+1=un+1k+Δuu_{n+1}^{k+1} = u_{n+1}^k + \Delta uun+1k+1=un+1k+Δu - 更新速度:
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 - 收敛判断:
检查 ∥R^∥≤tol\|\hat{R}\| \le \text{tol}∥R^∥≤tol 或 ∥Δu∥≤tol\|\Delta u\| \le \text{tol}∥Δu∥≤tol。若未达到收敛准则,令 k=k+1k = k + 1k=k+1 重复上述步骤;若收敛,则进入下一个时间步 tn+2t_{n+2}tn+2。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)