figure('pos',[50 50 200 150],'color','w');
A=[0 1;-5 -6];B=[2;0];C=[1 2]; syms s;
G=inv(s*eye(size(A))-A);
phet=ilaplace(G); %计算状态转移矩阵 u=1/(s+1);
x=ilaplace(G*B*u); %计算状态响应的解析解 y=C*x; %计算输出响应的解析解 for i=1:61 tt=0.1*(i-1);
xt(:,i)=subs(x(:),'t',tt); yt(i)=subs(y,'t',tt);
end %计算状态响应和输出响应的数值解 plot(0:60,xt,':k',0:60,yt,'-k') gtext('y','FontSize',8) gtext('x1','FontSize',8)
gtext('x2','FontSize',8)
在命令窗中运行该程序得到状态和输出响应解析解和数值解,以及相应的曲线如图5。
图5 状态和输出响应曲线 图6 阶跃响应曲线 3. 线性定常离散系统状态方程的解
如果线性定常离散系统的状态空间表达式为
x(k?1)?Gx(k)?Hu(k)
y(k)?Cx(k)?Du(k) (3-2-7)
初始状态为x(0),那么状态方程的解为 x(k)?Z?1{(zI?G)?1z}x(0)?Zk?1{(zI?G)?1?1HU(z)} (3-2-8)
系统的状态转移矩阵为?(k)?G系统的输出为 y(k)?Z(3-2-10)
?1?Z?1{(zI?G)z} (3-2-9)
{C(zI?G)?1z}x(0)?Z?1{C?(zI?G)?1HU(z)}?Du(k)
16
例2-5 已知系统
x(k?1)?? y(k)??1?01??0?x(k)????u(k) ?1??1???0.16?1?x(k)
求状态转移矩阵,求初始状态为零时系统的单位阶跃响应。 编制程序%ex251求状态转移矩阵。该程序如下
%ex251 G=[0 1;-0.16 -1];
syms z; phez=inv(z*eye(size(G))-G)*z; %计算(zI?G)?1z phek=iztrans(phez) %计算Z在命令窗中运行该程序后返回 phek =
[ 4/3*(-1/5)^n-1/3*(-4/5)^n, 5/3*(-1/5)^n-5/3*(-4/5)^n] [ -4/15*(-1/5)^n+4/15*(-4/5)^n, -1/3*(-1/5)^n+4/3*(-4/5)^n]
编制程序%ex252求出系统的单位阶跃响应并绘制阶跃响应曲线。该程序如下 %ex252
figure('pos',[50 50 200 150],'color','w');
G=[0 1;-0.16 -1];H=[0;1];C=[1 -1];D=0; u=1;n=20;
y= dstep(G,H,C,D,u,n); dstep(G,H,C,D,u,n);
在命令窗中运行该程序后得到系统的阶跃响应曲线如图6。
?1{(zI?G)?1z}
三 线性定常系统的能控性和能观测性
1. 能控性
1)线性定常系统状态能控性的判断
n阶线性定常连续或离散系统?(A,B)状态完全能控的充分必要条件是:能控性矩阵
Uc?B?ABAB2?An?1B的秩为n。
?能控性矩阵可用MATLAB提供的函数ctrb( )自动产生,其调用格式为:
Uc?ctrb(A,B)
其中A,B分别为系统矩阵和输入矩阵,Uc为能控性矩阵。
能控性矩阵的秩即rank(Uc)称为能控性指数,表示系统能控状态变量的数目,可由MATLAB提供的函数rank( )求出。
17
例3-1 判断系统的能控性 ?1???0 x???0?2 y???0321112??2??0x?1???3????11??x 0?1??1u ??1??在命令窗中运行下列命令
>> A=[1 3 2;0 2 0;0 1 3]; B=[2 1; 1 1;-1 -1]; Uc=ctrb(A,B); rank(Uc)
返回 ans =
2
因为rank(Uc)=2?n,所以系统的状态不完全能控。
也可编制判断系统状态能控性的函数sctrb( ),其程序如下: function sctrb(A,B) %判断系统状态的能控性 Uc=ctrb(A,B); nc=rank(Uc); n=length(A); if n==nc
disp('system is completely state controllable') else
disp('system is not completely state controllable') end
在命令窗中运行下列命令 >> A=[1 3 2;0 2 0;0 1 3];B=[2 1;1 1;-1 -1];sctrb(A,B) 返回
system is not completely state controllable 2)线性定常系统输出能控性的判断
线性定常连续或离散系统?(A,B,C,D)输出能控的充分必要条件是:m?(n?1)r矩阵U?CBy?CABCAB2?CAn?1BD的秩为m,其中r为系统的输入个数,m为
?输出个数。
矩阵Uy可以通过能控性矩阵Uc得到,即U例3-2 判断系统的输出能控性
??4???x?15???5?x????u 0?1??y??C*UcD?
y??1?1?x
在命令窗中运行下列命令
>> A=[-4 5;1 0];B=[-5;1];C=[1 -1];D=0;Uc=ctrb(A,B);Uy=[C*Uc D];rank(Uy)
18
返回
ans= 1
因为rank(Uy)=1=m,故系统是输出能控的。
类似的,也可编制判断输出能控性的函数。 2. 能观测性
n阶线性定常连续或离散系统?(A,C)状态完全能观测的充分必要条件是:能观测性矩?C???CA??2阵Vo??CA?的秩为n。
?????n?1???CA?能观测性矩阵可以用MATLAB提供的函数obsv( )自动产生,其调用格式为:
Vo?obsv(A,C)
其中A, C分别为系统矩阵和输出矩阵,Vo为能观测性矩阵。
能观测性矩阵的秩即rank(Vo)称为能观测性指数,表示系统能观测状态变量的数目。可由MATLAB提供的函数rank( )求出。
例3-3 判断例1中系统的能观测性
在命令窗中运行下列命令
>> A=[1 3 2;0 2 0;0 1 3]; C=[2 1 1;0 1 0]; Vo=obsv(A,C); rank(Vo) 返回 ans=
3
因为rank(Vo)=3=n,故系统状态完全能观测。
类似地,也可编制判断状态能观测性的函数。 3. 线性系统的结构分解 1) 按能控性分解
如果线性系统的状态不完全能控,则可通过非奇异线性变换, 将系统(或状态)分解为 能控和不能控两部分。
MATLAB提供的函数ctrbf( ), 可将系统(或状态)分解为如下形式:
???A?xcc??????xc??A210??xc??0???????u Ac??xc??Bc?y?Cc??xc?Cc?? (3-3-1)
?xc??该函数的调用格式为:
?Ac
BcCcTcKc??ctrbf(A,B,C)
19
其中?ABC?为给定系统的状态空间模型,?AcBcCc?为分解后系统的状态空间模
型。T为相应线性变换矩阵,Kc返回系统中能控状态变量的数目。 例3-4 按能控性分解
?0???1x???0001?1??1?????3x?1u ?????3???0??y??01?2?x
在命令窗中运行下列命令
>> A=[0 0 -1;1 0 -3;0 1 -3]; B=[1;1;0]; C=[0 1 -2]; [Ac Bc Cc Tc Kc]=ctrbf(A,B,C)
返回
Ac =
-1.0000 0.0000 -0.0000 -2.1213 -2.5000 0.8660 -1.2247 -2.5981 0.5000 Bc = 0 0
-1.4142 Cc =
1.7321 1.2247 -0.7071 Tc =
-0.5774 0.5774 -0.5774 0.4082 -0.4082 -0.8165 -0.7071 -0.7071 0 Kc =
1 1 0
另一种按能控性分解的形式为
???A?xcc??????xc??0A12??xc??Bc???????u Ac??xc??0?y?Cc?Cc??xc??? (3-3-2) ?xc??将由ctrbf( )函数得到的各系数矩阵均利用MATLAB提供的函数rot90( )旋转180就可得这种形式。函数rot90( )的调用格式为
rot90(a,k) 将矩阵a逆时针旋转k?90.
我们编制的函数cdescom ( )能够将系统分解为这种形式。该函数的调用格式为 ?Ac
?BcCcTck??cdesco(mA,B,C)
20