Ch.4 线性系统的能控性和能观性 Matlab问题(1/1) 4.8 Matlab问题 本章涉及的计算问题主要有 状态能控性/能观性判定、 系统能控能观分解、 能控/能观规范形变换以及 能控/能观规范形实现。 下面分别介绍基于Matlab的上述问题的程序编制和计算方法。 状态能控性与能观性判定 (1/2) 4.8.1 状态能控性与能观性判定 状态能控性与能观性是线性系统的重要结构性质,描述了系统的本质特征,是系统分析和设计的主要考量因素。 Matlab提供了用于状态能控性、能观性判定的 能控性矩阵函数ctrb()、 能观性矩阵函数obsv()和 能控性/能观性格拉姆矩阵函数gram(), 通过对这些函数计算所得的矩阵求秩就可以很方便地判定系统的状态能控性、能观性。 状态能控性与能观性判定 (2/2) 用户也可以根据能控性、能观性的各种判据,自己编制程序和函数来判定这两个系统的结构性质。 下面分别介绍 状态能控性判定 状态能观性判定 状态能控性判定 (1/10) 1. 状态能控性判定 无论是连续还是离散的线性定常系统,采用代数判据判定状态能控性需要计算能控性矩阵。 Matlab提供的函数ctrb()可根据给定的系统模型,计算能控性矩阵 Qc=[B AB … 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()的源程序为 状态能控性判定(4/10) Matlab程序m4-1执行结果如下。 表明所判定的系统状态不能控。 状态能控性判定(5/10) 在上述程序和函数中,使用了2个Matlab基本矩阵函数rank()和size(),其定义和使用方法如下 1) 计算矩阵秩的函数rank()。 求矩阵秩的函数rank()的调用格式为: k = rank(A) k = rank(A,tol) 其中输入A为矩阵,输出k为矩阵A的秩。 状态能控性判定(6/10) 虽然Matlab求矩阵秩采用了数值特性良好的计算奇异值的方法,但考虑到计算机浮点计算过程产生的数值计算误差可能使得判定秩有偏差,第2种调用格式可以给定判定矩阵奇异值的容许误差, 而对第1种格式系统将自动设定一个容许误差tol。 2) 计算数组各维大小的函数size()。 函数size()在Matlab编程中非常有用,它可以在各个调用函数中随时求取所处理的数组的各维数的大小,而没有必要将数组的维数大小作为变量(参量)参与函数调用,所设计的程序简洁、易读易懂。 状态能控性判定(7/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([1 2 3; 4 5 6])的输出为数组d=[2 3], 而[m,n] =size([1 2 3; 4 5 6])的输出则是m和n分别为2和3。 状态能控性判定(8/10) 由4.3.1节的定理4-12可知,线性定常离散系统?(G,H)状态能控的充分必要条件为 rank Qc=rank [Qc Gn] 因此判定线性定常离散系统状态能控性的代数判据也需计算能控性矩阵 Qc=[H GH … Gn-1H] 与连续系统类似,基于能控性矩阵函数ctrb()可以判定线性定常离散系统状态能控性。 状态能控性判定(9/10) Matlab问题4-2 试在Matlab中判定例4-12的如下系统的状态能控性。 状态能控性判定(10/10) Matlab程序m4-2执行结果如下。 状态能观性判定 (1/5) 2. 状态能观性判定 无论对连续还是离散的线性定常系统,采用代数判据判定状态能观性需要计算定义的能观性矩阵 并要求能观性矩阵Qo的秩等于状态空间维数。 Matlab提供的函数obsv()可根据给定的系统模型计算