线性系统的能控性和能观性 Matlab问题
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Tc为变换矩阵,系统进行的状态变换为
x Tc x
能控性分解函数ctrbf()(2/5)
经函数ctrbf()能控性分解后,系统的状态空间模型为
Anc A_ c A21 0 0 B _ c C _ c [Cnc Ac Bc Cc ]
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()定义 % 计算系统的能观性矩阵 % 求系统矩阵的各维的大小 % 判定能观性矩阵的秩是否等于 状态变量的个数,即是否能观
Matlab程序m4-3执行结果如下。
The system is observability
状态能观性判定(5/5)
其中函数Judge_obsv()的源程序为
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()定义 % 计算系统的能观性矩阵 % 求系统矩阵的各维的大小 % 判定能观性矩阵的秩是否等于 状态变量的个数,即是否能观
状态能控性与能观性判定 (2/2)
用户也可以根据能控性、能观性的各种判据,自己编制程 序和函数来判定这两个系统的结构性质。 下面分别介绍 状态能控性判定 状态能观性判定
状态能控性判定 (1/10)
1. 状态能控性判定
无论是连续还是离散的线性定常系统,采用代数判据判定状态 能控性需要计算能控性矩阵。 Matlab提供的函数ctrb()可根据给定的系统模型,计算能控 性矩阵 Qc=[B AB … An-1B] 能控性矩阵函数ctrb()的主要调用格式为: Qc = ctrb(A,B)
哪些子空间状态完全能观,哪些完全不能观。 在控制系统设计与综合时,能更好地有针对性地进行设计 与综合。
线性系统的能控能观分解(2/2)
Matlab提供了用于 状态能控性分解的函数ctrbf()和
状态能观性分解的函数obsvf()。 基于这2个函数,用户可以通过逐步分解,求得系统的能控能观分 解。 为此,编著者设计了用于能控能观分解的Matlab函数 ctrb_obsvf()。
状态能控性判定(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],
能控性分解函数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为能控性分解之后的状态空间模型 的各矩阵;
Qc = ctrb(sys)
其中,第1种输入格式为直接给定系统矩阵 A和输入矩阵B, 第2种格式为给定状态空间模型sys。 来自百度文库 输出矩阵Qc为计算所得的能控性矩阵。
状态能控性判定 (2/10)
基于能控性矩阵函数ctrb()及能控性矩阵Qc的秩的计算,就可 以进行连续线性定常系统的状态能控性的代数判据判定。 Matlab问题4-1 试在Matlab中判定例4-2的如下系统的状态能 控性。
而[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的如下系统的状态 能控性。
1 0 0 1 x (k ) 2 u(k ) x (k 1) 0 2 2 1 1 0 1
Matlab程序m4-2如下。
% 定义函数Judge_contr() % 计算系统的能控性矩阵 % 求系统矩阵的各维的大小 % 判定能控性矩阵的秩是否等于状态 变量的个数,即是否能控
Matlab程序m4-1执行结果如下。
The system is not controlled
表明所判定的系统状态不能控。
状态能控性判定(5/10)
% 求系统矩阵的行数 % 计算系统的能控性矩阵 % 判定能控性矩阵Qc的秩是否等 于[Qc G^n]的秩,即离散系统是 否能控
状态能控性判定(10/10)
Matlab程序m4-2执行结果如下。
The system is not controlled
状态能观性判定 (1/5)
2. 状态能观性判定
Ch.4 线性系统的能控性 和能观性
目录(1/1)
目 录
概述 4.1 线性连续系统的能控性 4.2 线性连续系统的能观性 4.3 线性定常离散系统的能控性和能观性 4.4 对偶性原理 4.5 线性系统的结构性分解和零极点相消 4.6 能控规范形和能观规范形 4.7 实现问题 4.8 Matlab问题 本章小结
状态能观性判定(3/5)
Matlab问题4-3 试在Matlab中判定例4-13的如下系统的状态 能观性。
2 0 3 x (k ) x (k 1) 1 2 0 0 1 2 0 0 1 y (k ) x (k ) 1 0 0
虽然Matlab求矩阵秩采用了数值特性良好的计算奇 异值的方法,但考虑到计算机浮点计算过程产生的数 值计算误差可能使得判定秩有偏差,第2种调用格式 可以给定判定矩阵奇异值的容许误差, 而对第1种格式系统将自动设定一个容许误差tol。 2) 计算数组各维大小的函数size()。 函数size()在Matlab编程中非常有用,它可以在各个调 用函数中随时求取所处理的数组的各维数的大小,而 没有必要将数组的维数大小作为变量(参量)参与函 数调用,所设计的程序简洁、易读易懂。
acbccctcctrbfabcac100211413bc001cc11tc0101000011121001001431111??????????????????????????x?xuyx11204211420???????????????????????x??x?x?u例415计算结果能控部分结果完全等价ctrbf45?由于变换矩阵不唯一且状态变量向量中变量排列的次序不同所得到的能控性分解模型也不唯一
1 3 2 2 1 0 2 0 x 1 1 u x 0 1 3 - 1 - 1
% 建立状态空间模型 % 调用函数判定状态能控性
Matlab程序m4-1中的函数Judge_contr()通过调用能控性矩阵 函数ctrb()和计算矩阵秩的函数rank(),完成能控性代数判据 的判定。
Matlab问题(1/1)
4.8 Matlab问题
本章涉及的计算问题主要有
状态能控性/能观性判定、 系统能控能观分解、
能控/能观规范形变换以及
能控/能观规范形实现。 下面分别介绍基于Matlab的上述问题的程序编制和计算方法。
状态能控性与能观性判定 (1/2)
4.8.1 状态能控性与能观性判定
状态能观性判定 (2/5)
能观性矩阵函数obsv()的主要调用格式为 Qo = obsv(A,C)
Qo = obsv(sys) 其中第1种调用格式为直接输入系统矩阵A和输出矩阵C,第2种 格式为输入状态空间模型sys; 输出矩阵Qo为计算所得的能观性矩阵。
基于能观性矩阵函数obsv()及能观性矩阵Qo秩的计算,就可以 进行连续和离散线性定常系统的状态能观性的代数判据判定。
Matlab程序m4-3执行结果如下。
The system is observability
表明所判定的系统状态能观。
线性系统的能控能观分解(1/2)
4.8.2 线性系统的能控能观分解
4.5节介绍的线性定常系统的能控能观分解,让我们清楚地了 解动态系统哪些哪些子空间(子系统)状态完全能控,哪些完全 不能控;
Matlab问题4-4 试在Matlab中对例4-15的系统进行能控性分 解。
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()的源程序为
无论对连续还是离散的线性定常系统,采用代数判据判定状态 能观性需要计算定义的能观性矩阵
C C CA CG 和 Q Qo o n 1 n 1 CA CG
并要求能观性矩阵Qo的秩等于状态空间维数。 Matlab提供的函数obsv()可根据给定的系统模型计算能观 性矩阵。
在上述程序和函数中,使用了2个Matlab基本矩阵函数rank()和 size(),其定义和使用方法如下 1) 计算矩阵秩的函数rank()。
求矩阵秩的函数rank()的调用格式为:
k = rank(A) k = rank(A,tol) 其中输入A为矩阵,输出k为矩阵A的秩。
状态能控性判定(6/10)
函数Judge_contr()的源程序为
状态能控性判定(4/10)
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
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 G^n]) disp('The system is controlled') else disp('The system is not controlled') end
状态能控性与能观性是线性系统的重要结构性质,描述了系统 的本质特征,是系统分析和设计的主要考量因素。 Matlab提供了用于状态能控性、能观性判定的 能控性矩阵函数ctrb()、 能观性矩阵函数obsv()和 能控性/能观性格拉姆矩阵函数gram(),
通过对这些函数计算所得的矩阵求秩就可以很方便地判定 系统的状态能控性、能观性。
1 3 2 2 1 0 2 0 x 1 1 u x 0 1 3 - 1 - 1
状态能控性判定(3/10)
Matlab程序m4-1如下。
A=[1 3 2; 0 2 0; 0 1 3]; B=[2 1; 1 1; -1 -1]; sys=ss(A,B,[],[]); Judge_contr(sys);