设想你要教一个人开车从 A 点开到 B 点。怎样才能算“开得好”?太快容易失控,太慢浪费生命,猛踩油门费油,频繁刹车让人晕车。你心里其实有一个模糊的“好司机”标准:既不要偏离路线太远,也不要动作太粗暴。LQR(线性二次调节器)就是把这个模糊标准精确成数学,再让它自动算出每一步最优操作的一门学问。它像一位随身驾驶教练:先问清楚你的偏好(怕晕车还是怕费油),然后盯着仪表盘(状态),不断给你发出“油门踩多少、方向盘转多少”的指令。整个过程中,它不需要反复试错,而是用一个方程一次性解出最优策略。这篇文章就带你看懂这位“教练”的整套方法论。

岗位关联

对 AI 从业者来说,LQR 是机器人、无人机、自动驾驶等智能体控制中的核心工具箱。理解它,你就掌握了让 AI 决策从“拍脑袋”升级为“可证明最优”的关键一环。

目录
  1. 可视化演示
  2. 最优控制思想
  3. 状态空间建模
  4. 代价函数设计
  5. Riccati方程
  6. 状态反馈控制
  7. 参数调优策略
  8. 与PID对比
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过交互动画理解LQR如何通过二次型代价函数设计最优控制律,观察Q/R权重对控制效果的影响以及与PID的对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

二次型代价函数 Q 越大越重视状态收敛(快速响应) R 越大越重视控制能量节约 J = Σ(xᵀQx + uᵀRu) 调节 Q/R 滑块观察最优轨迹变化

最优控制思想

想象你请来一位顶级驾驶教练,他先不碰方向盘,而是先问一句:“你觉得怎样才算把这段路开好了?” 如果你的回答是“快点到、别跑偏、别费油”,教练就会把这些模糊愿望整理成一份“评分表”,分数越低代表开得越好。最优控制思想的核心正是:先定义“好”,再去求“最优”。它不像传统思路那样“看看误差大了就纠正”,而是把整个未来都放进一个数学公式里,一次性选出让总损失最小的策略。

在 LQR 里,“评分表”被设计成一个性能指标,把所有时刻的状态偏差与控制消耗加起来。放在自动驾驶语境下,这就等价于教练把“偏离车道多少”和“猛踩油门多少”折算成可比较的数字,然后寻找让总分最低的开车方式。这个“先定标准再求解”的思路,让控制从一门手艺变成了一门可以被严格证明的学问。

LQR 全称“线性二次调节器”:线性指系统模型是线性的,二次指评分表里所有项都是平方形式,调节器指它的任务是让状态回到零点。平方是个高明设计——偏差变成两倍,惩罚就变成四倍,所以系统宁可保持小幅偏差,也不愿出现一次大的失控。

回到驾驶教练的比喻:教练先跟你把“评分表”定好,再放手去找最优驾驶方式。这就是最优控制思想的第一步,后面所有公式都在为“算出这张表对应的最优操作”服务。

min⁡u  J=∫t0tfL(x,u) dt\displaystyle \min_{u} \; J = \int_{t_0}^{t_f} L(x,u)\,dt
这个式子是说:在所有可能的控制策略里,挑一个能让“损失 J”最小的。L(x,u) 是每一瞬间的损失,积分就是全程总损失。
  1. min 最小值符号表示我们在所有候选中寻找最小的那一个,好比教练在所有驾驶方案里挑出总分最低的。
    min⁡u\displaystyle \min_{u}
  2. u 控制变量u 是我们能主动决定的操作,比如油门开度和方向盘角度。
    uu
  3. L(x,u) 瞬间损失把当前状态 x 和当前操作 u 代入,算出一个“此刻有多糟”的分数,偏差大、动作猛都会让分数上升。
    L(x,u)L(x,u)
  4. 积分累积全程把从出发时刻到结束时刻每一瞬间的损失加起来,得到整趟旅程的总分。
    ∫t0tf⋅ dt\displaystyle \int_{t_0}^{t_f} \cdot \, dt

状态空间建模

教练要评价“开得好不好”,首先得知道车现在处于什么状态:跑了多远、速度多快、车头朝向哪。这些能完整描述系统当前情况的数量,叫状态变量。对一辆车,位置和速度就是状态;对一个机器人手臂,每个关节的角度和角速度就是状态。把所有这些状态装进一个列向量 x,系统的“当前时刻快照”就齐了。

