2026a

# hinfsyn


生成 H∞ 最优控制器

函数库: TyRobustControl

# 语法

K,CL,Gamma = hinfsyn(P,Nmeas,Ncon)
K,CL,Gamma = hinfsyn(P,Nmeas,Ncon,GammaTry)
K,CL,Gamma = hinfsyn(P,Nmeas,Ncon,GammaRange)
K,CL,Gamma = hinfsyn(___,Opts)

# 说明

K, CL, Gamma = hinfsyn(P,Nmeas,Ncon) 计算出系统 的 H∞ 最优稳定控制器 可以分解成以下形式:

其中,

  • 代表扰动输入;
  • 代表控制输入;
  • 代表被控输出;
  • 代表测量输出。

Nmeas 和 Ncon 分别是 y 和 u 中的信号个数。y 和 u 分别是 的最后输出和输入。 hinfsyn 生成一个能使 稳定且状态数与其相同的控制器 。闭环系统 CL = lft(P,K) 能达到性能水平 Gamma,即 的 H∞ 范数(详细信息,请参见 norm)。


K, CL, Gamma = hinfsyn(P,Nmeas,Ncon,GammaTry) 计算目标性能水平 GammaTry 的控制器。当最佳控制器性能优于应用需要时,指定 GammaTry 会非常有用。在这种情况下,非最佳控制器的增益会更小,数值调节也会更好。当 捕捉到所需的 增益限制时,使用 GammaTry = 1 来执行这些限制。

如果 GammaTry 无法达到,hinfsyn 会返回 K = ss(0); CL = P; Gamma = Inf


K, CL, Gamma = hinfsyn(P,Nmeas,Ncon,GammaRange) 在 GammaRange 范围内搜索控制器的最佳性能水平。GammaRange 指定为 [gmin, gmax] 形式的向量。限制搜索范围可以减少 hinfsyn 为测试不同性能水平而进行的迭代次数,从而加快计算速度。


K,CL,Gamma = hinfsyn(___,Opts) 指定额外的计算选项。要创建选项,请使用 hinfsynOptions。在所有其他输入参数之后指定选项。

提示

不同环境下,hinfsyn 返回结果可能不一致。

# 示例

H∞ 控制器生成

使用不同的目标性能水平生成控制器。加载增广后的被控系统。

using TyRobustControl
using TyControlSystems
using TyBase
using TyPlot

pkg_dir = pkgdir(TyRobustControl);
source_path = pkg_dir * "/examples/resources/H-Infinity Synthesis/hinfsyn/hinfsynData.mat";
load(source_path);
P = ss(A,B,C,D);
size(P)
(5, 4)

该系统有 5 个输出和 4 个输入,其中最后 2 个输出是提供给控制器的测量信号,最后 1 个输入是控制信号。计算 H∞ 最优控制器。

Ncon = 1; 
Nmeas = 2; 
K,CL,Gamma = hinfsyn(P,Nmeas,Ncon);

生成控制器具有 2 个输入, 1 个输出,状态数与 相同。

size(K),nstates(K)
((1, 2), 9)

该控制器达到的最佳性能水平作为 Gamma 值返回。该值同样是闭环系统 的 H∞ 范数。

Gamma
0.940368433789716

您可以检查闭环系统的奇异值图,以确认其最大奇异值不超过 Gamma。

sigma(CL,ss(Gamma))
ylim([-120, 20])
混合灵敏度控制器生成

为以下系统设计一个混合灵敏度控制器,并用以下回路成形滤波器进行增广(详细信息,请参见 mixsyn)。

定义原系统、加权滤波器和增广系统:

using TyRobustControl
using TyControlSystems

s = zpk('s');
G = (s-1)/(s+1);
W1 = 0.1*(s+100)/(100*s+1); 
W2 = ss(0.1); 
W3 = nothing;
P = augw(G,W1,W2,W3);

K,CL,Gamma = hinfsyn(P,1,1);
Gamma
0.1844399890346652

对于该系统,Gamma 约为 0.18,或约为 -15 dB。检查闭环结果的奇异值:

sigma(CL,ss(Gamma))

计算同一系统的新控制器,不含 W1。

W1 = nothing;
P = augw(G,W1,W2,W3);
K,CL,Gamma = hinfsyn(P,1,1);
K
A =
 -1.0
