2026a

# lqr


线性二次调节器(LQR)设计

函数库: TyControlSystems

# 语法

K, S, P = lqr(sys, Q, R, N)
K, S, P = lqr(A, B, Q, R, N)

# 描述

KSP = lqr (sysQRN) 计算最优增益矩阵 K、相关代数 Riccati 方程的解 S,以及连续时间或离散时间状态空间模型系统的闭环极点 P。Q 和 R 分别是状态和输入的权重矩阵。省略时,交叉项矩阵 N 设置为零。 示例


KSP = lqr (ABQRN) 使用连续时间状态空间矩阵 A 和 B 计算最佳增益矩阵 K、相关代数 Riccati 方程的解 S 和闭环极点 P。此语法仅对连续时间模型有效。对于离散时间模型,请使用 dlqr。

# 示例

倒摆模型的 LQR 控制

pendulumModelCart.jl 包含推车上倒摆的状态空间模型,其中输出是推车位移 x 和摆锤角 θ。控制输入 u 是推车上的水平力。

首先,将状态空间模型 sys 加载到工作区。

using TyControlSystems
pkg_dir = pkgdir(TyControlSystems)
source_path = pkg_dir * "/examples/resources/System Synthesis/Modern Control Method/lqr/pendulumModelCart.jl"
include(source_path)
sys;

由于输出是 x 和 θ,并且只有一个输入,使用 Bryson 规则来确定 Q 和 R。

Q = [1 0 0 0
    0 0 0 0
    0 0 1 0;
    0 0 0 0];
R = 1;

用 lqr 求增益矩阵 K。由于 N 未指定,lqr 将 N 设为 0。

K, S, P = lqr(sys, Q, R);
K
1×4 Matrix{Float64}:
 -1.0  -1.75586  16.9145  3.22736
S
4×4 Matrix{Float64}:
  1.53459    1.21272   -3.22736  -0.685088
  1.21272    1.53214   -4.56256  -0.964027
 -3.22736   -4.56256   26.5487    5.20792
 -0.685088  -0.964027   5.20792   1.03108
P
4-element Vector{ComplexF64}:
 -5.4941477702460295 + 0.4564040004198286im
 -5.4941477702460295 - 0.4564040004198286im
 -0.8683898895346467 + 0.8523239465990423im
 -0.8683898895346467 - 0.8523239465990423im

尽管 Bryson 规则通常提供令人满意的结果,但它通常只是基于设计需求调整闭环系统响应的试错迭代设计过程的开始。

# 输入参数

sys - 动态系统模型
状态空间模型

动态系统模型,指定为 SISO 或 MIMO 状态空间模型,模型可以是连续时间或离散时间。

A - 状态矩阵
方阵

状态矩阵,指定为 n x n 矩阵,其中 n 是状态的个数。

数据类型: Float | Int

B - 输入-状态矩阵
矩阵

输入到状态矩阵,指定为 n x m 矩阵,其中 n 是状态的个数,m 是输入的个数。

数据类型: Float | Int

Q - 状态成本加权矩阵
矩阵

状态成本加权矩阵,指定为 n x n 对称矩阵或 Hermitian 矩阵,其中 n 是状态的个数。Q 的初始值可以使用 Bryson's 规则来设置,由下式给出:

数据类型: Float | Int

R - 投入成本加权矩阵
矩阵 | 标量

输入成本加权矩阵,指定为标量或 m x m 对称矩阵或 Hermitian 矩阵,其中 m 是输入的个数。R 的初始值可以使用 Bryson's 规则来设置,由下式给出:

数据类型: Float | Int

N - 可选的交叉项矩阵
矩阵 | 向量

可选的交叉项矩阵,指定为 n x m 矩阵或长度为 n 的向量,默认为零矩阵,其中 n 是状态的个数,m 是输入的个数。

数据类型: Float | Int

# 输出参数

K - 最佳增益
矩阵

闭环系统的最佳增益,返回为 m x n 矩阵,其中 n 是状态的个数,m 是输入的个数。

数据类型: Float | Int

S - 相关代数 Riccati 方程的解
矩阵

相关代数 Riccati 方程的解,返回为 n x n 矩阵,其中 n 是状态的个数。有关代数 Riccati 方程的详细信息,请参阅 icareidare

数据类型: Float | Int

P - 闭环系统的极点
向量

闭环系统的极点,返回为长度为 n 的向量,其中 n 是状态数。

数据类型: Float | Complex

# 局限性

输入数据必须满足以下条件:

  • A 和 B 必须是稳定的;
  • 必须是非负定的;
  • 在虚轴(或离散时间的单位圆)上没有不可观察的模式。

# 其他描述

lqr 支持具有非奇异 E 的描述符模型。lqr 的输出 S 是等效显式状态空间模型的代数 Riccati 方程的解:

# 算法

对于连续时间系统,lqr 计算最小化二次成本函数的状态反馈控制

受系统动态影响

除了状态反馈增益 K 之外,lqr 还返回相关代数 Riccati 方程的解 S

闭环极点 为。增益矩阵 K 由 S 导出,使用下式

对于离散时间系统,lqr 计算状态反馈控制 最小化

受制于系统动态

在所有情况下,当省略交叉项矩阵 N 时,lqr 会将 N 设置为 0。

# 另请参阅

idare | icare | lqg