接下来要回答“状态会怎么变化”。车的加速度取决于发动机输出的力和路面阻力;机器人的角加速度取决于电机力矩和摩擦。把所有关系整理成一大组一阶微分方程,再用矩阵统一写出来,就是状态方程:

这个式子放诸四海皆准。A 描述系统“自己会怎么演变”,比如小车没有控制时因为摩擦自然减速;B 描述“你踩油门能多大程度影响状态”,比如方向盘一转车头就会偏。LQR 假设 A 和 B 是常数矩阵——即系统是线性时不变的,这正是“线性”二字的来源。

有了状态方程,还需要确认一件事:给定输入 u,是否所有状态都能被影响到?这就引出可控性概念。如果系统里藏着某个“A 碰不到、B 也够不着”的状态,那再好的教练也拿它没办法。工程上通过构造可控性矩阵并检查其秩来判断:只有当矩阵满秩时,LQR 才有资格上场。这一条前置检查,能避免后面 Riccati 方程解不出来的尴尬。

教练看完仪表盘(状态)和油门方向盘(输入)之间的连接关系,心里就有数了:只要系统可控,他就能通过操作把车从任何偏差拉回正道。状态空间建模,正是这份“仪表盘说明书”。

x˙=Ax+Bu\displaystyle \dot{x} = A x + B u
x˙=dxdt\displaystyle \dot{x} = \frac{dx}{dt}
这里的点号表示对时间求导,即“状态变化的速率”。整个状态方程就是在说:状态的变化率,等于系统自身规律与控制作用的叠加。
  1. 状态变量 x列向量,装着系统此刻的全部信息,比如位置和速度。多少个状态,向量就有多少行。
    x=[x1x2⋮xn]\displaystyle x = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}
  2. A 系统矩阵刻画“没有外力时系统自己如何演变”。它像车的惯性,松开油门也会自然滑行。
    AA
  3. B 输入矩阵刻画“控制 u 通过什么途径影响状态”。它像方向盘与车轮间的传动机构。
    BB

代价函数设计

现在教练要落实那张“评分表”了。他问你两个问题:第一,车偏离目标位置,你有多在意?第二,猛踩油门耗能,你有多心疼?第一个问题的答案对应 Q 矩阵,第二个对应 R 矩阵。

Q 矩阵惩罚状态偏差:哪个状态让你揪心,就把 Q 里对应的对角线元素调大。比如倒车入库时你特别怕车头歪,就加大角度偏差的权重。R 矩阵惩罚控制能耗:R 越大,表示你越舍不得踩油门,教练就会尽量采用温柔的小幅操作。两者合起来,构成 LQR 的代价函数:

积分到无穷大,代表我们关心“一生一世”的总损失。只要闭环系统能稳定,这个积分就是有限的。xᵀQx 是状态贡献的损失——偏差越大损失越大;uᵀRu 是能耗贡献的损失——动作越猛损失越大。两者相加,就是教练评分表上的“总分”。

为什么用二次型(平方)而不是一次型?因为平方项天然喜欢“折中”:它让微小偏差几乎不受惩罚,却让巨大偏差付出沉重代价,于是最优解不会走向“零偏差但暴力控制”或“零能耗但放任漂移”两个极端。这正是 LQR 名字里“二次”的深意。数学上还需保证 Q 对称半正定、R 对称正定,评分表才不会出现“越糟分越低”的荒诞情况。

教练把评分表定好了:Q 是你对跑偏的焦虑程度,R 是你对烧钱的心疼程度。这两组数字一摆,最优策略就有了唯一的“性格”。

J=∫0∞(x⊤Qx+u⊤Ru)dt\displaystyle J = \int_{0}^{\infty} \left( x^{\top} Q x + u^{\top} R u \right) dt
Q=Q⊤⪰0,R=R⊤≻0\displaystyle Q = Q^{\top} \succeq 0, \quad R = R^{\top} \succ 0
这里的条件约束了“评分表”的合理性:Q 必须是对称半正定(任何偏差都不会让分数变负),R 必须对称正定(任何控制都要花点代价)。
  1. xᵀQx 状态惩罚项把状态偏差按 Q 加权取平方,Q 里调大的方向就是教练最在意的方向。
    x⊤Qx\displaystyle x^{\top} Q x
  2. uᵀRu 控制惩罚项把控制量按 R 加权取平方,R 大意味着用控制很“贵”。
    u⊤Ru\displaystyle u^{\top} R u
  3. 无穷积分把逗留到永远的总损失加起来,逼迫系统必须稳定下来,否则积分发散。
    ∫0∞⋅ dt\displaystyle \int_{0}^{\infty} \cdot \, dt
  4. 对称半正定/正定Q 和 R 必须满足的性质,保证代价函数有下界且每个控制动作都付出代价。
    Q⪰0,  R≻0\displaystyle Q \succeq 0, \; R \succ 0

