深入浅出变分法:从离散扰动一步步推导欧拉-拉格朗日方程

在最优控制和变分法中,欧拉-拉格朗日方程(Euler-Lagrange Equation) 是核心中的核心。它的物理意义(如最小作用量原理)往往让人感叹数学的优美,但其推导过程,尤其是从离散化取极限的中间步骤,却常常让初学者卡壳(特别是面对一堆带下标和不带下标的 g g g 时)。

今天我们就来手把手拆解这个推导过程,彻底搞懂它是怎么来的。

1. 将连续问题离散化

我们的目标是寻找一个函数 x ( t ) x(t) x(t),使得性能指标(泛函) J ( x ) J(x) J(x) 最小:

J ( x ) = ∫ t 0 t f g ( x ( t ) , x ˙ ( t ) , t ) d t J(x) = \int_{t_0}^{t_f} g(x(t), \dot{x}(t), t) dt J(x)=t0tfg(x(t),x˙(t),t)dt

由于计算机和微积分原理的限制,我们很难直接处理连续积分。Euler 的巧妙想法是:将时间划分成 N N N 个等间距的小区间,步长为 Δ t \Delta t Δt。用折线来近似曲线 x ( t ) x(t) x(t)

此时,积分变成了黎曼和:
J ≈ ∑ k = 0 N − 1 g ( x k , x ˙ k , t k ) Δ t J \approx \sum_{k=0}^{N-1} g(x_k, \dot{x}_k, t_k) \Delta t Jk=0N1g(xk,x˙k,tk)Δt
其中导数 x ˙ \dot{x} x˙ 用一阶向前差分近似:
x ˙ k − 1 ≈ x k − x k − 1 Δ t , x ˙ k ≈ x k + 1 − x k Δ t \dot{x}_{k-1} \approx \frac{x_k - x_{k-1}}{\Delta t}, \quad \dot{x}_k \approx \frac{x_{k+1} - x_k}{\Delta t} x˙k1Δtxkxk1,x˙kΔtxk+1xk

2. 驻点条件:施加“扰动”

要让 J J J 达到极小值,就像求普通函数极值一样,我们需要对所有变量求导并令其为 0。

变分的核心思想是“扰动”:假设在某一时刻 t k t_k tk,我们只让状态变量 x k x_k xk 发生一个微小变化(扰动),而其他所有点( x k − 1 , x k + 1 x_{k-1}, x_{k+1} xk1,xk+1 等)都保持不变。 这个扰动的结果必须是 J J J 的驻点,即:
∂ J ∂ x k = 0 \frac{\partial J}{\partial x_k} = 0 xkJ=0

关键点来了: 为什么书中说“对 x k x_k xk 施加很小的扰动,只会引起相邻的两个区间 [ t k − 1 , t k ] [t_{k-1}, t_k] [tk1,tk] [ t k , t k + 1 ] [t_k, t_{k+1}] [tk,tk+1] 上的性能指标扰动”?
因为 x k x_k xk 只在 k − 1 k-1 k1(作为 x ˙ k − 1 \dot{x}_{k-1} x˙k1 分子的一部分)和 k k k(作为显式 x k x_k xk x ˙ k \dot{x}_k x˙k 分子的一部分)中出现。其他项完全不包含 x k x_k xk,求导后均为 0。

所以我们的任务变成了求:
∂ ∂ x k [ g ( x k − 1 , x ˙ k − 1 , t k − 1 ) Δ t + g ( x k , x ˙ k , t k ) Δ t ] = 0 \frac{\partial}{\partial x_k} \left[ g(x_{k-1}, \dot{x}_{k-1}, t_{k-1})\Delta t + g(x_k, \dot{x}_k, t_k)\Delta t \right] = 0 xk[g(xk1,x˙k1,tk1)Δt+g(xk,x˙k,tk)Δt]=0

3. 详细推导过程(核心步骤)

第一步:对第 k − 1 k-1 k1 项求导

x k − 1 x_{k-1} xk1 t k − 1 t_{k-1} tk1 都是常数。只有 x ˙ k − 1 \dot{x}_{k-1} x˙k1 里面藏着 x k x_k xk
因为 x ˙ k − 1 = x k − x k − 1 Δ t \dot{x}_{k-1} = \frac{x_k - x_{k-1}}{\Delta t} x˙k1=Δtxkxk1,所以 ∂ x ˙ k − 1 ∂ x k = 1 Δ t \frac{\partial \dot{x}_{k-1}}{\partial x_k} = \frac{1}{\Delta t} xkx˙k1=Δt1

这里用到了链式法则(全导数),由于 x x x t t t 的路径求导均为 0,只剩下 x ˙ \dot{x} x˙ 这条路:
∂ g ∂ x ˙ ⋅ ∂ x ˙ k − 1 ∂ x k ⋅ Δ t = ∂ g ∂ x ˙ ⋅ 1 Δ t ⋅ Δ t = ∂ g ∂ x ˙ ∣ t k − 1 \frac{\partial g}{\partial \dot{x}} \cdot \frac{\partial \dot{x}_{k-1}}{\partial x_k} \cdot \Delta t = \frac{\partial g}{\partial \dot{x}} \cdot \frac{1}{\Delta t} \cdot \Delta t = \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_{k-1}} x˙gxkx˙k1Δt=x˙gΔt1Δt=x˙g tk1
(注意:最后的 Δ t \Delta t Δt 抵消了!)

第二步:对第 k k k 项求导

