利用matlab实现H-infinity鲁棒控制
%------------------------------------------------------------------------- %Plant:G=200/((10s+1)(0.05s+1)^2) %方法1:直接方法,利用mu-tools
G=nd2sys(1,conv([10,1],conv([0.05,1],[0.05 1])),200); %方法2:control system toolbox s=tf('s');
Gcst=200/((10*s+1)*(0.05*s+1)^2); [a,b,c,d]=ssdata(balreal(Gcst)); G=pck(a,b,c,d);
%权重: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(Ws,mmult(-1,Ws,G)); Z2=sbs(0,Wks);
V=sbs(1,mmult(-1,G)); P0=abv(Z1,Z2,V);
%通常情况下P0并不是最小实现,所以需要降阶 [a,b,c,d]=unpck(P0);
[ab,bb,cb,db]=ssdata(balreal(minreal(ss(a,b,c,d)))); P0=pck(ab,bb,cb,db); %此时得到变量为System类型
%------------------------------------------------------------------------- %建立广义系统P
%------------------------------------------------------------------------- %方法1:直接方法 %/z1\ /W1 -W1*G\ /r\ %|z2| =|0 W2 | | | %\ v/ \I -G / \u/
%子系统的ss实现 [A,B,C,D]=unpck(G);
[A1,B1,C1,D1]=unpck(Ws);