Riccati方程

评分表定好了,可教练怎么算出最优策略呢?他需要一张“全局最优操作表”。这里跳出一个关键事实:对线性系统加二次代价,最优策略竟然是“看当前状态,线性地决定操作”,而这张表的核心是一个叫 P 的矩阵。P 不由某个时刻决定,而是满足一个固定的方程——代数 Riccati 方程:

这个方程很像教练的“人生哲学”:无论现在走到哪一步,只要照着它解出 P,未来每一步怎么操作就都定了。它的每一项都有含义:AᵀP + PA 负责“跟随系统演化”,PBR⁻¹BᵀP 负责“最优地利用控制”,Q 代表“你对偏差的底线要求”。四股力量平衡为零,就是“长远最优”的数学化身。

求解方法上,工程实践极少手推,而是用现成数值算法(如 scipy 的 solve_continuous_are、MATLAB 的 lqr 函数)直接算出 P。理论保证是:只要 (A,B) 可控、Q 半正定、R 正定,Riccati 方程就存在唯一对称正定解 P,且由它构造的控制必使闭环系统渐近稳定。这把“调参碰运气”升级成了“解方程保平安”。

在比喻里,Riccati 方程就是教练在入职前完成的一次“全局推演”:只要解出 P,往后无论路况如何变化,他都能瞬间给出最优操作。你不需要看他推演过程,只要信任这个方程。

A⊤P+PA−PBR−1B⊤P+Q=0\displaystyle A^{\top} P + P A - P B R^{-1} B^{\top} P + Q = 0
P=P⊤≻0\displaystyle P = P^{\top} \succ 0
正定性保证了 P 可以当作“代价形状”来用:它不是随便一个解,而是让系统稳定且让代价函数达到最小值的那一个。
  1. AᵀP + PA 演化项描述 P 所代表的“长远代价”随系统自身动力学怎样流动。
    A⊤P+PA\displaystyle A^{\top} P + P A
  2. PBR⁻¹BᵀP 控制项代表最优控制对代价的反馈作用,是 R 和 B 在这里“商量”出的结果。
    PBR−1B⊤P\displaystyle P B R^{-1} B^{\top} P
  3. R⁻¹ 逆矩阵R 越大、控制越贵,这一项就越小,教练就越舍不得用力。
    R−1R^{-1}
  4. Q 底线项状态偏差的固有惩罚,提醒系统“不能放任不管”。
    QQ

状态反馈控制

Riccati 方程解出 P 之后,最优控制律水到渠成。LQR 给出的答案是:每时每刻看一眼当前状态 x,然后按固定比例决定操作 u。这就是状态反馈:

负号的含义是“逆着偏差来”:车往右偏就向左修,速度过快就减速。K 叫反馈增益矩阵,它把“状态读数的每一个分量”映射成“控制指令的每一个分量”。K 就像教练脑子里的操作规则表:看到位置偏差 1 米,给 2 牛的力;看到速度偏差 1 m/s,给 1.5 牛的修正。

把 u = -Kx 代回状态方程,闭环系统变为 ẋ = (A - BK)x。由于 P 是 Riccati 方程的正定解,理论保证 A - BK 的所有特征值都在复平面左半平面——即系统必然稳定。更妙的是,K 不仅保证稳定,还保证你是“按评分表最优地”稳定,这正是 LQR 区别于“怎么稳都行”的朴素调参法的地方。这一特性让工程师敢把安全关键的系统交给它。

回到驾驶教练:他现在稳稳坐在副驾,眼睛盯着仪表盘(x),手脑按照操作表(K)随时给出油门与方向盘指令(u)。你不用再频繁干预,教练自己就把车开回正道——这就是状态反馈的日常。

