深入浅出变分法:从离散扰动一步步推导欧拉-拉格朗日方程
文章目录
深入浅出变分法:从离散扰动一步步推导欧拉-拉格朗日方程
在最优控制和变分法中,欧拉-拉格朗日方程(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 J≈k=0∑N−1g(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˙k−1≈Δtxk−xk−1,x˙k≈Δtxk+1−xk
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} xk−1,xk+1 等)都保持不变。 这个扰动的结果必须是 J J J 的驻点,即:
∂ J ∂ x k = 0 \frac{\partial J}{\partial x_k} = 0 ∂xk∂J=0
关键点来了: 为什么书中说“对 x k x_k xk 施加很小的扰动,只会引起相邻的两个区间 [ t k − 1 , t k ] [t_{k-1}, t_k] [tk−1,tk] 和 [ t k , t k + 1 ] [t_k, t_{k+1}] [tk,tk+1] 上的性能指标扰动”?
因为 x k x_k xk 只在第 k − 1 k-1 k−1 项(作为 x ˙ k − 1 \dot{x}_{k-1} x˙k−1 分子的一部分)和第 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(xk−1,x˙k−1,tk−1)Δt+g(xk,x˙k,tk)Δt]=0
3. 详细推导过程(核心步骤)
第一步:对第 k − 1 k-1 k−1 项求导
x k − 1 x_{k-1} xk−1 和 t k − 1 t_{k-1} tk−1 都是常数。只有 x ˙ k − 1 \dot{x}_{k-1} x˙k−1 里面藏着 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˙k−1=Δtxk−xk−1,所以 ∂ x ˙ k − 1 ∂ x k = 1 Δ t \frac{\partial \dot{x}_{k-1}}{\partial x_k} = \frac{1}{\Delta t} ∂xk∂x˙k−1=Δ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˙∂g⋅∂xk∂x˙k−1⋅Δt=∂x˙∂g⋅Δt1⋅Δt=∂x˙∂g
tk−1
(注意:最后的 Δ 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 出现了两次:
- 直接路径:作为显式的 x k x_k xk。它对自己求导是 1。
- 间接路径:藏在 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+1−xk,注意这里分子是 − x k -x_k −xk!所以 ∂ x ˙ k ∂ x k = − 1 Δ t \frac{\partial \dot{x}_k}{\partial x_k} = -\frac{1}{\Delta t} ∂xk∂x˙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 ∂x∂g⋅1⋅Δt=∂x∂g 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} ∂x∂g
tkΔt−∂x˙∂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
tk−1+∂x∂g
tkΔt−∂x˙∂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}} ∂x∂g
tkΔt=∂x˙∂g
tk−∂x˙∂g
tk−1
第四步:取极限(连续化)
两边同时除以 Δ 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} ∂x∂g
tk=Δt∂x˙∂g
tk−∂x˙∂g
tk−1
仔细观察右边,这就是函数 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 Δt→0(即 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) Δt→0limΔth(tk)−h(tk−1)=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 ∂x∂g−dtd(∂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} ∂x∂g 时,是把 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 竟然神奇地完美抵消了,使得差商形式自然而然地过渡到了微分形式。
这种在局部施加扰动,利用“各项之间互不干扰”的性质进行“剥离”的技巧,正是变分法的精髓。希望这个详细的分步推导,能帮你真正扫清符号和链式法则的迷雾!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)