4.8 Matlab问题能控能观

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Ch.4线性系统的能控性和能观性Matlab问题(1/1)4.8Matlab问题本章涉及的计算问题主要有状态能控性/能观性判定、系统能控能观分解、能控/能观规范形变换以及能控/能观规范形实现。下面分别介绍基于Matlab的上述问题的程序编制和计算方法。状态能控性与能观性判定(1/2)4.8.1状态能控性与能观性判定状态能控性与能观性是线性系统的重要结构性质,描述了系统的本质特征,是系统分析和设计的主要考量因素。Matlab提供了用于状态能控性、能观性判定的能控性矩阵函数ctrb()、能观性矩阵函数obsv()和能控性/能观性格拉姆矩阵函数gram(),通过对这些函数计算所得的矩阵求秩就可以很方便地判定系统的状态能控性、能观性。状态能控性与能观性判定(2/2)用户也可以根据能控性、能观性的各种判据,自己编制程序和函数来判定这两个系统的结构性质。下面分别介绍状态能控性判定状态能观性判定状态能控性判定(1/10)1.状态能控性判定无论是连续还是离散的线性定常系统,采用代数判据判定状态能控性需要计算能控性矩阵。Matlab提供的函数ctrb()可根据给定的系统模型,计算能控性矩阵Qc=[BAB…An-1B]能控性矩阵函数ctrb()的主要调用格式为:Qc=ctrb(A,B)Qc=ctrb(sys)其中,第1种输入格式为直接给定系统矩阵A和输入矩阵B,第2种格式为给定状态空间模型sys。输出矩阵Qc为计算所得的能控性矩阵。状态能控性判定(2/10)基于能控性矩阵函数ctrb()及能控性矩阵Qc的秩的计算,就可以进行连续线性定常系统的状态能控性的代数判据判定。Matlab问题4-1试在Matlab中判定例4-2的如下系统的状态能控性。uxx1-1-1112310020231状态能控性判定(3/10)Matlab程序m4-1如下。Matlab程序m4-1中的函数Judge_contr()通过调用能控性矩阵函数ctrb()和计算矩阵秩的函数rank(),完成能控性代数判据的判定。函数Judge_contr()的源程序为A=[132;020;013];B=[21;11;-1-1];sys=ss(A,B,[],[]);Judge_contr(sys);%建立状态空间模型%调用函数判定状态能控性uxx1-1-1112310020231状态能控性判定(4/10)Matlab程序m4-1执行结果如下。表明所判定的系统状态不能控。functionJudge_contr(sys)Qc=ctrb(sys);n=size(sys.a);ifrank(Qc)==n(1)disp('Thesystemiscontrolled')elsedisp('Thesystemisnotcontrolled')end%定义函数Judge_contr()%计算系统的能控性矩阵%求系统矩阵的各维的大小%判定能控性矩阵的秩是否等于状态变量的个数,即是否能控Thesystemisnotcontrolled在上述程序和函数中,使用了2个Matlab基本矩阵函数rank()和size(),其定义和使用方法如下1)计算矩阵秩的函数rank()。求矩阵秩的函数rank()的调用格式为:k=rank(A)k=rank(A,tol)其中输入A为矩阵,输出k为矩阵A的秩。状态能控性判定(5/10)虽然Matlab求矩阵秩采用了数值特性良好的计算奇异值的方法,但考虑到计算机浮点计算过程产生的数值计算误差可能使得判定秩有偏差,第2种调用格式可以给定判定矩阵奇异值的容许误差,而对第1种格式系统将自动设定一个容许误差tol。2)计算数组各维大小的函数size()。函数size()在Matlab编程中非常有用,它可以在各个调用函数中随时求取所处理的数组的各维数的大小,而没有必要将数组的维数大小作为变量(参量)参与函数调用,所设计的程序简洁、易读易懂。状态能控性判定(6/10)函数size()的主要调用格式为:d=size(X)m=size(X,dim)[d1,d2,d3,...,dn]=size(X)其中,输出d为数组X的各维的大小组成的1维数组;m为数组X的第dim维的大小;d1,d2,d3,...,dn为数组X的各维的大小。如,d=size([123;456])的输出为数组d=[23],而[m,n]=size([123;456])的输出则是m和n分别为2和3。状态能控性判定(7/10)由4.3.1节的定理4-12可知,线性定常离散系统(G,H)状态能控的充分必要条件为rankQc=rank[QcGn]因此判定线性定常离散系统状态能控性的代数判据也需计算能控性矩阵Qc=[HGH…Gn-1H]与连续系统类似,基于能控性矩阵函数ctrb()可以判定线性定常离散系统状态能控性。状态能控性判定(8/10)状态能控性判定(9/10)Matlab问题4-2试在Matlab中判定例4-12的如下系统的状态能控性。1001(1)022()2()1101kkkxxuMatlab程序m4-2如下。G=[100;02-2;-110];H=[1;2;1];n=size(G,1);Qc=ctrb(G,H);ifrank(Qc)==rank([QcG^n])disp('Thesystemiscontrolled')elsedisp('Thesystemisnotcontrolled')end%求系统矩阵的行数%计算系统的能控性矩阵%判定能控性矩阵Qc的秩是否等于[QcG^n]的秩,即离散系统是否能控状态能控性判定(10/10)Matlab程序m4-2执行结果如下。Thesystemisnotcontrolled状态能观性判定(1/5)2.状态能观性判定无论对连续还是离散的线性定常系统,采用代数判据判定状态能观性需要计算定义的能观性矩阵并要求能观性矩阵Qo的秩等于状态空间维数。Matlab提供的函数obsv()可根据给定的系统模型计算能观性矩阵。11oonnCCCACGQQCACG和状态能观性判定(2/5)能观性矩阵函数obsv()的主要调用格式为Qo=obsv(A,C)Qo=obsv(sys)其中第1种调用格式为直接输入系统矩阵A和输出矩阵C,第2种格式为输入状态空间模型sys;输出矩阵Qo为计算所得的能观性矩阵。基于能观性矩阵函数obsv()及能观性矩阵Qo秩的计算,就可以进行连续和离散线性定常系统的状态能观性的代数判据判定。状态能观性判定(3/5)Matlab问题4-3试在Matlab中判定例4-13的如下系统的状态能观性。203(1)120()012100()()010kkkkxxyxMatlab程序m4-3如下。A=[203;-1-20;012];C=[100;010];sys=ss(A,[],C,[]);Judge_obsv(sys);%建立状态空间模型%调用函数Judge_obsv()判定状态能观性状态能观性判定(4/5)其中函数Judge_obsv()的源程序为Matlab程序m4-3执行结果如下。ThesystemisobservabilityfunctionJudge_obsv(sys)Qo=obsv(sys);n=size(sys.a);ifrank(Qo)==n(1)disp('Thesystemisobservability')elsedisp('Thesystemisnotobservability')end%函数Judge_obsv()定义%计算系统的能观性矩阵%求系统矩阵的各维的大小%判定能观性矩阵的秩是否等于状态变量的个数,即是否能观状态能观性判定(5/5)其中函数Judge_obsv()的源程序为Matlab程序m4-3执行结果如下。表明所判定的系统状态能观。ThesystemisobservabilityfunctionJudge_obsv(sys)Qo=obsv(sys);n=size(sys.a);ifrank(Qo)==n(1)disp('Thesystemisobservability')elsedisp('Thesystemisnotobservability')end%函数Judge_obsv()定义%计算系统的能观性矩阵%求系统矩阵的各维的大小%判定能观性矩阵的秩是否等于状态变量的个数,即是否能观线性系统的能控能观分解(1/2)4.8.2线性系统的能控能观分解4.5节介绍的线性定常系统的能控能观分解,让我们清楚地了解动态系统哪些哪些子空间(子系统)状态完全能控,哪些完全不能控;哪些子空间状态完全能观,哪些完全不能观。在控制系统设计与综合时,能更好地有针对性地进行设计与综合。线性系统的能控能观分解(2/2)Matlab提供了用于状态能控性分解的函数ctrbf()和状态能观性分解的函数obsvf()。基于这2个函数,用户可以通过逐步分解,求得系统的能控能观分解。为此,编著者设计了用于能控能观分解的Matlab函数ctrb_obsvf()。能控性分解函数ctrbf()(1/5)1.能控性分解函数ctrbf()能控性分解函数ctrbf()的主要调用格式为[A_c,B_c,C_c,Tc]=ctrbf(A,B,C)[A_c,B_c,C_c,Tc]=ctrbf(A,B,C,tol)其中,输入格式A,B和C为需按能控性分解的状态空间模型的各矩阵,tol为计算容许误差;输出的A_c,B_c和C_c为能控性分解之后的状态空间模型的各矩阵;Tc为变换矩阵,系统进行的状态变换为cTxx能控性分解函数ctrbf()(2/5)经函数ctrbf()能控性分解后,系统的状态空间模型为2100___[]ncnccccAAcBcCcCCAABMatlab问题4-4试在Matlab中对例4-15的系统进行能控性分解。121001001431[111]xxuyx能控性分解函数ctrbf()(3/5)Matlab程序m4-4如下。Matlab程序m4-4执行结果如下。A=[12-1;010;1-43];B=[0;0;1];C=[1-11];[Ac,Bc,Cc,Tc]=ctrbf(A,B,C)Ac=100-21-1413Bc=00-1Cc=-1-1-1Tc=010-10000-1121001001431[111]xxuyx11204211420xxxu例4-15计算结果(能控部分)结果完全等价能控性分解函数ctrbf()(4/5)由于变换矩阵不唯一且状态变量向量中变量排列的次序不同,所得到的能控性分解模型也不唯一。函数ctrbf()的能控性分解变换矩阵和状态变量的排列与4.5.1节的能控性分解定理4-20的有所不同,因此得到的能控性分解后的状态空间模型也有所不同,但本质是一致的。能控性分解函数ctrbf()(5/5)与4.5.1节内容相对应,编著者开发了一个能控性分解函数ctrbf2(),可用于求取定理4-20的能控分解,其主要调用格式为[A_c,B_c,C_c,Tc,nc]=ctrbf2(A,B,C)[A_c,B_c,C_c,Tc,nc]=ctrbf2(A,B,C,tol)其中,输出nc为能控子系统的维数,其他输入输出格式与Matlab函数ctrbf()一致。读者可以使用该函数方便地将系统按能控性进行结构分解,这里不再赘述。能观性分解函数obsvf()(1/5)2.能观性分解函数obsvf()能观性分解函数obsvf()的主要调用格式为[

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功