第二章 数学基础:变分法入门与庞特里亚金极小值原理
各位同学,欢迎来到第二章。说实话,这一章可能是整个课程里最「劝退」的一章。但我得说句实在话——你绕不开它。我在做轨迹优化项目的前三年,一直试图用各种数值方法「绕过」这些数学基础,结果每次都被现实狠狠教育了一顿。
变分法和庞特里亚金极小值原理(PMP),说白了就是最优控制的两大支柱。一个告诉你「怎么找极值」,一个告诉你「怎么找最优控制」。今天咱们就把这两块硬骨头啃下来。
2.1 变分法:从泛函到极值
先问个问题:普通函数求极值,你会怎么做?求导,令导数为零,对吧?
那如果我要找的不是一个点,而是一条曲线呢?比如——从A点到B点,哪条路径用时最短?这就是泛函的极值问题。
泛函,说白了就是「函数的函数」。你输入一个函数,它输出一个数。比如飞行器的总油耗,就是一条轨迹的泛函。
核心思想:变分法就是泛函版本的「求导等于零」。
2.1.1 欧拉-拉格朗日方程
假设我们有一个泛函:
J[y] = ∫ L(x, y, y') dx
其中L是拉格朗日量,y'是y对x的导数。那么极值条件就是:
∂L/∂y - d/dx(∂L/∂y') = 0
这就是欧拉-拉格朗日方程。嗯,看起来简单,但用起来门道很多。
我的经验:我第一次用这个方程是在做滑翔机的最优轨迹。当时我算出来的结果和直觉完全相反——最省油的路径不是直线,而是一条弧线。后来验证发现,变分法给出的结果是对的。从那以后,我再也不敢凭直觉判断轨迹了。
2.1.2 横截条件
如果端点不是固定的呢?比如终点可以在一条曲线上移动。这时候就需要横截条件。
| 端点类型 | 条件 |
|---|---|
| 固定端点 | y(x₀)=y₀, y(x₁)=y₁ |
| 自由端点 | ∂L/∂y' = 0 在端点处 |
| 可变端点(曲线约束) | L + (φ' - y')·∂L/∂y' = 0 |
你想想看,实际飞行中,终点往往不是固定的——可能是某个高度范围,或者某个速度区间。这时候横截条件就派上用场了。
2.2 庞特里亚金极小值原理:最优控制的灵魂
变分法有个局限——它要求控制量连续可微。但实际工程中,控制量经常是 bang-bang 控制(开关控制),或者有约束的。这时候,PMP 就登场了。
PMP 的核心思想:最优控制一定使得哈密顿函数取极小值(或极大值,取决于定义)。
2.2.1 标准问题形式
考虑一个标准的最优控制问题:
min J = φ(x(t_f)) + ∫ L(x, u, t) dt
s.t. ẋ = f(x, u, t)
u ∈ U
x(0) = x₀
定义哈密顿函数:
H(x, u, λ, t) = L(x, u, t) + λᵀ f(x, u, t)
其中 λ 是协态变量(也叫伴随变量)。
2.2.2 PMP 的必要条件
- 状态方程: ẋ = ∂H/∂λ = f(x, u, t)
- 协态方程: λ̇ = -∂H/∂x
- 最优性条件: u* = arg min H(x, u, λ, t) 对所有 u ∈ U
- 横截条件: λ(t_f) = ∂φ/∂x(t_f)
注意:PMP 给出的是必要条件,不是充分条件。也就是说,满足 PMP 的不一定是最优解,但最优解一定满足 PMP。我曾经在这个坑里摔过——算出一个满足 PMP 的解,结果发现是局部最优,不是全局最优。
2.2.3 一个简单的例子:最小时间控制
假设我们要控制一个质点从静止到指定位置,时间最短。控制量是加速度,有上下界。
状态:x₁ = 位置, x₂ = 速度
控制:u = 加速度, |u| ≤ 1
目标:min t_f
哈密顿函数:
H = 1 + λ₁ x₂ + λ₂ u
最优性条件:
u* = -sign(λ₂)
协态方程:
λ̇₁ = 0
λ̇₂ = -λ₁
你看,最优控制就是 bang-bang 控制——要么全加速,要么全减速。这就是 PMP 的威力,它直接告诉你控制的结构。
避坑指南:我曾经在写代码时,直接用数值优化去解这个最小时间问题,结果收敛很慢。后来改用 PMP 先分析控制结构,再数值求解切换时间,速度提升了10倍。所以我的建议是——先用 PMP 做定性分析,再用数值方法做定量计算。
2.3 变分法与 PMP 的关系
其实,PMP 可以看作是变分法在最优控制中的推广。变分法处理的是无约束或等式约束的泛函极值,而 PMP 处理的是有不等式约束(控制约束)的问题。
我个人的理解是这样的:
- 变分法:告诉你「沿着最优轨迹,任何微小扰动都不会让性能指标变好」
- PMP:告诉你「在每一个时刻,控制量都要让哈密顿函数取极小值」
一个是全局视角,一个是局部视角。两者相辅相成。
2.4 知识体系总览
下面这张图是我自己整理的变分法与 PMP 的知识结构,希望能帮你理清思路:
2.5 学习建议
说实话,这一章的内容确实抽象。我当年学的时候也花了很长时间才真正「悟」透。给你几个建议:
- 先理解思想,再抠细节。别一上来就盯着欧拉-拉格朗日方程的推导不放。先搞清楚「变分法在干什么」。
- 动手算一个小例子。比如上面那个最小时间控制,手算一遍,比看十遍书都管用。
- 别怕协态变量。很多人一看到 λ 就头大。其实它就是「影子价格」——告诉你状态变化对性能指标的影响有多大。
我的小技巧:每次做轨迹优化之前,我都会先手写一遍 PMP 的必要条件。哪怕最后用数值方法求解,这一步也能帮我避免很多低级错误。嗯,这习惯保持了十年了。
好了,这一章就到这里。变分法和 PMP 是轨迹优化的「内功心法」,练好了,后面的数值方法才能用得顺手。下一章我们开始讲数值优化方法——那才是真正干活用的工具。
公众号:蓝海资料掘金营,微信deep3321