现代控制理论实验指导书(6)

2019-07-13 19:12

-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

另一种按能控性分解的形式为

?c??Ac?x??????xc??0y?CcA12??xc??Bc???????u Ac??xc??0???xc?Cc?? (3-3-2)

?xc??将由ctrbf( )函数得到的各系数矩阵均利用MATLAB提供的函数rot90( )旋转180就可得这种形式。函数rot90( )的调用格式为

rot90(a,k) 将矩阵a逆时针旋转k?90.

我们编制的函数cdescom ( )能够将系统分解为这种形式。该函数的调用格式为 ?Ac??BcCcTck??cdesc(oAm,B,C)

Tc其中(A,B,C)为给定系统的状态空间模型,Ac,Bc,Cc为分解后系统的状态空间模型。

为相应的线性变换矩阵。k表示能控状态变量的数目。该函数的程序如下

function [Ac,Bc,Cc,Tc,k]=cdescom(A,B,C) %按能控性分解 U=ctrb(A,B); m=rank(U); n=size(A,1); if m~=n

t1=U(:,1); for i=2:n*m

t2=[t1,U(:,i)]; if rank(t2)==i t1=t2; else t1=t1; end

if rank(t1)==m

break; end end

p=zeros(n-m,n); for i=0:m

p(1:n-m,m+1-i:n-i)=eye(n-m,n-m); Tc=[t1,p']; if rank(Tc)==n break; end end

Ac=inv(Tc)*A*Tc; Bc=inv(Tc)*B; Cc=C*Tc; k=m; end

在命令窗中运行下列命令

>> A=[0 0 -1;1 0 -3;0 1 -3];B=[1;1;0];C=[0 1 -2];[Ac Bc Cc Tc]=cdescom(A,B,C) 返回 Ac =

0 -1 -1 1 -2 -2 0 0 -1 Bc = 1 0 0 Cc =

1 -1 -2 Tc =

1 0 0 1 1 0 0 1 1 k =

2

2) 按能观测性分解

如果线性系统状态不完全能观测,则可通过非奇异线性变换将系统(或状态)分解为能观测和不能观测两部分。

MATLAB提供的函数obsvf( )可将系统(或状态)分解为如下形式:

?o??Ao?x??????xo??0A12??xo??Bo???????u Ao??xo??Bo??x?y?0Co?o? (3-3-3)

?xo???该函数的调用格式为

?Ao其中?ABoCoToKo??obsvf(A,B,C)

BoCo?为分解后系统的状态空间

BC?为给定系统的状态空间模型,?Ao模型。To为相应的线性变换矩阵,Ko返回系统能控状态变量的数目。

例3-5 按能观测分解例3-4中系统

另一种按能观测性分解的形式为

?o??Ao?x??????xo??A21y?Co0??xo??Bo???????u Ao??xo??Bo???x?0?o? (3-3-4) ?xo??将由ctrbf( )函数得到的各系数矩阵均利用MATLAB提供的函数rot90( )旋转180就可得这种形式。

我们编制的函数odescom ( )能够将系统分解为这种形式。该函数的调用格式为

?Ao?BoCoTok??odesc(oAm,B,C)

其中(A,B,C)为给定系统的状态空间模型,(Ao,Bo,Co)为分解后系统的状态空间模型。

To为相应的线性变换矩阵。k表示能观测的状态变量的数目。该函数的程序如下

function [Ao, Bo, Co, To, k]=odescom(A,B,C) %按能观测性分解

V=obsv(A,C); m=rank(V); n=size(A,1); if m~=n

t1=V(1,:); for i=2:n*m

t2=[t1;V(i,:)]; if rank(t2)==i t1=t2; else t1=t1; end

if rank(t1)==m break; end end

p=zeros(n-m,n); for i=0:m

p(1:n-m,m+1-i:n-i)=eye(n-m,n-m); To=[t1;p]; if rank(To)==n break; end end

Ao=To*A*inv(To); Bo=To*B; Co=C*inv(To); k=m; end

3) 按能控性和能观测性分解(Kalman分解)

如果线性系统的状态不完全能控和不完全能观测,则可通过非奇异线性变换将系统(或状态)分解为能控能观测、能控不能观测、不能控能观测和不能控不能观测四部分。

?co??Aco?x?????xco???A21?co??0?x?????xco???00Aco00A13A23AcoA430??xco??Bco??????A24??xco??Bco??u

?????x00co?????Aco???xco??0?y?Cco?0Cco?xco??x?0?co? (3-3-5) ?xco????xco??可利用函数ctrbf( )、obsvf( )编制按能控性和能观测性分解函数kalmdec( ),该函数调用格式为:

?Ak其中?ABkCkTk??kalmdec(A,B,C)

BkCk?为分解以后系统的状态空

BC?为给定系统的状态空间模型,?Ak间模型,Tk为线性变换矩阵。该函数的程序如下

function [Ak, Bk, Ck ,Tk]=kalmdec(A,B,C) %按能控能观测性分解

[Ac,Bc,Cc,Tc,Kc]=ctrbf(A,B,C); nc=rank(ctrb(A,B));

n=length(A); ic=n-nc+1:n;

[Ao1,Bo1,Co1,To1,Ko1]=obsvf(Ac(ic,ic),Bc(ic),Cc(ic)); if nc

[Ao2,Bo2,Co2,To2,Ko2]=obsvf(Ac(inc,inc),Bc(inc),Cc(inc)); end

[m1,n1]=size(To1); [m2,n2]=size(To2); To=[To2,zeros(m2,n1); zeros(m1,n2),To1]; T=To*Tc;

n1=rank(obsv(Ac(ic,ic),Cc(ic))); n2=rank(obsv(Ac(inc,inc),Cc(inc)));

K=[zeros(1,n-nc-n2),ones(1,n2),2*ones(1,nc-n1),3*ones(1,n1)]; Ak1=T*A*inv(T);Bk1=T*B;Ck1=C*inv(T); Ak=rot90(Ak1,2); Bk=rot90(Bk1,2); Ck=rot90(Ck1,2); Tk=rot90(T,2);

例3-6 按能控性和能观测性分解例3-4中系统

在命令窗中运行下列命令:

>> A=[0 0 -1;1 0 -3;0 1 -3]; B=[1;1;0]; C=[0 1 -2]; [Ak Bk Ck Tk]=kalmdec(A,B,C) 返回 Ac =

-1.0000 0 1.2247 3.4641 -1.0000 -2.1213 -0.0000 0.0000 -1.0000 Bc =

-0.7071 -1.2247 0


现代控制理论实验指导书(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:刑事诉讼法(复习题)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: