• 大小: 301KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: Matlab
  • 标签: 鲁棒控制  LMI  matlab  

资源简介

利用matlab实现H-infinity鲁棒控制,学习鲁棒控制matlab编程的很好教程

资源截图

代码片段和文件信息

%下面的代码展示了如何在Matlab中进行H-infinity控制器的设计。此处举的例子与混合
%S/KS问题有些不同。此处用到的模型和权重函数见Skogestad和Postlethwaite,1996,
%ed.1p.60.权重函数并不是“最优”的。
%
%大部分函数来自mu-tools,一些来自lmi-tools。mu-tools和lmi-tools均包含在RCT 
%v3.0.1中。
%-Jorgen Johnsen 14.12.06

%-------------------------------------------------------------------------
%建立子系统
%-------------------------------------------------------------------------
%Plant:G=200/((10s+1)(0.05s+1)^2)
%方法1:直接方法,利用mu-tools
G=nd2sys(1conv([101]conv([0.051][0.05 1]))200);
%方法2:control system toolbox
s=tf(‘s‘);
Gcst=200/((10*s+1)*(0.05*s+1)^2);
[abcd]=ssdata(balreal(Gcst));
G=pck(abcd);

%权重:Ws=(s/M+w0)/(s+w0*A)Wks=1
M=1.5;w0=10;A=1.e-4;
Ws=nd2sys([1/M w0][1 w0*A]);
Wks=1;

%-------------------------------------------------------------------------
%建立广义系统P
%-------------------------------------------------------------------------
%方法0:直接方法
%/z1\  /Ws -Ws*G\ /r\
%|z2| =|0   Wks | | | 
%\ v/  \I   -G  / \u/ 

%传递函数表达方法
Z1=sbs(Wsmmult(-1WsG));
Z2=sbs(0Wks);
V=sbs(1mmult(-1G));
P0=abv(Z1Z2V);
%通常情况下P0并不是最小实现,所以需要降阶
[abcd]=unpck(P0);
[abbbcbdb]=ssdata(balreal(minreal(ss(abcd))));
P0=pck(abbbcbdb); %此时得到变量为System类型

%-------------------------------------------------------------------------
%建立广义系统P
%-------------------------------------------------------------------------
%方法1:直接方法
%/z1\  /W1 -W1*G\ /r\
%|z2| =|0   W2 |  | | 
%\ v/  \I   -G  / \u/ 

%子系统的ss实现
[ABCD]=unpck(G);
[A1B1C1D1]=unpck(Ws);
[A2B2C2D2]=unpck(Wks);

%计算不同子系统的输入、输出变量的个数
n1=size(A11);[q1p1]=size(D1);
n2=size(A21);[q2p2]=size(D2);
n=size(A1);[qp]=size(D);%原文此处为[pq]=size(D);

%全系统的ss实现
Ap=[A1 zeros(n1n2) -B1*C;
    zeros(n2n1) A2 zeros(n2n);
    zeros(nn1) zeros(nn2) A];
Bp=[B1 -B1*D;
    zeros(n2p) B2;
    zeros(np) B];
Cp=[C1 zeros(q1n2) -D1*C;
    zeros(q2n1) C2 zeros(q2n);
    zeros(qn1) zeros(qn2) -C];
Dp=[D1 -D1*D;
    zeros(q2p) D2;
    eye(p) -D];
%得到均衡实现形式,以减少可能产生的计算问题
[ApbBpbCpbDpb]=ssdata(balreal(ss(ApBpCpDp)));
P1=pck(ApbBpbCpbDpb);    %P1与P0数值相近,但符号有差别

%-------------------------------------------------------------------------
%建立广义系统P
%-------------------------------------------------------------------------
%方法2:利用sysic函数
systemnames=‘G Ws Wks‘;
inputvar=‘[r(1);u(1)]‘;%所有输入均为标量,r(2)为两维信号
outputvar=‘[Ws;Wks;r-G]‘;
input_to_G=‘[u]‘;
input_to_Ws=‘[r-G]‘;
input_to_Wks=‘[u]‘;
sysoutname=‘P2‘;
cleanupsysic=‘yes‘;
sysic

%-------------------------------------------------------------------------
%建立广义系统P
%-------------------------------------------------------------------------
%方法3:利用sconnect函数
inputs=‘r(1);u(1)‘;
outputs=‘Ws;Wks;e=r-G‘;
K_in=[];%无控制器
G_in=‘G:u‘;
Ws_in=‘Ws:e‘;
Wks_in=‘Wks:u‘;
[P3r]=sconnect(inputsoutputsK_inG_inGWs_inWsWks_inWks);

%-------------------------------------------------------------------------
%建立广义系统P
%-------------------------------------------------------

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6684  2011-12-08 00:09  robustcontrol.m

     文件     108790  2011-12-07 17:22  hinfcontrol.pdf

     文件     286208  2011-12-08 00:08  利用matlab实现鲁棒控制.doc

----------- ---------  ---------- -----  ----

               401682                    3


评论

共有 条评论