您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 线性系统结构分析与分解及标准型
实验三十七线性系统结构分析与分解及标准型实验类型:验证难度系数:0.3实验性质:必做课内学时:0课外学时:2分组人数:2开课方式:在课外完成在MATLAB平台上完成实验。实验目的:掌握线性系统状态空间标准型、解及其模型转换。实验设备与软件:1、MATLAB数值分析软件实验原理:1、标准型变换、矩阵Jordan型变换阵、特征值(1)标准型变换命令格式csys=canon(sys,’type’)说明:type制定规范型的形式,包括两种选项:model(模态规范型)、companion(伴随规范型,友矩阵型,能控II型)。(2)矩阵的Jordan规范型命令格式[VJ]=Jordan(A)说明:V特征向量,J是Jordan型(3)求矩阵特征值和特征向量命令格式[VJ]=eig(A)cv=eig(A)说明:V特征向量,J是Jordan型;cv是特征值列向量2、状态模型的相似变换:命令格式sysb=ss2ss(sys,T)说明:sys是状态空间模型,T是非奇异变换阵的逆阵传递函数模型与状态空间模型之间的相互转换:命令格式[A,B,C,D]=tf2ss(num,den)[num,den]=ss2tf(A,B,C,D,iu)说明:tf2ss:传递函数状态空间;ss2tf状态空间传递函数;iu是第iu个输入有效zpk模型与状态空间模型之间的相互转换:命令格式:[A,B,C,D]=zp2ss(z,p,k)[z,p,k]=ss2zp(A,B,C,D,iu)说明:zp2ss:zpk模型状态空间模型;ss2zp状态空间模型zpk模型3、线性定常系统的可控制与可观性及结构分解关于可控制与可观性及结构分解的理论内容,请看教材学习。(1)可控性和可观性----一般采用能控性/能观性矩阵类别(适用于离散或连续的情况)状态可控性和输出可控性子函数如下:functionstr=pdctrb(A,B)Qc=ctrb(A,B);r=rank(Qc);l=length(A);ifr==lstr=’系统是状态完全可控的!’functionstr=pdctrbo(A,B)%输出可控性Co=ctrb(A,B);m=size(C,1);%返回行数Qyc=[C*Co,D];Tm=rank(Qyc);ifm==Tmelsestr=’系统不是状态完全可控的!’end实际上,rank(Qc)为系统的状态可控性指数,即系统中可控的状态的数目。str=’系统输出是完全可控的!’elsestr=’系统输出不是完全可控的!’end实际上,rank(Qyc)为系统的输出可控性指数,即系统中可控的输出的数目。状态可观性判别子函数代码如下:functionstr=pdobsv(A,C)Qo=obsv(A,C);r=rank(Qo);l=size(A,1);ifr==lstr=’系统是状态完全可观的!’elsestr=’系统不是状态完全可观的!’end实际上,rank(Qo)为系统的状态可观性指数,即系统中可观测的状态的数目。有了上述子函数,在Matlab中可以直接调用这些子函数来判断可控性和可观性。(2)可控性和可观性Gram矩阵可由下面的函数求得W=gram(sys,type)----sys是系统的状态空间模型,type可以是’c’或’o’。通过判断W的正定性判定其可控性或可观性。由于从W的数学表达式上看,Wc和Wo是对称的半正定矩阵,它们分别满足下面的Lyapunov方程(这种方程在稳定性分析中还将提到)TTccAWWABB、TTooAWWACC所以系统必须稳定才能得到Gram矩阵。Wc矩阵中的值对应于输入信号对相应状态的贡献:第i个元素越大,则说明输入信号对第i个输入状态的贡献越大。Wo矩阵中的值对应于每个状态对系统输出的贡献:第i个元素越大,则说明第i状态对系统输出的贡献越大。(3)结构分解a.在matlab中调用ctrbf()函数对系统按能控性分解[Abar,Bbar,Cbar,T,K]=ctrbf(A,B,C)[Abar,Bbar,Cbar,T,K]=ctrbf(A,B,C,TOL)说明:K是可控的状态个数,TOL为误差,这里的变换是这样令的:x=T-1xbar,所以有Abar=TAT-1,Bbar=TB,Cbar=CT-1。显然这与教材中的令法是不同的,且T的选取方式也不同,得到的分解形式也不同,要加以区别。这里的能观性分解形式为(,,)ooooABC:21ˆ0ˆˆcccAAAA,0ˆccBB,ˆˆcccCCCb.在matlab中调用ctrbf()函数对系统按能观性分解[Abar,Bbar,Cbar,T,K]=obsvf(A,B,C)[Abar,Bbar,Cbar,T,K]=obsvf(A,B,C,TOL)说明:K是可观的状态个数,TOL为误差,这里的变换是这样令的:x=T-1xbar,所以有Abar=TAT-1,Bbar=TB,Cbar=CT-1。显然这与教材中的令法是不同的,且T的选取方式也不同,得到的分解形式也不同,要加以区别。这里的能观性分解形式为(,,)ooooABC:12ˆˆˆ0oooAAAA,ˆˆoooBBB,ˆ0ooCCc.按能控、能观性分解----Kalman分解Kalman分解是先按能控性进行分解,然后对两部分状态再按能观性进行分解,最后得到能控能观部分、能控不能观部分、不能控能观部分、不能控不能观部分。在Matlab中没有提供对应的函数对系统进行直接的Kalman分解,这里我们给出一个函数实现分解:function[Gk,T,K]=kalmdec(G)G=ss(G);A=G.a;B=G.b;C=G.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]=obsv(Ac(ic,ic),Bc(ic),Cc(ic));ifncninc=1:n-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)];Ak=T*A*inv(T);Bk=T*B;Ck=C*inv(T);Gk=ss(Ak,Bk,Ck,G.d);此函数分解的形式与教材中的是顺序不一样(变换的令法也不一样):这里是不能控不能观、不能控能观、能控不能观、能控能观。这一点要注意。4、定常线性系统的标准型(转换限于SISO系统)(1)Jordan标准型化成Jordan标准形是一种并联分解的策略,即将传递函数展开成部分分式和的形式。这种分解的原理在课堂上已讲的很清楚,请复习相关内容。这里就如何用Matlab求取此标准型做说明。a.互异根的情况下,代码可以采用如下的形式,出可以有采用Jordan指令:num=[…];den=[…];G=tf[num,den];[r,p,k]=residue(num,den);A=diag(p);B=ones(length(r),1);C=r’;%为了得到更准确的结果,可以采用C=(rat(r))’得到有理分式的形式D=k;Gss=SS(A,B,C,D)b.有重根的情况我们直接可以采用Jordan指令。num=[…];den=[…];Gtf=tf(num,den)Gs=ss(G)[VJ]=jordan(Gs.a)%V是特征向量,由特征向量组成非奇异变换矩阵,x=Tz,T=VGss=ss2ss(Gs,inv(V))%Jordan型系统(2)能控标准型-限于SISO系统若系统能控,则可转换成能控标准I型和II型。转换成能控标准II型代码:A=[…];B=[…];C=[…];D=[…];Gs=ss(A,B,C,D);T=ctrb(Gs.a,Gs.b)%x=Tz,T=[B,AB,A2B,…,An-1B],能控标准II型Abar=inv(T)*A*T;Bar=inv(T)*B;Cbar=C*T,Dar=D;Gss=ss(Abar,Bbar,Cbar,Dbar)转换成能控标准I型代码:A=[…];B=[…];C=[…];D=[…];Gs=ss(A,B,C,D);Tt=ctrb(Gs.a,Gs.b);Ttt=fliplr(Tt);cp=poly(Gs.a);n=length(Gs.a);Tea=eye(n)fori=2:nforj=1:(n-1)ifijTea(i,j)=cp(i-(j-1));endendendT=Ttt*Tea;Abar=inv(T)*A*T;Bar=inv(T)*B;Cbar=C*T,Dar=D;Gss=ss(Abar,Bbar,Cbar,Dbar)(3)能观标准型-限于SISO系统若系统能观,则可转换成能观标准I型和II型。转换成能观标准I型代码:A=[…];B=[…];C=[…];D=[…];Gs=ss(A,B,C,D);Tinv=obsv(Gs.a,Gs.b);T=inv(Tinv);Abar=inv(T)*A*T;Bar=inv(T)*B;Cbar=C*T,Dar=D;Gss=ss(Abar,Bbar,Cbar,Dbar)转换成能观标准II型代码A=[…];B=[…];C=[…];D=[…];Gs=ss(A,B,C,D);Tt=obsv(Gs.a,Gs.c);Ttt==flipud(Tt);cp=poly(Gs.a);n=length(Gs.a);Tea=eye(n)fori=2:nforj=1:(n-1)ifijTea(i,j)=cp(i-(j-1));endendendTea=Tea’;T=Tea*Ttt;Abar=inv(T)*A*T;Bar=inv(T)*B;Cbar=C*T,Dar=D;Gss=ss(Abar,Bbar,Cbar,Dbar)实验内容:1、已知线性系统60.6250.7518000020010.250.0625xxuyxu(1)判断其状态可控性、可观性和传递函数的关系,并加以说明分析。(2)对系统分别按能控性分解、能观性分解以及能控能观性分解。2、在Matlab中建立并运行如下的.m代码,回答下面的问题。num=[123];den=conv([1625],[11235]);G=tf(num,den)Gs=ss(G)[VJ]=jordan(Gs.a)%求特征向量和Gs.a的Jordan标准型Gss=ss2ss(Gs,inv(V))%Jordan型系统Gsm=canon(Gs,'model')%模态型系统Gsf=canon(Gs,'companion')%能控标准II型系统(1)给出无分号行的运行结果,并比较几个状态方程。(2)在什么情况下,cannon得到的是对角型系统?请举例说明。(3)将原理中给出的能控标准与能观标准型转换代码写成子函数的形式,并通过调用你所编写的子函数将.m文件中给出的模型变换成能控标准I、II型和能观标准I、II型,并从结果说明能控与能观标准型间关系。要求上述工作的在一个MATLAB程序.m文件中完成。并给出实验结果和相关说明。实验报告要求简要的说明实验原理(少于100字);简明扼要的总结实验内容(少于100字);编制.mdl和.m文件,并给出运行结果。报告格式请按实验报告模板编写。1、(1)functionstr=pdctrb(A,B)A=[-6-0.6250.75;800;020];B=[1;0;0];Qc=
本文标题:线性系统结构分析与分解及标准型
链接地址:https://www.777doc.com/doc-2057269 .html