【实验地点】课外(宿舍) 【实验目的】1、学会利用MATLAB 实现离散系统传递函数模型的生成2、学会利用MATLAB 将连续系统离散化 【实验设备与软件】1、MATLAB/Simulink 数值分析软件2、计算机一台 【实验原理】1、求矩阵特征值和特征向量命令格式[V J]=eig (A ) Cv=eig(A)说明:V 特征向量,J 是Jordan 型,cv 是特征值列向量 2、求运动的方法(1)利用Laplace 逆变换----适合于连续/离散线性系统采用ilaplace/iztrans 对传递函数求逆,这种方法一般是零输入情况下求响应。
(2)用连续(离散)状态转移矩阵表示系统解析解----适合于线性定常系统 对连续定常系统有:假设初始时刻为零,LTI 系统的解析解为dt Bu ee x e t x tAtAtAt⎰⎰+=0)()0()(τ。
若u (t )是单位阶跃输入,则上述解可写成dtBu ee x e t x tAtAt At ⎰⎰+=0)()0()(τ。
进一步简化为:Bu A Bu A x e t x At 11))0(()(---+=对离散线性定常系统有:∑---+=11)()0()(k i kki Hu G x G k x(3)状态方程的数值分析方法----适合于连续线性系统和非线性系统采用直接数值积分很容易的处理各种定常/时变和线性/非线性系统。
有很多数值积分方法,其中有一类预测-修正数值积分方法+自适应步长调整的算法比较有效。
在MATLAB/Simulink 中包含的多种有效的、适用于不同类型的ODE 求解算法,典型的是Runge-Ktuta 算法,其通常使用如下的函数格式:[t,x]=ode45(odefun,[ti,tf],x0,options)----采用四阶、五阶Runge-Ktuta 算法 [t,x]=ode23(odefun,[ti,tf],x0,options)----采用二阶、三阶Runge-Ktuta 算法 说明:a.这两个函数是求解非刚性常微分方程的函数。
b.参数options 为积分的误差设置,取值为相对误差‘reltol ’和绝对误差‘abstol ’;[ti,tf]求解的时间围;x0是初值是初值向量;[t,x]是解。
(4)利用CotrolToolBox 的离散化求解函数----适合于TLI 系统 用step ()/impulse()函数求取阶跃输入/冲激输入时系统的状态响应: 当系统G 是连续的情况下:调用[y,t,x]=step/impulse(G )会自动对连续系统G 选取采样时间围和周期;调用[y,t,x]=step/impulse(G ,ti:Ts:tf)由用户自己定义对连续系统G 的样时间围和周期; 当系统G 是离散的情况下:调用[y,t,x]=step/impulse(G )会按离散系统G 给出的采样周期计算;调用[y,t,x]=step/impulse(G ,ti:Ts:tf)是Ts 必须与离散系统G 的采样时间围和周期一致。
另外lsim()函数调用格式:[y,x,t]=lsim(G,u,ti,TS,tf,x0) 零输入响应调用函数initial (),格式:[y,x,t]=(G,x0) (5)利用simulink 环境求取响应----适用于所有系统求取响应 使用simulink 求取线性或非线性系统的响应,调用格式如下:[t,x,y]=sim(‘XX.mdl ’,ti:Ts:tf,options,u)【实验容】已知线性系统:])(201)()(210)(404040202119201921)(t x t y t u t x t x +-----•已知线性系统1、利用Matlab 求零状态下的阶跃响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
状态响应曲线:A=[-21 19 -20;19 -21 20;40 -40 -40]; B=[0;1;2]; C=[1 0 2];D=[0]; %输入状态空间模型各矩阵,若没有相应值,可赋空矩阵 X0=[0;0;0]; % 输入初始状态 sys=ss(A,B,C,D); %构造传递函数[y,x,t]=step(sys); % 绘以时间为横坐标的状态响应曲线图 plot(t,x); grid;title('状态响应曲线') 输出响应程序:A=[-21 19 -20;19 -21 20;40 -40 -40]; B=[0;1;2]; C=[1 0 2]; D=0; X0=[0;0;0][num,den]=ss2tf(A,B,C,D,1); sys=tf(num,den); step(sys) gridtitle('输出响应曲线')图一(状态响应曲线)图二(输出响应曲线)2、利用Matlab 求零状态下的冲激响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
状态响应曲线程序:A=[-21 19 -20;19 -21 20;40 -40 -40]; B=[0;1;2]; C=[1 0 2];D=[]; %输入状态空间模型各矩阵,若没有相应值,可赋空矩阵 x0=[0;0;0]; % 输入初始状态 sys=ss(A,B,C,D); %构造传递函数 [y,x,t]= impulse(sys); plot(t,x); grid;title('状态响应曲线') 输出响应曲线程序:A=[-21 19 -20;19 -21 20;40 -40 -40]; B=[0;1;2]; C=[1 0 2]; D=0; X0=[0;0;0][num,den]=ss2tf(A,B,C,D,1); sys=tf(num,den); impulse(sys); grid; title('')图三(状态响应曲线')图四(输出响应曲线)3、若控制输入为,且初始状态为,求系统的响应,要求a.在simulink只能够画出模型求响应,生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
程序如下:t=[0:0.01:5];u=(1+exp(-t).*cos(5*t)).*(t<3)+1*(t>=3);t=t';u=u';ut=[t,u];[t1,x,y]=sim('shiyan5.mdl',t,[],ut);plot(t1,x)figure(2);plot(t1,y)创建的模型图如下:图五(模型图)b.编写.m文件求响应,生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
状态响应曲线:t=[0:0.02:5];u=(1+exp(-t).*cos(5*t)).*(t<3)+1*(t>=3);t=t';u=u';A=[-21 19 -20;19 -21 20;40 -40 -40];B=[0;1;2];C=[1 0 2];D=[0]; %输入状态空间模型各矩阵,若没有相应值,可赋空矩阵 X0=[0.2;0.2;0.2]; % 输入初始状态u=(t==0); %就是个条件判断,只有t=0的时候,u才为“1”sys=ss(A,B,C,D); %构造传递函数plot(t,x);grid;title('状态响应曲线')输出响应曲线:plot(t,y);grid;title('输出响应曲线')图六(状态响应曲线)图七(输出响应曲线)4、以阶跃输入情况下的,分析各模块对响应有什么影响。
图八(阶跃输入时)阶跃输入的图像到答稳定时间快,曲线平滑5、求系统的传递函数在MATLAB软件Command Window窗口中输入以下程序A=[-21 19 -20;19 -21 20;40 -40 -40];B=[0;1;2];C=[1 0 2];D=0;[num,den]=ss2tf(A,B,C,D,1);printsys(num,den)程序运行结果为图七6、若采用K增益负反馈,绘制闭环根轨迹图,并对根轨迹加以描述说明。
A=[-21 19 -20;19 -21 20;40 -40 -40];B=[0;1;2];C=[1 0 2];D=0;[num,den]=ss2tf(A,B,C,D,1);rlocus(num,den);gridtitle('K增益负反馈闭环根轨迹图')图九(K增益负反馈闭环根轨迹图)采用K增益负反馈,画出如图所示的根轨迹图。
由图可知,共有3条根轨迹,第一条最终趋于原点;第二条收敛在20~60之间;第三条最终趋于无穷远处。
7、在Matlab中绘制Bode图和Nyquist图,并对图给予说明。
绘制Bode图:A=[-21 19 -20;19 -21 20;40 -40 -40];B=[0;1;2];C=[1 0 2];D=0;sys=tf(num,den) bode(num,den) gridtitle('Bode 图')汇出的波特图如图所示,由图可知,对复制响应分析可得,交越频率在转折频率之后,故复制的变化主要发生在低频段。
对相频特性进行分析,可知此系统的相频特性角度均为负值,并且最后的相角是趋于-90度的。
绘制Nyquist 图: nyquist(sys) title('Nyquist 图 ')图十(波特图)图十一(Nyquist 图)画出的奈奎斯特图如上所示,根据此图可知,此系统是稳定的系统,由奈奎斯特曲线可以分析出此系统的稳定性。
【实验结论与总结】经过本次试验我们了解了线性系统状态空间,知道如何在simulink 中用状态方程搭建系统仿真模型,以及调用模型。
不同输入对对系统有着一定的影响。
如何把方程转换成simulink 中的方块模型是非常重要的,在本次实验中,最困难的地方在于运用Simulink 生成图形,在这过程中由于要利用到sim 函数,不熟悉导致出错后来经过检查才改正错误。