u=−Kx,K=R−1B⊤P\displaystyle u = -K x, \qquad K = R^{-1} B^{\top} P
u=−R−1B⊤Px\displaystyle u = -R^{-1} B^{\top} P x
这是把 K 的表达式代入后的完整形式:最优控制量完全由 P 与系统参数决定,状态 x 每时每刻的读数直接驱动操作。
  1. u = -Kx 控制律当前操作 = 负的增益矩阵 × 当前状态,这是 LQR 输出的最终驾驶规则。
    u=−Kx\displaystyle u = -K x
  2. K 的构造增益由 R、B、P 三者的乘积决定,R 越大 K 越小,控制越克制。
    K=R−1B⊤P\displaystyle K = R^{-1} B^{\top} P
  3. 闭环矩阵 A - BK状态方程中 A 被“修正”后的新系统矩阵,决定最终动态品质。
    A−BKA - B K

参数调优策略

有人说 LQR 的精髓是“解一个方程”,但真正让它在工程里好用的,是 Q 和 R 这两个旋钮怎么拧。教练的驾驶风格完全由你设定的焦虑程度决定:Q 大 R 小 = 激进派,恨不得瞬间把偏差清零,代价是控制动作猛、能耗大;Q 小 R 大 = 佛系派,动作温柔省力,代价是回正慢、偏差逗留久。

调参的第一步是“定性感知”:先让 Q=I、R=1 跑一遍,观察响应速度和控制量;若觉得回正太慢,就把 Q 放大或把 R 缩小;若觉得油门太猛、系统颤动,就把 R 放大或把 Q 缩小。第二步是“结构优化”:Q 不必所有状态取相同值,比如无人机悬停时对高度偏差的权重可以比水平漂移大,R 也可以对不同执行器区别对待。

一个常用技巧是把 Q 取成对角阵,每个对角元表示“这个状态我有多在乎”,R 同理。调参的边界同样写在理论里:Q 必须半正定、R 必须正定,否则 Riccati 方程可能无解或系统不稳定。实践上还要注意量纲——位置按米、速度按米每秒、控制按牛顿,直接比较数值没有意义,必须结合物理单位衡量。

以演示里的“把车从偏差 4 拉回 0”为例:Q 取 1 时,回正平缓、几乎无超调,但需要较长时间;Q 取 100 时,回正极快,却伴随明显过冲和更大的瞬时控制力。可视化演示中的滑块正是这个道理——Q 从 0.1 拨到 100,你能直观看到“激进-平滑”的连续转变。LQR 调参没有魔法数字,只有“你想付出多少能耗换多少快速性”的权衡。

回到教练的比喻:Q/R 旋钮就是教练的“性格模式选择器”。同一辆车、同一条路,激进模式和佛系模式都能安全到达,只是过程风格截然不同。你的任务,是搞清楚用户要的是“快”还是“省”。

与PID对比

聊到工程现场,总有人问:既然 PID 那么好用,为什么还要学 LQR?想象两种治车方案:老司机靠经验——看到偏差就纠,偏差大就加劲,这对应 PID;而我们的教练按数学全局推演——把整条路的未来算清楚再行动,这对应 LQR。两者各有拥趸,也各有短板。

PID 的核心公式是:

它只盯着“偏差 e”及其积分、导数打转,不需要系统模型,调三个增益就能跑,这是它深入人心的原因。但 PID 是“单回路”思路:一个回路往往只对一个输出负责,遇到多变量强耦合系统(比如四旋翼的六个自由度互相牵扯),要设计十几个 PID 回路互相协调,难度陡增且很难谈最优。

LQR 的强项恰恰在这里:它天然是多变量的,一个 K 矩阵同时协调所有状态;它有明确的性能指标与稳定性证明,调参结果可预测;它还能让代价函数在数学上达到最小,这是“最优性保证”。代价是 LQR 依赖精确的线性模型 A 和 B,模型不准,最优就打了折扣。工程上常见做法是“内外兼修”:用 LQR 做核心镇定与多变量协调,用 PID 处理局部的扰动补偿。两者不是对手,而是搭档。

回到比喻:老司机凭手感开车,胜在熟悉路况、无需读说明书;教练按数学开车,胜在全局最优、多个指标同时照顾。一个成熟的工程团队,往往是老司机与教练同乘——内环用 LQR 把姿态稳住,外环用 PID 把位置纠住。理解了这一点,你才算真正读懂了 LQR 在控制体系里的坐标。

