Matlab问题能控能观_第1页
Matlab问题能控能观_第2页
Matlab问题能控能观_第3页
Matlab问题能控能观_第4页
Matlab问题能控能观_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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的如下系统的状态能控性。状态能控性判定(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);%建立状态空间模型%调用函数判定状态能控性状态能控性判定(4/10)Matlab程序m4-1执行结果如下。表明所判定的系统状态不能控。functionJudge_contr(sys)Qc=ctrb(sys);n=size(sys.a);ifrank(Qc)==n(1)

disp('Thesystemiscontrolled')else

disp('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[Qc

Gn]因此判定线性定常离散系统状态能控性的代数判据也需计算能控性矩阵Qc=[HGH…Gn-1H]与连续系统类似,基于能控性矩阵函数ctrb()可以判定线性定常离散系统状态能控性。状态能控性判定(8/10)状态能控性判定(9/10)Matlab问题4-2试在Matlab中判定例4-12的如下系统的状态能控性。Matlab程序m4-2如下。G=[100;02-2;-110];H=[1;2;1];n=size(G,1);Qc=ctrb(G,H);ifrank(Qc)==rank([Qc

G^n])

disp('Thesystemiscontrolled')else

disp('Thesystemisnotcontrolled')end%求系统矩阵的行数%计算系统的能控性矩阵%判定能控性矩阵Qc的秩是否等于[QcG^n]的秩,即离散系统是否能控状态能控性判定(10/10)Matlab程序m4-2执行结果如下。Thesystemisnotcontrolled状态能观性判定(1/5)2.状态能观性判定

