实验一 MATLAB 系统的传递函数和状态空间表达式的转换一、 实验目的1、学习多变量系统状态空间表达式的建立方法;2、通过编程、上机调试,掌握多变量系统状态空间表达式与传递函数之间相互转换的方法;3、掌握相应的MATLAB 函数。
二、 实验原理设系统的模型如式()所示:⎩⎨⎧+=+=DCx y Bu Ax x ' x ''R ∈ u ∈R ’’’ y ∈R P 其中A 为nXn 维系统矩阵、B 为nXm 维输入矩阵、C 为pXn 维输出矩阵,D 为直接传递函数。
系统的传递函数和状态空间表达式之间的关系如式()所示G(s)=num(s)/den(s)=C (SI-A)-1 B+D 式()中,num(s)表示传递函数的分子阵,其维数是pXm ,den(s)表示传递函数的按s 降幂排列的分母。
表示状态空间模型和传递函数的MATLAB函数如下:函数ss(state space的首字母)给出了状态空间模型,其一般形式是:sys=ss(A,B,C,D)函数tf(transfer function的首字母)给出了传递函数,其一般形式是:G=tf(num,den)其中num表示传递函数中分子多项式的系数向量(单输入单输出系统),den表示传递函数中分母多项式的系数向量。
函数tf2ss给出了传递函数的一个状态空间实现,其一般形式是: [A,B,C,D]=tf2ss(num,den)函数ss2tf给出了状态空间模型所描述系统的传递函数,其一般形式是:[num,den]=ss2tf(A,B,C,D,iu)其中对于多输入系统,必须确定iu的值。
例如,若系统有三个输入u1,u2,u3,则iu必须是1、2、或3,其中1表示u1,2表示u2,3表示u3。
该函数的结果是第iu个输入到所有输出的传递函数。
三.实验步骤及结果1、应用MATLAB 对下列系统编程,求系统的A 、B 、C 、D 阵,然后验证传递函数是相同的。
G(s)= ⎥⎦⎤⎢⎣⎡+++352^12s s s s 3+4s 2+5s+1程序和运行结果:num=[0 0 2 1;0 1 5 3];den=[1 4 5 1];[A,B,C,D]=tf2ss(num,den)A = -4 -5 -11 0 00 1 0B = 1C =0 2 11 5 3D =0A=[-4 -5 -1;1 0 0;0 1 0];A=[-4 -5 -1;1 0 0;0 1 0];B=[1;0;0];C=[0 2 1;1 5 3];D=[0;0];[num1,den1]=ss2tf(A,B,C,D,1)num1 = 0den1 =2、给定系统G(s)=6112^63^542^+++++s s s s s ,求系统的零极点增益模型和状态空间模型程序和运行结果:num=[0 1 4 5];den=[1 6 11 6];sys=tf(num,den)Transfer function:s^2 + 4 s + 5----------------------s^3 + 6 s^2 + 11 s + 6>> sys1=tf2zp(num,den)sys1 = +->> [A,B,C,D]=tf2ss(num,den)A =6 -11 -61 0 00 1 0B =1C =1 4 5D =0实验2 状态空间模型系统仿真及状态方程求解一、实验目的1、熟悉线性定常离散与连续系统的状态空间控制模型的输入方法;2、熟悉系统模型之间的转换功能;3、利用MATLAB对线性定常系统进行动态分析。
二、实验原理函数step(sys)给出了系统的单位阶跃响应曲线,其中的sys 表示贮存在计算机内的状态空间模型,它可以由函数sys=ss(A,B,C,D)得到。
函数impulse(sys)给出了系统的单位脉冲响应曲线。
函数[y,T,x]=Isim(sys,u,t,x0)给出了一个状态空间模型对任意输入的响应,x0是初始状态。
函数c2d将连续系统状态空间描述转化为离散系统状态空间形式,其一般形式为:[G,H]=c2d(A,B,T),其中的T是离散化模型的采样周期。
函数d2c将离散系统状态空间描述转化为连续系统状态空间描述,其一般形式为:sysc=d2c(sysd,Method),其中的Method 默认值为‘zoh’方法,即带零阶保持器的z变换。
函数dstep(G,H,C,D)给出了离散系统的单位阶跃响应曲线。
三、实验步骤及结果程序和运行结果:T=时T=1s时T=2s时A=[0 1 0;-2 -3 0;-1 1 -3]; B=[0;0;1];C=[1 1 1];D=1;[G1 H1]=c2d(A,B,G1 = 0H1 = 0>> dstep(G1,H1,C,D,1)>> dstep(G1,H1,C,D,1)>> [G2 H2]=c2d(A,B,1)G2 = 0H2 =0>> dstep(G2,H2,C,D,1) >> [G3 H3]=c2d(A,B,2) [G3 H3]=c2d(A,B,2)G3 = 0H3 =0>> dstep(G3,H3,C,D,1)程序和运行结果:Z域仿真图形:连续域仿真图形:程序:G=[0 1; 1];H=[1;1];C=[1 1];D=0;u=1;dstep(G,H,C,D,u) sysd=ss(G,H,C,D,a = x1 x2x1 0 1 x2 1b = u1x1 1x2 1c = x1 x2y1 1 1d = u1y1 0Sampling time: Discrete-time model.>> sysc=d2c(sysd,'zoh') a = x1 x2x1x2b = u1x1x2c = x1 x2y1 1 1d = u1y1 0Continuous-time model.>> step(sysc);实验3 能控能观判据及稳定性判据一、实验目的1、利用MATLAB分析线性定常及离散系统的可控性与可观性;2、利用MATLAB判断系统的稳定性。
二、实验原理给定系统状态空间描述[A,B,C,D],函数ctrb(A,B)计算能控性判别矩阵;函数obsv(A,C)计算能观测性判别矩阵;函数P=lyap(A,Q)求解李雅普诺夫方程A T P+PA=-Q,Q为正定对称矩阵;函数[D p]=chol(P)可用于判断P矩阵是否正定,p=0,矩阵正定,p为其它值,矩阵非正定。
三、实验步骤及结果1)(2)A=[1 0 0 0;2 -3 0 0;1 0 -2 0;4 -1 -2 -4];B=[0;0;1;2];C=[3 0 1 0];Qc=ctrb(A,B)Qc =0 0 0 00 0 0 01 -2 4 -82 -10 44 -184 >> rank(Qc)ans =2>> rank(obsv(A,C))ans =2能控性判别矩阵Qc和能观性判别矩阵都不满秩,故系统既不能控,也不能观。
(3) A=[1 0 0 0;2 -3 0 0;1 0 -2 0;4 -1 -2 -4];B=[0;0;1;2];C=[3 0 1 0];D=[0];[z,p,k]=ss2zp(A,B,C,D,1);Flagz=0;n=length(A);for i=1:nif real(p(i))>0Flagz=1;endend>> disp('系统的零极点模型为');z,p,k 系统的零极点模型为z =p =-4-3-21k =>> if Flagz==1disp('系统不稳定');else disp('系统是稳定的');end系统不稳定>> step(A,B,C,D);时间响应曲线为:实验4 状态反馈及状态观测器的设计一、实验目的1、熟悉状态反馈矩阵的求法;2、熟悉状态观测器设计方法。
二、实验原理MATLAB 软件提供了两个函数acker 和place 来确定极点配置状态反馈控制器的增益矩阵K ,函数acker 是基于求解极点配置问题的艾克曼公式,它只能应用到单输入系统,要配置的闭环极点中可以包括多重极点。
函数place 用于多输入系统,但配置极点不可以包括多重极点。
函数acker 和place 的一般形式是:K=acker(A,B,P)K=place(A,B,P)其中的P 是一个向量,P=[n λλλ,...2,1],n λλλ,...2,1是n 个期望的闭环极点。
得到了所要求得反馈增益矩阵后,可以用命令eig(A-B*K)来检验闭环极点。
由状态反馈极点配置和观测器设计问题直接的对偶关系,观测器设计是状态反馈设计的转置,可以用H=(acker(A ’,C ’,V ’))’来确定一般系统的观测器矩阵,用命令eig(estim(sysold,H))来检验极点配置。
三、实验步骤及结果step(A,B,C,D);num=[0 0 1];den=[1 3 2];[A,B,C,D]=tf2ss(num,den)A =-3 -21 0B =1C = 0 1D = 02、配置后系统的时间响应曲线为:A=[-3 -2;1 0];B=[1;0];C=[0 1];D=0;P=[-1+sqrt(-1);-1-sqrt(-1)];K=acker(A,B,P)K = -1 0>> disp('极点配置后的闭环系统为')极点配置后的闭环系统为>> sysnew=ss(A-B*K,B,C,D)a = x1 x2x1 -2 -2x2 1 0b = u1x1 1x2 0c = x1 x2y1 0 1d = u1y1 0Continuous-time model. >> step(sysnew)所以:K=[-1 0]A=[-3 -2;1 0];B=[1;0];C=[0 1];D=0;V=[-3;-3];sysold=ss(A,B,C,D); p=eig(A)p =-2-1Q=obsv(A,C);m=rank(Q);n=length(A);if m==nH=acker(A',C',V')'elsedisp('系统不是状态完全可观测') endH =-23所以:H=[-2 3]。