uPID=Kpe+Ki∫0te dτ+Kde˙\displaystyle u_{\text{PID}} = K_p e + K_i \int_{0}^{t} e\,d\tau + K_d \dot{e}
uPID=Kpe+Ki∫0te dτ+Kde˙\displaystyle u_{\text{PID}} = K_p e + K_i \int_{0}^{t} e\,d\tau + K_d \dot{e}
这个式子把三位“老司机”的经验合在一起:比例项管当前偏差,积分项清除历史累积误差,微分项预判偏差趋势。与 LQR 的全局最优相比,PID 更依赖即时误差而非系统模型。
  1. Kp·e 比例项偏差越大纠正力越强,像老司机看到跑偏就立刻打方向。
    Kpe\displaystyle K_p e
  2. Ki∫e·dτ 积分项把过去的偏差攒起来,消除长期存在的静态误差,比如上坡时持续补油。
    Ki∫0te dτ\displaystyle K_i \int_{0}^{t} e\,d\tau
  3. Kd·ė 微分项根据偏差变化趋势提前反应,像老司机预判弯道提前减速。
    Kde˙\displaystyle K_d \dot{e}

AI 应用场景

无人机悬停姿态控制

阶段:智能体动作决策(底层控制环)

解决的问题:四旋翼在空中容易因气流扰动失去姿态平衡。传统 PID 需针对每个通道单独整定,通道间耦合时试错成本极高。LQR 把俯仰、横滚、偏航及角速度统一放进状态向量,一个 K 矩阵同时协调全部姿态通道,在能量最优意义下完成稳定。

具体案例:某物流无人机在阵风环境下执行快递投放,使用 LQR 姿态控制器后,悬停位置漂移从 PID 方案的 ±0.3m 降至 ±0.08m,单次飞行电池消耗下降约 12%。工程师通过调节 Q 中角度与角速度的比值,在“抗风硬朗”与“省电平稳”之间找到了平衡点。

自动驾驶车道保持

阶段:规划决策后的执行控制层

解决的问题:车辆在高速行驶中偏离车道中心,需要横向控制持续修正。LQR 以车辆横向位置、横向速度、航向角等为状态,以方向盘转角为输入,代价函数同时惩罚“偏离车道”与“转向过猛”,让车辆既贴线行驶又避免频繁急打方向。

具体案例:某自动驾驶初创公司在乘用车横向控制中部署 LQR,取代原先基于查表的 PID 方案。在双移线工况测试中,LQR 使最大横向偏差从 0.42m 降到 0.15m,方向盘转角变化率下降 40%,乘坐舒适性显著提升。

倒立摆平衡教学验证

阶段:控制算法验证与参数标定

解决的问题:倒立摆是控制理论的标准试验台,摆杆天然不稳定,模型简单却包含全部 LQR 概念。用 LQR 控制倒立摆,核心是让 Q 中摆杆角度权重远大于小车位置权重——因为“先别倒”永远优先于“别跑远”。

具体案例:高校机器人实验课上,学生搭建一维倒立摆小车,用 Python 求解 Riccati 方程后部署到单片机,摆杆在 1 秒内从倾斜 30° 被拉回竖直并保持,同时小车行程控制在 ±20cm 内。学生通过对比不同 Q/R 组合,直观理解了“快速回正”与“动作幅度”的此消彼长。

Python 演示

python44 行
import numpy as npfrom scipy.linalg import solve_continuous_areimport matplotlib.pyplot as plt  def lqr_design(A, B, Q, R):    P = solve_continuous_are(A, B, Q, R)    K = np.linalg.inv(R) @ (B.T @ P)    return K, P  def simulate(A, B, K, x0, T=5.0, dt=0.01):    t = np.arange(0, T, dt)    n = x0.size    X = np.zeros((t.size, n))    U = np.zeros(t.size)    x = x0.copy()    for i in range(t.size):        u = -K @ x        X[i] = x        U[i] = u[0]        x = x + (A @ x + B @ u) * dt    return t, X, U  def main():    A = np.array([[0.0, 1.0], [0.0, 0.0]])    B = np.array([[0.0], [1.0]])    Q = np.diag([10.0, 1.0])    R = np.array([[1.0]])    K, P = lqr_design(A, B, Q, R)    print("K =", K)    t, X, U = simulate(A, B, K, np.array([2.0, 0.0]))    plt.plot(t, X[:, 0], label="position")    plt.plot(t, U, label="control")    plt.legend()    plt.xlabel("time")    plt.ylabel("value")    plt.grid(True)    plt.show()  if __name__ == "__main__":    main()
目的:求解一个二阶双积分器系统的 LQR 控制器并仿真闭环响应,直观看到位置回稳与控制量的变化。
  1. P = solve_continuous_are(A, B, Q, R)调用 SciPy 直接解代数 Riccati 方程,等价于“教练的全局推演”。
  2. K = np.linalg.inv(R) @ (B.T @ P)按 K=R⁻¹BᵀP 构造反馈增益,这是控制律的“操作规则表”。
  3. u = -K @ x每步都用当前状态乘以增益后取负,得到此刻的最优操作。
  4. x = x + (A @ x + B @ u) * dt用欧拉法推进状态方程,模拟系统在控制作用下的真实演化。
  5. Q = np.diag([10.0, 1.0])位置权重 10、速度权重 1,意思是“我更在乎位置偏差”。
  6. R = np.array([[1.0]])控制代价取 1,与 Q 一起构成评分表。

