
现代控制理论:4.8 Matlab问题.ppt
65页Ch.4 线性系统的能控性和能观性目录(1/1)目 录q 概述q 4.1 线性连续系统的能控性q 4.2 线性连续系统的能观性q 4.3 线性定常离散系统的能控性和能观性q 4.4 对偶性原理q 4.5 线性系统的结构性分解和零极点相消q 4.6 能控规范形和能观规范形q 4.7 实现问题q 4.8 Matlab问题q 本章小结Matlab问题(1/1)4.8 Matlab问题q 本章涉及的计算问题主要有 状态能控性/能观性判定、 系统能控能观分解、 能控/能观规范形变换以及 能控/能观规范形实现下面分别介绍基于Matlab的上述问题的程序编制和计算方法状态能控性与能观性判定 (1/2)4.8.1 状态能控性与能观性判定 q 状态能控性与能观性是线性系统的重要结构性质,描述了系统的本质特征,是系统分析和设计的主要考量因素 Matlab提供了用于状态能控性、能观性判定的能控性矩阵函数ctrb()、能观性矩阵函数obsv()和能控性/能观性格拉姆矩阵函数gram(),通过对这些函数计算所得的矩阵求秩就可以很方便地判定系统的状态能控性、能观性状态能控性与能观性判定 (2/2) 用户也可以根据能控性、能观性的各种判据,自己编制程序和函数来判定这两个系统的结构性质。
下面分别介绍状态能控性判定 状态能观性判定 状态能控性判定 (1/10)1. 状态能控性判定 q 无论是连续还是离散的线性定常系统,采用代数判据判定状态能控性需要计算能控性矩阵 Matlab提供的函数ctrb()可根据给定的系统模型,计算能控性矩阵Qc=B AB An-1B 能控性矩阵函数ctrb()的主要调用格式为:Qc = ctrb(A,B)Qc = ctrb(sys)其中,第1种输入格式为直接给定系统矩阵A和输入矩阵B,第2种格式为给定状态空间模型sys输出矩阵Qc为计算所得的能控性矩阵状态能控性判定 (2/10)q 基于能控性矩阵函数ctrb()及能控性矩阵Qc的秩的计算,就可以进行连续线性定常系统的状态能控性的代数判据判定 q Matlab问题4-1 试在Matlab中判定例4-2的如下系统的状态能控性 状态能控性判定(3/10) Matlab程序m4-1如下q Matlab程序m4-1中的函数Judge_contr()通过调用能控性矩阵函数ctrb()和计算矩阵秩的函数rank(),完成能控性代数判据的判定 函数Judge_contr()的源程序为A=1 3 2; 0 2 0; 0 1 3;B=2 1; 1 1; -1 -1;sys=ss(A,B,);Judge_contr(sys); % 建立状态空间模型% 调用函数判定状态能控性 状态能控性判定(4/10) Matlab程序m4-1执行结果如下。
表明所判定的系统状态不能控function Judge_contr(sys)Qc=ctrb(sys);n=size(sys.a);if rank(Qc)=n(1) disp(The system is controlled)else disp(The system is not controlled)end % 定义函数Judge_contr()% 计算系统的能控性矩阵% 求系统矩阵的各维的大小% 判定能控性矩阵的秩是否等于状态变量的个数,即是否能控 The system is not controlled q 在上述程序和函数中,使用了2个Matlab基本矩阵函数rank()和size(),其定义和使用方法如下1) 计算矩阵秩的函数rank()求矩阵秩的函数rank()的调用格式为:k = rank(A)k = rank(A,tol)其中输入A为矩阵,输出k为矩阵A的秩状态能控性判定(5/10)虽然Matlab求矩阵秩采用了数值特性良好的计算奇异值的方法,但考虑到计算机浮点计算过程产生的数值计算误差可能使得判定秩有偏差,第2种调用格式可以给定判定矩阵奇异值的容许误差,v而对第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维数组;vm为数组X的第dim维的大小;vd1,d2,d3,.,dn为数组X的各维的大小如,d=size(1 2 3; 4 5 6)的输出为数组d=2 3,v而m,n =size(1 2 3; 4 5 6)的输出则是m和n分别为2和3状态能控性判定(7/10)q 由4.3.1节的定理4-12可知,线性定常离散系统(G,H)状态能控的充分必要条件为rank Qc=rank Qc Gn 因此判定线性定常离散系统状态能控性的代数判据也需计算能控性矩阵Qc=H GH Gn-1H 与连续系统类似,基于能控性矩阵函数ctrb()可以判定线性定常离散系统状态能控性状态能控性判定(8/10)状态能控性判定(9/10)q Matlab问题4-2 试在Matlab中判定例4-12的如下系统的状态能控性。
Matlab程序m4-2如下G=1 0 0; 0 2 -2; -1 1 0; H=1; 2; 1;n=size(G,1);Qc=ctrb(G,H);if rank(Qc)=rank(Qc Gn) disp(The system is controlled)else disp(The system is not controlled)end % 求系统矩阵的行数% 计算系统的能控性矩阵% 判定能控性矩阵Qc的秩是否等于Qc Gn的秩,即离散系统是否能控 状态能控性判定(10/10) Matlab程序m4-2执行结果如下The system is not controlled 状态能观性判定 (1/5)2. 状态能观性判定 q 无论对连续还是离散的线性定常系统,采用代数判据判定状态能观性需要计算定义的能观性矩阵并要求能观性矩阵Qo的秩等于状态空间维数 Matlab提供的函数obsv()可根据给定的系统模型计算能观性矩阵状态能观性判定 (2/5)q 能观性矩阵函数obsv()的主要调用格式为Qo = obsv(A,C)Qo = obsv(sys)其中第1种调用格式为直接输入系统矩阵A和输出矩阵C,第2种格式为输入状态空间模型sys; 输出矩阵Qo为计算所得的能观性矩阵。
q 基于能观性矩阵函数obsv()及能观性矩阵Qo秩的计算,就可以进行连续和离散线性定常系统的状态能观性的代数判据判定 状态能观性判定(3/5)q Matlab问题4-3 试在Matlab中判定例4-13的如下系统的状态能观性 Matlab程序m4-3如下A=2 0 3; -1 -2 0; 0 1 2;C=1 0 0; 0 1 0;sys=ss(A,C,);Judge_obsv(sys); % 建立状态空间模型% 调用函数Judge_obsv()判定状态能观性 状态能观性判定(4/5) 其中函数Judge_obsv()的源程序为 Matlab程序m4-3执行结果如下The system is observability function Judge_obsv(sys)Qo=obsv(sys);n=size(sys.a);if rank(Qo)=n(1) disp(The system is observability)else disp(The system is not observability)end % 函数Judge_obsv()定义% 计算系统的能观性矩阵% 求系统矩阵的各维的大小% 判定能观性矩阵的秩是否等于状态变量的个数,即是否能观 状态能观性判定(5/5) 其中函数Judge_obsv()的源程序为 Matlab程序m4-3执行结果如下。
表明所判定的系统状态能观The system is observability function Judge_obsv(sys)Qo=obsv(sys);n=size(sys.a);if rank(Qo)=n(1) disp(The system is observability)else disp(The system is not observability)end % 函数Judge_obsv()定义% 计算系统的能观性矩阵% 求系统矩阵的各维的大小% 判定能观性矩阵的秩是否等于状态变量的个数,即是否能观 线性系统的能控能观分解(1/2)4.8.2 线性系统的能控能观分解q 4.5节介绍的线性定常系统的能控能观分解,让我们清楚地了解动态系统哪些哪些子空间(子系统)状态完全能控,哪些完全不能控; 哪些子空间状态完全能观,哪些完全不能观 在控制系统设计与综合时,能更好地有针对性地进行设计与综合线性系统的能控能观分解(2/2)q Matlab提供了用于 状态能控性分解的函数ctrbf()和 状态能观性分解的函数obsvf()基于这2个函数,用户可以通过逐步分解,求得系统的能控能观分解 为此,编著者设计了用于能控能观分解的Matlab函数ctrb_obsvf()。
能控性分解函数ctrbf()(1/5)1. 能控性分解函数ctrbf()q 能控性分解函数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)q 经函数ctrbf()能控性分解后,系统的状态空间模型为q Matlab问题4-4 试在Matlab中对例4-15的系统进行能控性分解 能控性分解函数ctrbf()(3/5) Matlab程序m4-4如下 Matlab程序m4-4执行结果如下A=1 2 -1; 0 1 0; 1 -4 3;B=0; 0; 1; C=1 -1 1;Ac,Bc,Cc,Tc = ctrbf(A,B,C) Ac = 1 0 0 -2 1 -1 4 1 3Bc = 0 0 -1Cc = -1 -1 -1Tc = 0 1 0 -1 0 0 0 0 -1 例4-15计算结果(能控部分)结果完全等价能控性分解函数ctrbf()(4/5)q 由于变换矩阵不唯一且状态变量向量中变量排列的次序不同,所得到的能控性分解模型也不唯一。
函数ctrbf()的能控性分解变换矩阵和状态变量的排列与4.5.1节的能控性分解定理4-20的有所不同,因此得到的能控性分解后的状态空间模型也有所不同,但本质是一致的能控性分解函数ctrbf()(5/5)q 与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()q 能观性分解函数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为能观性分解之。












