# 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) 计算出系统
其中,
代表扰动输入; 代表控制输入; 代表被控输出; 代表测量输出。
Nmeas 和 Ncon 分别是 y 和 u 中的信号个数。y 和 u 分别是 hinfsyn 生成一个能使 CL = lft(P,K) 能达到性能水平 Gamma,即
K, CL, Gamma = hinfsyn(P,Nmeas,Ncon,GammaTry) 计算目标性能水平 GammaTry 的控制器。当最佳控制器性能优于应用需要时,指定 GammaTry 会非常有用。在这种情况下,非最佳控制器的增益会更小,数值调节也会更好。当
如果 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 值返回。该值同样是闭环系统
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 - 受控系统动态系统模型
Nmeas - 测量输出信号个数正整数
系统中测量输出信号的数量,指定为正整数。函数将系统的最后 Nmeas 个输出作为测量值 y,返回的控制器
数据类型: Int
Ncon - 控制输入信号个数正整数
系统控制输入信号的数量,指定为正整数。函数将系统的最后 Ncon 个输入作为控制 u,返回的控制器
数据类型: Int
GammaTry - 目标性能水平正数
目标 H∞ 性能水平,指定为正数。
hinfsyn 试图生成一个控制器,使加权闭环系统 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 - 控制器状态空间模型
CL - 系统闭环传递函数状态空间模型
闭环传递函数,返回为状态空间模型。闭环传递函数为 CL = lft(P,K),如下图所示。
返回的性能水平 Gamma 即
如果您指定了 GammaTry 或 GammaRange,但指定的性能水平无法达到,那么 CL = P。
数据类型: Float | Int
Gamma - 控制器的性能水平非负实数
# 局限性
该系统必须能够从控制输入 u 进行稳定化,并且从测量输出 y 进行检测,即