常见误区

误区调参数嘛,Q 和 R 都往大了调,惩罚加满,系统一定又快又稳。

正解Q 和 R 是跷跷板的两端,不是同向旋钮。增大 Q 让状态偏差被更重惩罚,控制会更激进,但代价是控制量 u 可能很大、能耗飙升,甚至引起抖动超调;增大 R 惩罚控制动作,会让响应变慢。真正起作用的是 Q/R 的相对比值,两者同时放大标量倍数并不会改变最优控制律。

为何常见:人们直觉上认为“惩罚越重效果越好”,忘记了惩罚对象不同——一个罚偏差、一个罚能耗,两者天然对立。

误区只要用 LQR 公式算出来了 K,系统就自动稳定,不用检查任何前提。

正解LQR 的稳定性保证依赖前提:系统必须是线性时不变的 (A,B);必须可控或至少可镇定;Q 半正定、R 正定。前提不满足时,Riccati 方程可能无解或给出毫无意义的 K。算出来不等于稳得住,前提检查是 LQR 的第一步。

为何常见:教材通常直接给出“闭环渐近稳定”的结论,读者容易忽略结论背后的假设条件。

误区LQR 又最优又稳定,PID 是老古董,项目里应该全面换成 LQR。

正解LQR 依赖精确的 A、B 模型,工程中系统常含非线性、时变与未建模动态,模型一偏,LQR 的“最优”就打了折扣。PID 无需模型、实现简单、抗扰动直接,在很多场景仍然是最高效的选择。成熟做法是两者配合:LQR 做核心多变量镇定,PID 做外环补偿。

为何常见:学习新方法后容易产生“新的必胜旧的”的错觉,忽略了每种方法的适用边界。

误区调参时盯着阶跃响应曲线,回正快就算调好了,其他都不管。

正解响应快只是表象。Q 增大带来快速性,同时意味着更大控制能量、更高执行器饱和风险,还可能放大量测噪声对系统的影响。工程上必须同时看控制量曲线、能耗统计、鲁棒性余量。R 也不是越小越好,控制力度超过执行器极限会造成饱和,反而破坏线性假设。

为何常见:视觉上“曲线快速归零”最有成就感,隐性的能耗与噪声成本不容易被一眼看见。

误区solve_continuous_are 报错或返回奇异结果,第一反应是代码写错了。

正解Riccati 方程无解或解异常,通常是权重矩阵不满足约束——Q 不是半正定、R 不是正定,或者 (A,B) 不完全可控。先检查可控性矩阵的秩,再检查权重矩阵的对称正定性,最后再怀疑数值问题。

为何常见:初级用户把“数学方程”当成永远有解的算法黑盒,忘记了方程有成立条件。

面试题

Q1. LQR 中 Q 矩阵主要用来惩罚什么?

单选题 · easy

  • A.控制能量消耗
  • B.状态偏差大小← 正确答案
  • C.系统采样频率
  • D.传感器测量噪声

答案:B。Q 是状态权重矩阵,xᵀQx 罚的是状态偏差;控制能量由 R 惩罚。就像教练的评分表里,Q 对应“你有多怕跑偏”,R 对应“你有多怕费油”。

Q2. LQR 的最优控制律一般写成什么形式?