这里是难点。在 g ( x k , x ˙ k , t k ) g(x_k, \dot{x}_k, t_k) g(xk,x˙k,tk) 中, x k x_k xk 出现了两次

  1. 直接路径:作为显式的 x k x_k xk。它对自己求导是 1。
  2. 间接路径:藏在 x ˙ k \dot{x}_k x˙k 里。因为 x ˙ k = x k + 1 − x k Δ t \dot{x}_k = \frac{x_{k+1} - x_k}{\Delta t} x˙k=Δtxk+1xk,注意这里分子是 − x k -x_k xk!所以 ∂ x ˙ k ∂ x k = − 1 Δ t \frac{\partial \dot{x}_k}{\partial x_k} = -\frac{1}{\Delta t} xkx˙k=Δt1

用链式法则相加:

  • 直接路径贡献 ∂ g ∂ x ⋅ 1 ⋅ Δ t = ∂ g ∂ x ∣ t k Δ t \frac{\partial g}{\partial x} \cdot 1 \cdot \Delta t = \left. \frac{\partial g}{\partial x} \right|_{t_k} \Delta t xg1Δt=xg tkΔt
  • 间接路径贡献 ∂ g ∂ x ˙ ⋅ ( − 1 Δ t ) ⋅ Δ t = − ∂ g ∂ x ˙ ∣ t k \frac{\partial g}{\partial \dot{x}} \cdot \left( -\frac{1}{\Delta t} \right) \cdot \Delta t = -\left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} x˙g(Δt1)Δt=x˙g tk

将两项相加,得到第 k k k 项的导数为:
∂ g ∂ x ∣ t k Δ t − ∂ g ∂ x ˙ ∣ t k \left. \frac{\partial g}{\partial x} \right|_{t_k} \Delta t - \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} xg tkΔtx˙g tk

第三步:合并并移项

将第一步和第二步的结果加起来,令其为 0:
∂ g ∂ x ˙ ∣ t k − 1 + ∂ g ∂ x ∣ t k Δ t − ∂ g ∂ x ˙ ∣ t k = 0 \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_{k-1}} + \left. \frac{\partial g}{\partial x} \right|_{t_k} \Delta t - \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} = 0 x˙g tk1+xg tkΔtx˙g tk=0
把含有 Δ t \Delta t Δt 的项留在左边:
∂ g ∂ x ∣ t k Δ t = ∂ g ∂ x ˙ ∣ t k − ∂ g ∂ x ˙ ∣ t k − 1 \left. \frac{\partial g}{\partial x} \right|_{t_k} \Delta t = \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} - \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_{k-1}} xg tkΔt=x˙g tkx˙g tk1

第四步:取极限(连续化)

两边同时除以 Δ t \Delta t Δt
∂ g ∂ x ∣ t k = ∂ g ∂ x ˙ ∣ t k − ∂ g ∂ x ˙ ∣ t k − 1 Δ t \left. \frac{\partial g}{\partial x} \right|_{t_k} = \frac{ \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} - \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_{k-1}} }{\Delta t} xg tk=Δtx˙g tkx˙g tk1
仔细观察右边,这就是函数 h ( t ) = ∂ g ∂ x ˙ h(t) = \frac{\partial g}{\partial \dot{x}} h(t)=x˙g t k t_k tk 处的差商定义

Δ t → 0 \Delta t \to 0 Δt0(即 N → ∞ N \to \infty N)时,差商就变成了导数:
lim ⁡ Δ t → 0 h ( t k ) − h ( t k − 1 ) Δ t = d d t ( ∂ g ∂ x ˙ ) \lim_{\Delta t \to 0} \frac{h(t_k) - h(t_{k-1})}{\Delta t} = \frac{d}{dt} \left( \frac{\partial g}{\partial \dot{x}} \right) Δt0limΔth(tk)h(tk1)=dtd(x˙g)

于是,我们终于得到了大名鼎鼎的欧拉-拉格朗日方程
∂ g ∂ x − d d t ( ∂ g ∂ x ˙ ) = 0 \frac{\partial g}{\partial x} - \frac{d}{dt} \left( \frac{\partial g}{\partial \dot{x}} \right) = 0 xgdtd(x˙g)=0

4. 关于“下标”和“不带下标”的深度释疑

很多初学者在这里都会晕:“为什么有的 x x x 带下标 x k x_k xk,有的不带? g g g 到底是谁的函数?”

  • 不带下标的 x , x ˙ , t x, \dot{x}, t x,x˙,t:代表的是通用规则(占位符) g ( x , x ˙ , t ) g(x, \dot{x}, t) g(x,x˙,t) 是一个纯粹的多元函数。当我们写 ∂ g ∂ x \frac{\partial g}{\partial x} xg 时,是把 x x x x ˙ \dot{x} x˙ 看作两个毫不相干的独立变量来求偏导。
  • 带下标的 x k , x ˙ k , t k x_k, \dot{x}_k, t_k xk,x˙k,tk:代表的是具体数值(第 k k k 个时间点的状态)。
  • ∂ g ∂ x ˙ ∣ t k \left. \frac{\partial g}{\partial \dot{x}} \right|_{t_k} x˙g tk 写法:意思是“先按照通用规则对 g g g 的第二个槽位求偏导,算出公式后,再把 x k , x ˙ k , t k x_k, \dot{x}_k, t_k xk,x˙k,tk 代入进去,得到具体的数值结果”。

5. 结语

回顾整个推导,最让人惊叹的地方在于,离散化的项中, Δ t \Delta t Δt 竟然神奇地完美抵消了,使得差商形式自然而然地过渡到了微分形式。

这种在局部施加扰动,利用“各项之间互不干扰”的性质进行“剥离”的技巧,正是变分法的精髓。希望这个详细的分步推导,能帮你真正扫清符号和链式法则的迷雾!

Logo

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

更多推荐