3. 线性二次型调节器:LQR问题描述、Riccati方程推导、稳态解与瞬态解

好,咱们进入LQR。说实话,在最优制导律里,LQR是最经典、最成熟、也是我最早接触的一类方法。我记得刚入行那会儿,带我的老工程师就说:“先把LQR吃透,后面什么变分法、极小值原理,你都能触类旁通。” 嗯,这话我现在也常跟新人讲。

LQR的全称是Linear Quadratic Regulator,线性二次型调节器。说白了,就是系统是线性的,性能指标是二次型的,我们要找一个控制律,让这个二次型指标最小。为什么用二次型?因为数学上漂亮,能解析求解,而且工程上也好用——你想想看,误差的平方和,不就是我们最常优化的东西吗?

3.1 LQR问题描述

先给个标准的问题框架。假设我们有一个线性时变系统:

dx/dt = A(t)·x + B(t)·u
x(t0) = x0

其中x是n维状态向量,u是m维控制向量。我们要找一个控制律u(t),使得下面的性能指标最小:

J = ½·xᵀ(tf)·S·x(tf) + ½·∫[xᵀ·Q·x + uᵀ·R·u]dt

这里有几个关键矩阵:

  • S:终端代价权重,半正定对称矩阵
  • Q:状态代价权重,半正定对称矩阵
  • R:控制代价权重,正定对称矩阵

我在项目中遇到过一个问题:有人把R设成零矩阵,结果控制量疯狂震荡,系统根本稳不住。为什么?因为R正定是保证控制有界的关键。你想想看,如果控制不要钱,那最优解就是瞬间把状态拉到零——但物理上做不到啊。

核心要点:LQR的本质是在“状态偏差”和“控制能量”之间做权衡。Q越大,我们越在意状态精度;R越大,我们越在意控制平缓。

3.2 Riccati方程推导

好,问题摆在这了,怎么解?这里要用到极小值原理。我直接说结论:最优控制可以写成状态反馈的形式:

u*(t) = -R⁻¹·Bᵀ·P(t)·x(t)

其中P(t)是n×n的对称半正定矩阵,它满足下面的Riccati微分方程:

-dP/dt = Aᵀ·P + P·A + Q - P·B·R⁻¹·Bᵀ·P
P(tf) = S

这个方程怎么来的?我简单说下思路:

  1. 构造Hamiltonian函数:H = ½(xᵀQx + uᵀRu) + λᵀ(Ax + Bu)
  2. 由最优性条件∂H/∂u = 0,得到u = -R⁻¹Bᵀλ
  3. 假设λ = P·x,代入协态方程,就能推出Riccati方程

嗯,这里要注意:P(t)是时变的,要从终端时刻tf反向积分到初始时刻t0。我记得第一次手算这个方程时,被那个负号搞晕了好几次——dP/dt前面有个负号,意味着P是从后往前算的。

个人经验:实际工程中,我一般用数值方法求解Riccati方程。MATLAB的care()函数或者Python的scipy.linalg.solve_continuous_are()都很好用。但理解解析形式很重要,它能帮你判断解的稳定性。

3.3 稳态解与瞬态解

Riccati方程的解P(t)有两种情况:

3.3.1 瞬态解(时变解)

当终端时间tf有限时,P(t)是时变的。从tf时刻的边界条件S开始,反向积分到t0。这个解的特点是:

  • 靠近终端时,P(t)趋近于S
  • 远离终端时,P(t)逐渐变化
  • 控制增益K(t) = R⁻¹BᵀP(t)也是时变的

我在做导弹末制导时,经常用瞬态解。因为终端时间就是拦截时刻,S矩阵代表对脱靶量的惩罚,这个必须精确控制。

3.3.2 稳态解(定常解)

当tf → ∞时,如果系统是可控且可观的,P(t)会收敛到一个常数矩阵P∞。此时Riccati微分方程退化为代数方程:

Aᵀ·P∞ + P∞·A + Q - P∞·B·R⁻¹·Bᵀ·P∞ = 0

这就是著名的代数Riccati方程(ARE)。稳态解的好处是:

  • 控制增益是常数,实现简单
  • 闭环系统是渐近稳定的
  • 计算量小,适合在线应用

避坑指南:我曾经在一个项目中直接用了稳态解,结果发现系统在初始阶段震荡得很厉害。后来才意识到,稳态解只保证无限时间最优,但初始瞬态过程可能很差。如果对瞬态响应有要求,建议用瞬态解或者加个预补偿。

3.4 知识体系图

下面这张图总结了LQR的核心逻辑,我画了好几个版本才满意:

LQR核心知识体系 问题描述 线性系统 + 二次型指标 dx/dt = Ax + Bu J = ½∫(xᵀQx + uᵀRu)dt Riccati方程 -dP/dt = AᵀP + PA + Q - PBR⁻¹BᵀP P(tf) = S 解的分类 瞬态解(时变) 稳态解(定常) 最优控制律 u* = -R⁻¹BᵀP(t)·x 状态反馈形式 求解方法 数值积分(瞬态) ARE求解(稳态) 工程应用 导弹制导 飞行器控制 LQR:线性最优控制的基石

3.5 关键参数选择建议

最后,我根据多年经验,给几个参数选择的实用建议:

参数 增大效果 减小效果 工程建议
Q 状态收敛更快,但控制量更大 状态收敛慢,控制平缓 先设为单位阵,再按需调整对角线元素
R 控制量小,系统响应慢 控制量大,可能饱和 根据执行机构能力设定,避免控制饱和
S 终端状态精度高 终端状态偏差大 制导问题中设大值,如S = 100·I

小技巧:我习惯用Bryson规则做初始参数选择:Qii = 1/(x_max_i)²,Rjj = 1/(u_max_j)²。这样能保证各状态和控制量在量级上可比,避免数值问题。

好了,LQR的核心内容就这些。从问题描述到Riccati方程,再到稳态和瞬态解,每一步都有它的物理意义和工程考量。你想想看,一个看似简单的状态反馈,背后其实藏着这么深的数学——这就是最优控制的魅力所在。


公众号:蓝海资料掘金营,微信deep3321