当前位置: 首页 > news >正文

MATLAB 控制系统设计与仿真 - 37

范数鲁棒控制器的设计

H_2, H_{\infty}鲁棒控制器的设计

根据双端子状态方程对象模型结构,H_{\infty}控制器设计的目标是找到一个控制器K(s),它能保证闭环系统的H_{\infty}范数限制在一个给定的小整数\gamma下,即

\left \| T_{y_1 u_1}(s)\right \|_{\infty}< \gamma

这时控制器的状态方程为:

\dot{x}(t)=A_fx(t)-ZLu(t) \\ y(t)=Kx(t) \\ A_f=A+\gamma ^{-2}B_1B_1^TX+B_2K+ZLC_2 \\ K=-B_2 ^TX,L=-YC_2^T,Z=(I-\gamma ^{-2}YX)^{-1}

其中X与Y分别为下面两个代数Riccati方程的解。

A^TX+XA+X(\gamma ^{-2}B_1B_1^Tx-B_2B_2^T)X+C_1C_1^T=0 \\ A^TY+YA+Y(\gamma ^{-2}C_1C_1^Tx-C_2C_2^T)X+B_1B_1^T=0

H_{\infty}控制器存在的前提条件为:

  1. 在增广矩阵中,D_{11}足够小,且满足D_{11}<\gamma
  2. 控制器Riccati方程的解X为正定矩阵
  3. 观测器Riccati方程的解Y为正定矩阵
  4. \lambda _{max}(XY)<\gamma ^2,即两个Riccati方程的积矩阵的所有特征值均小于\gamma ^2

在上述前提条件下搜索最小的\gamma值,则可设计出最优H_{\infty}控制器。

H_2, H_{\infty}鲁棒控制器的实现

对双端子模型G,鲁棒控制工具箱中相应的函数可以直接用于控制器的设计,这些函数的调用格式为:

[K,CL,gamma] = h2syn(G,nmeas,ncont); % nmeas:输出信号y的个数% ncont:控制信号u的个数% K 为优化的控制器状态空间方程% CL为w到z的传递函数% gamma为CL的2范数[K,CL,gamma] = hinfsyn(G,nmeas,ncont); % nmeas:输出信号y的个数% ncont:控制信号u的个数% K 为优化的控制器状态空间方程% CL为w到z的传递函数% gamma为CL的无穷范数

其中控制系统的双端子模型如下所示。

例如:

考虑一下对象模型:

G(s)=\frac{300}{s^2+1.5s+300} \\ W_1(s)=\frac{100(0.06s+1)^2}{(0.3s+1)^2},\\ W_2(s)=1; \\ W_3(s)=\frac{s^2}{3000}

试用MATLAB鲁棒控制函数设计H_2, H_{\infty}控制器。

首先利用MATLAB函数h2syn计算在优化H_2 norm下的控制器。

MATLAB代码如下:

clear all;clc;
num=300;
den=[1 1.5 300];
G=tf(num,den);
s=tf('s');
W1=100*(0.06*s+1)^2/(0.3*s+1)^2;
W2=1;
W3=s^2/3000;
Tss=augtf(G,W1,W2,W3);
[K,CL,gamma]=h2syn(Tss);
Gc=feedback(G,K);
step(feedback(G*tf(K),1))
grid on

程序运行结果为:

其次利用MATLAB函数hinfsyn计算在优化H_{\infty} norm下的控制器。

MATLAB代码如下:

clear all;clc;
num=300;
den=[1 1.5 300];
G=tf(num,den);
s=tf('s');
W1=100*(0.06*s+1)^2/(0.3*s+1)^2;
W2=1;
W3=s^2/3000;
Tss=augtf(G,W1,W2,W3);
[K,CL,gamma]=hinfsyn(Tss);
Gc=feedback(G,K);
step(feedback(G*tf(K),1))
grid on

程序运行结果为:

如果知道了控制器,大家可以

  1. 画出闭环系统的传递函数
  2. 引入模型不确定性,然后观察系统响应
  3. 观察输入信号曲线,进而判断控制器的可行性

最后,欢迎大家有问题给我留言。

非常感谢小伙伴们的-点赞-收藏-加关注。


http://www.mrgr.cn/news/99204.html

相关文章:

  • javascript day4
  • 深度学习算法:从基础到实践
  • MFC文件-写MP4
  • 【更新中】【k8s系列6】RKE搭建Kubernetes集群
  • UE5 渲染视频
  • Golang errors 包快速上手
  • CentOS更换yum源
  • 红队专题-漏洞挖掘-代码审计-反序列化
  • 网络编程 - 4 ( TCP )
  • git提交实现文件或目录忽略
  • ZYNQ-GPIO外设
  • 从单模态到多模态:大模型架构演进与技术介绍
  • 【adb】bat批处理+adb 自动亮屏,自动解锁屏幕,启动王者荣耀
  • 前端路由缓存实现
  • Flutter之资源和媒体
  • springboot3 cloud gateway 配置websocket代理转发教程
  • prism
  • 25.4.20学习总结
  • 【2025面试常问Java八股】AQS介绍(AbstractQueuedSynchronizer 抽象队列同步器)
  • Winform发展历程