B = 
 0.0
C =
 0.0
D =
 0.0

连续时间状态空间模型

在这种情况下,产生的控制器 为零,闭环传递函数 也为零。

# 输入参数

P - 受控系统
动态系统模型

受控系统,指定为 SISO 或 MIMO 动态系统模型。可以使用的动态系统包括:

连续时间或离散时间数值 LTI 模型,如 tfzpkss 模型。

可以是任意 LTI 模型,输入为 ,输出为 ,其中:

  • 代表扰动输入;
  • 代表控制输入;
  • 代表被控输出;
  • 代表测量输出。

测量输出 y 是最后的输出,控制输入 u 是最后的输入。 的状态空间表达式如下所示:

如果 是带有不确定或可调模块的广义状态空间模型,则 hinfsyn 会采用受控系统的标称值。

数据类型: Float | Int

Nmeas - 测量输出信号个数
正整数

系统中测量输出信号的数量,指定为正整数。函数将系统的最后 Nmeas 个输出作为测量值 y,返回的控制器 有 Nmeas 个输入。

数据类型: Int

Ncon - 控制输入信号个数
正整数

系统控制输入信号的数量,指定为正整数。函数将系统的最后 Ncon 个输入作为控制 u,返回的控制器 有 Ncon 个输出。

数据类型: Int

GammaTry - 目标性能水平
正数

目标 H∞ 性能水平,指定为正数。

hinfsyn 试图生成一个控制器,使加权闭环系统 的 H∞ 性能水平不超过 GammaTry。如果可以达到这一性能水平,则返回控制器的 Gamma ≤ GammaTry。如果 GammaTry 无法达到,则 hinfsyn 返回一个空控制器。

数据类型: Float | Int

GammaRange - 目标性能水平的搜寻范围
向量

目标性能水平的搜寻范围,指定为由两个实数元素组成的向量,默认为 [0, Inf]。

hinfsyn 仅测试该范围内的性能水平,返回的控制器性能可分为以下三种情况:

  • gamma ≤ gmin(gmin 可以达到);
  • gmin < gamma < gmax(gmax 可以达到而 gmin 达不到);
  • gamma = Inf (gmax 无法达到)。在这种情况下,hinfsyn 返回的控制器 K = ss(0)

如果您知道可行的性能水平范围,那么指定该范围可以减少 hinfsyn 为测试不同性能级别而执行的迭代次数,从而加快计算速度。

数据类型: Float | Int

Opts - 选项
HinfSynOptions 结构体

计算的附加选项,指定为 HinfSynOptions 结构体。可用选项包括:

  • 在命令行显示算法进度;
  • 关闭自动缩放和正则化;
  • 指定优化方法。

# 输出参数

K - 控制器
状态空间模型

控制器,返回为状态空间模型。

如果您指定了 GammaTryGammaRange,但指定的性能值无法实现,那么 K = ss(0)

数据类型: Float | Int

CL - 系统闭环传递函数
状态空间模型

闭环传递函数,返回为状态空间模型。闭环传递函数为 CL = lft(P,K),如下图所示。

返回的性能水平 Gamma 即 的 H∞ 范数。

如果您指定了 GammaTry 或 GammaRange,但指定的性能水平无法达到,那么 CL = P

数据类型: Float | Int

Gamma - 控制器的性能水平
非负实数

控制器的性能水平,返回为非负实数。

该值是控制器 K 能够达到的性能水平,同样也是 CL 的 H∞ 范数(详细信息,请参见 norm)。如果您未指定 GammaTry 或 GammaRange 代表的性能水平,那么 Gamma 就是可达到的最佳性能水平。

如果您指定了 GammaTry 或 GammaRange,那么 Gamma 就是控制器达到的实际性能水平,是根据 hinfsyn 尝试的最佳通过性能级别计算得出的。如果无法达到 GammaTry 或 GammaRange 代表的性能水平,则 Gamma = Inf。

数据类型: Float | Int

# 局限性

该系统必须能够从控制输入 u 进行稳定化,并且从测量输出 y 进行检测,即 必须是可稳定的,而 必须是可检测的。否则将报错。

# 另请参阅

augw | mixsyn | h2syn | ncfsyn