单选题 · easy

  • A.u = -Kx← 正确答案
  • B.u = Kp·e
  • C.u = Kd·de/dt
  • D.u = Ki·∫e dt

答案:A。LQR 是状态反馈,控制量等于增益矩阵与当前状态乘积取负,即 u=-Kx。其余三项分别是 PID 的比例、微分、积分项,属于误差反馈而非状态反馈。

Q3. 下列哪项最适合用 LQR 改善?

单选题 · easy

  • A.根据图片识别猫狗
  • B.无人机悬停姿态稳定← 正确答案
  • C.压缩大语言模型参数
  • D.预测股票未来价格

答案:B。LQR 面向可建模的连续控制系统,无人机姿态控制是典型多变量线性化控制任务。图像识别、模型压缩、价格预测都不是基于状态方程的调节问题。

Q4. 代数 Riccati 方程的解 P 需要满足什么条件?

单选题 · mid

  • A.必须是单位矩阵
  • B.必须是对称正定← 正确答案
  • C.必须是对角矩阵
  • D.必须是零矩阵

答案:B。Riccati 方程在可控性和权重假设下存在唯一对称正定解 P,这个 P 才能用于构造最优增益 K。P 的意义是“长远代价的形状”,必须正定才有合理的代价几何。

Q5. 其他条件不变,增大 R 矩阵会带来什么效果?

单选题 · mid

  • A.响应变得更激进
  • B.控制能耗惩罚更重← 正确答案
  • C.系统必然失稳
  • D.状态偏差必然为零

答案:B。R 是控制权重,R 增大意味着“用控制很贵”,K 会变小,系统趋于温柔省力但回正变慢。这与“Q 增大更激进、R 增大更平滑”的跷跷板关系一致。

Q6. LQR 反馈增益 K 的正确计算公式是哪个?

单选题 · mid

  • A.K = R⁻¹BᵀP← 正确答案
  • B.K = BᵀPR
  • C.K = RBᵀP
  • D.K = PBR⁻¹

答案:A。K=R⁻¹BᵀP 是把 Riccati 解 P 转成控制律的桥梁。R 越大控制越贵、K 越小;B 把 P 与输入通道连接起来。其余组合没有对应的最优性来源。

Q7. 关于 LQR 与 PID 的说法,错误的是哪个?

单选题 · hard

  • A.LQR 依赖精确系统模型
  • B.PID 通常不需要模型
  • C.LQR 只适用于单变量系统← 正确答案
  • D.PID 直接基于误差反馈

答案:C。LQR 天然支持多变量系统,一个 K 矩阵同时协调所有状态。说它只适合单变量是对 LQR 的误解。A、B、D 分别对应 LQR 的模型依赖与 PID 的经验式误差反馈特点。

Q8. LQR 代价函数中包含哪些部分?

多选题 · mid

  • A.xᵀQx 惩罚状态偏差← 正确答案
  • B.uᵀRu 惩罚控制消耗← 正确答案
  • C.对时间做无穷积分← 正确答案
  • D.一个恒定常数偏置

答案:ABC。代价函数 J=∫₀^∞(xᵀQx+uᵀRu)dt,三项缺一不可:状态惩罚、控制惩罚、全程积分。常数偏置不影响控制律的最优解,不属于代价函数组成部分。

Q9. 哪些情况会导致 LQR 设计失败或失效?

多选题 · hard

  • A.(A,B) 不完全可控← 正确答案
  • B.Q 取为负定矩阵← 正确答案
  • C.R 为非正定矩阵← 正确答案
  • D.系统完全可镇定

答案:ABC。LQR 成立需要 (A,B) 可控或至少可镇定、Q 半正定、R 正定。不可控意味着有状态无法被影响,Q 负定破坏代价函数下界,R 非正定让控制惩罚失去意义。D 是正确前提,不会导致失败。

Q10. 双积分器 A=[[0,1],[0,0]]、B=[[0],[1]],取 Q=diag(4,0)、R=1,LQR 增益 K 的第二个分量(速度反馈系数)约为多少?

单选题 · extreme

  • A.1.0
  • B.2.0← 正确答案
  • C.4.0
  • D.8.0

答案:B。双积分器 Riccati 解析解:p₁₂=√(q·r)=√4=2,p₂₂=√(2·p₁₂)=2,K=[p₁₂/r, p₂₂/r]=[2,2],第二个分量为 2.0。这也印证“Q 增大、反馈更猛”的直觉。