无论对连续还是离散的线性定常系统,采用代数判据判定状态能观性需要计算定义的能观性矩阵并要求能观性矩阵Qo的秩等于状态空间维数。Matlab提供的函数obsv()可根据给定的系统模型计算能观性矩阵。状态能观性判定(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的如下系统的状态能观性。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执行结果如下。Thesystemisobservability

functionJudge_obsv(sys)Qo=obsv(sys);n=size(sys.a);ifrank(Qo)==n(1)

disp('Thesystemisobservability')else

disp('Thesystemisnotobservability')end%函数Judge_obsv()定义%计算系统的能观性矩阵%求系统矩阵的各维的大小%判定能观性矩阵的秩是否等于状态变量的个数,即是否能观状态能观性判定(5/5)其中函数Judge_obsv()的源程序为Matlab程序m4-3执行结果如下。表明所判定的系统状态能观。Thesystemisobservability

functionJudge_obsv(sys)Qo=obsv(sys);n=size(sys.a);ifrank(Qo)==n(1)

disp('Thesystemisobservability')else

disp('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为变换矩阵,系统进行的状态变换为能控性分解函数ctrbf()(2/5)经函数ctrbf()能控性分解后,系统的状态空间模型为Matlab问题4-4试在Matlab中对例4-15的系统进行能控性分解。能控性分解函数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-1例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()的主要调用格式为[A_o,B_o,C_o,To]=obsvf(A,B,C)[A_o,B_o,C_o,To]=obsvf(A,B,C,tol)其中输入格式与能控性分解函数ctrbf()一致;输出的A_o,B_o和C_o为能观性分解之后的状态空间模型的各矩阵;To为变换矩阵,系统进行的状态变换为能观性分解函数obsvf()(2/5)经函数obsvf()能观性分解后,系统的状态空间模型为与能控性分解函数ctrbf()的使用方法完全一致,读者可非常方便地使用该函数进行系统的能观性分解(这里不再赘述)。同样地,由于变换矩阵不唯一以及状态变量向量中变量排列的次序不同,所得到的能观性分解模型也不唯一。函数obsv()得到的能观性分解状态空间模型与4.5.2节的能观性分解定理4-21的有所不同,但本质是一致的。能观性分解函数obsvf()(3/5)与4.5.2节内容相对应,编著者开发了一个能观性分解函数obsvf2()可用于求取定理4-21的能观性分解,其主要调用格式为[A_o,B_o,C_o,To,no]=obsvf2(A,B,C)[A_o,B_o,C_o,To,no]=obsvf2(A,B,C,tol)其中输出no为能观子系统的维数,其他输入输出与Matlab函数obsvf()一致。能观性分解函数obsvf()(4/5)Matlab问题4-5试在Matlab中对例4-16的系统进行能观性分解。Matlab程序m4-5如下。A=[00-1;10-3;01-3];B=[1;1;0];C=[01-2];[Ao,Bo,Co,To]=obsvf2(A,B,C)能观性分解函数obsvf()(5/5)Matlab程序m4-5执行结果如下。Ao=01.00000-1.0000-2.00000.000010.00005.0000-1.0000Bo=1-15Co=100To=01-21-23500例4-16计算结果(能观部分)结果完全一致能控能观分解函数ctrb_obsvf()(1/4)3.能控能观分解函数ctrb_obsvf()Matlab没有提供直接进行系统能控能观分解的函数,编著者根据4.5.3介绍的能控能观分解方法,开发了直接进行能控能观分解的函数ctrb_obsvf()。能控能观分解函数ctrb_obsvf()的主要调用格式为[Aco,Bco,Cco,Tco,nco]=ctrb_obsvf(A,B,C)[Aco,Bco,Cco,Tco,nco]=ctrb_obsvf(A,B,C,tol)其中输入格式与能控性分解函数ctrbf()和能观性分解函数obsvf()一致;输出的Aco,Bco和Cco为能控能观分解之后的状态空间模型的各矩阵;能控能观分解函数ctrb_obsvf()(2/4)Tco为变换矩阵,系统进行的状态变换为nco为分解后4个子系统的维数组成的数组。在这里,变换后状态变量的排列与4.5.3节定理4-22一致,为能控但不能观、能控又能观、不能控也不能观以及不能控但能观,nco中各元素即为按照状态变量排列顺序的4个子系统的维数。能控能观分解函数ctrb_obsvf()(3/4)Matlab问题4-6试在Matlab中对例4-17的如下系统进行能控能观分解。Matlab程序m4-6如下。A=[00-1;10-3;01-3];B=[1;1;0];C=[01-2];[Aco,Bco,Cco,Tco]=ctrb_obsvf(A,B,C)能控能观分解函数ctrb_obsvf()(4/4)Matlab程序m4-6执行结果如下。该系统经能控能观分解后,得到3个1维子系统,分别为能控但不能观、能控又能观、不能控但能观。Aco=-11-20-1100-1Bco=010Cco=01-2例4-17计算结果变量排列顺序不同,结果完全一致能控规范形和能观规范形(1/2)4.8.3能控规范形和能观规范形

4.6节介绍的线性定常系统的能控规范形和能观规范形,使得系统分析、设计与综合问题得以简化,更加有助于理解和问题求解。建立系统的能控规范形和能观规范形是系统分析、设计与综合问题中的重要问题。Matlab中提供的建立系统规范形的函数canon()只能用于建立对角线规范形和SISO系统的能控规范I形,没有提供建立其他规范形的可直接调用的函数。编著者根据建立规范形的方法,开发了相应的建立能控规范形的函数ctr_canon()和建立能观规范形的函数obsv_canon()。能控规范形和能观规范形(2/2)下面就分别介绍建立能控规范形能观规范形的编著者设计的Matlab函数。能控规范形(1/4)1.能控规范形能控规范形的函数ctr_canon()可以处理SISO和MIMO系统的能控规范形的建立问题,包括4.5.1和4.5.3节介绍的能控规范I和II形、旺纳姆能控规范II形和龙伯格能控规范II形等4种常用的能控规范形。函数ctr_canon的主要调用格式为:[sys_ctr,Tc]=ctr_canon(sys,'type')其中,sys为需变换的系统的状态空间模型;sys_ctr为变换所得的状态空间模型;Tc为对系统sys所作的变换的变换矩阵;‘type’为所求的能控规范形的类型。能控规范形(2/4)对应于能控规范I和II形、旺纳姆能控规范II形和龙伯格能控规范II形4种模型,符号串‘type’分别为'1st'、'2nd'、'Wonham'和'Luenb'。能控规范形(3/4)Matlab问题4-7试在Matlab中求解如下SISO系统的能控规范I形和II形。Matlab程序m4-7如下。A=[10;-12];B=[-1;1];C=[01];D=0;sys=ss(A,B,C,D);sys_ctr=ctr_canon(sys,'1st')sys_ctr=ctr_canon(sys,'2nd')能控规范形(4/4)Matlab程序m4-7执行结果如下。能控规范I形a=x1x2x10-2x213b=u1x11x20c=x1x2y113d=u1y10能控规范II形a=x1x2x101x2-23b=u1x10x21c=x1x2y101d=u1y10例4-19计算结果结果完全一致能控规范形(5/4)Matlab问题4-8试在Matlab中求解例4-21的如下MIMO系统的旺纳姆能控规范II形。Matlab程序m4-8如下。A=[-1-4-2;06-1;17-1];B=[20;00;11];C=[];D=[];sys=ss(A,B,C,D);sys_ctr=ctr_canon(sys,'Wonham')能控规范形(6/4)Matlab程序m4-8执行结果如下。a=x1x2x3x1010x2001x31524b=u1u2x10-0.0278x200.0833x310.75例4-21计算结果结果完全一致能观规范形(1/4)2.能观规范形能观规范形的函数obsv_canon()可以处理SISO和MIMO系统的能观规范形的建立问题,包括4.5.2节介绍的能观规范I形和能观规范II形2种常用的能观规范形。函数obsv_canon()的主要调用格式为:[sys_obsv,To]=obsv_canon(sys,'type')其中sys为需变换的系统的状态空间模型;sys_obsv为变换所得的状态空间模型;To为对系统sys所作的变换的变换矩阵,‘type’为所求的能观规范形的类型。能观规范形(2/4)对应于能观规范I形和能观规范II形2种模型,符号串‘type’分别为'1st'和'2nd'。能观规范形(3/4)Matlab问题4-9试在Matlab中求解如下SISO系统的能观规范I形和II形。Matlab程序m4-9如下。A=[1-1;02];B=[];C=[-1-1/2];D=[];sys=ss(A,B,C,D);sys_obsv=obsv_canon(sys,'1st')sys_obsv=obsv_canon(sys,'2nd')能观规范形(4/4)Matlab程序m4-9执行结果如下。能观规范I形a=x1x2x101x2-23b=[]c=x1x2y110d=[]能观规范II形a=x1x2x10-2x213b=[]c=x1x2y101d=[]例4-20计算结果结果完全一致系统实现(1/2)4.8.4系统实现4.6节介绍的系统实现问题,讨论的是由传递函数阵如何求系统的状态空间模型实现以及最小实现问题,所实现的状态空间模型主要包括能控规范I/II形、能观规范I/II形。Matlab中提供的建立状态空间模型的系统实现函数ss()和canon()只能用于建立对角线规范形和SISO系统的能控规范I形,没有提供建立其他规范形的可直接调用的函数。编著者根据系统实现的方法,开发了相应的建立SISO与MIMO系统的能控规范形的函数ctr_canon和建立能观规范形的函数obsv_canon。系统实现(2/2)下面就分别介绍建立能控规范形能观规范形的编著者设计的Matlab函数。能控规范形(1/3)1.能控规范形由传递函数阵求能控规范形实现的函数ctr_canon与4.8.3节介绍的能控规范形的函数ctr_canon()为一个函数,但输入的格式不同。通过该函数,用户可以方便地求解SISO和MIMO系统的传递函数矩阵的能控规范I/II形2种实现。应用于系统实现问题时,函数ctr_canon的主要调用格式为[sys_ctr]=ctr_canon(sys,'type')其中sys为系统传递函数阵模型;sys_ctr为所求得的能控规范形实现,‘type’为所求的能控规范形的类型。对应于能控规范I/II形2种模型,符号串'type'分别为'1st'和'2nd'。能控规范形(2/3)Matlab问题4-10试在Matlab中求解例4-23的如下系统的能控规范I形实现。Matlab程序m4-10如下。num=[2142617];den=[16116];sys=tf(num,den);sys_ctr=ctr_canon(sys,'1st')能控规范形(3/3)Matlab程序m4-10执行结果如下。a=x1x2x3x100-6x210-11x301-6b=u1x11x20x30c=x1x2x3y12-831d=u1y12例4-23计算结果结果完全一致能观规范形(1/3)2.能观规范形由传递函数阵求系统能观规范形实现的函数obsv_canon与4.8.3节介绍的建立能观规范形的函数obsv_canon()为一个函数,但输入的格式不同。通过该函数,用户可以方便地求解SISO和MIMO系统的传递函数矩阵的能观规范I/II形2种实现。应用于系统实现问题时,函数obsv_canon的主要调用格式为[sys_obsv]=obsv_canon(sys,'type')其中,sys为系统传递函数阵模型,sys_obsv为所求得的能观规范形实现,‘type’为所求的能观规范形的类型。能观规范形(2/3)对应于能观规范I/II形2种模型,符号串'type'分别为'1st'和'2nd'。Matlab问题4-11试在Matlab中求解Matlab问题4-10的系统的能观规范II形。Matlab程序m4-11如下。num=[2142617];den=[16116];sys=tf(num,den);sys_obsv=obsv_canon(sys,'2nd')能观规范形(3/3)Matlab程序m4-11执行结果如下。a=x1x2x3x100-6x210-11x301-6b=u1x15x24x32c=x1x2x3y1001d=u1y124.7.2节计算结果结果完全一致最小实现(1/1)3.最小实现系统的状态空间最小实现是指传递函数阵实现中维数最小的实现,其最小实现的充分必要条件为状态能控且能观。最小实现代表了系统最简单、最经济的结构,它给系统分析与综合带来低成本、高效率。系统实现主要有求状态空间模型的最小实现和传递函数阵的最小实现。下面分别介绍如何运用Matlab求解这2个问题。状态空间模型的最小实现(1/5)(1)状态空间模型的最小实现求状态空间模型的最小实现的方法是对其进行能控能观分解,所求得的能控能观子系统即为其最小实现。Matlab提供了可以直接对系统的状态空间模型求最小实现的函数minreal()。函数minreal()的主要调用格式为[min_sys,T]=minreal(sys)其中输入sys为给定的状态空间模型;min_sys为求得的最小实现状态空间模型;T为求最小实现进行的模型变换的变换矩阵。MIMO传递函数阵的最小实现(2/5)函数min_tf2ss()的源程序如下:functionmin_sys=min_tf2ss(sys_tf)r=size(sys_tf.num,2);m=size(sys_tf.num,1);ifr<=msys=ctr_canon(sys_tf,'2nd');

[A,B,C,T,n]=obsvf2(sys.a,sys.b,sys.c);elsesys=obsv_canon(sys_tf,'2nd');[A,B,C,T,n]=ctrbf2(sys.a,sys.b,sys.c);endmin_sys=ss(A(1:n,1:n),B(1:n,:),C(:,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论