MatLab与控制系统仿真(重点编程)

合集下载

应用MATLAB控制系统仿真

应用MATLAB控制系统仿真

01
根据系统性能要求,设计比例、积分、微分控制器参数,优化
系统性能。
状态反馈控制器设计
02
通过状态反馈控制器设计,实现系统的最优控制。
鲁棒控制器设计
03
针对不确定性系统,设计鲁棒控制器,提高系统对参数变化的
适应性。
04
控制系统仿真的动态行为,通过建立和求解微 分方程来模拟系统的动态响应。
性能等。
05
Matlab控制系统仿真实 例
一阶系统仿真
总结词:简单模拟
详细描述:一阶系统是最简 单的控制系统,其动态行为 可以用一个一阶微分方程描 述。在Matlab中,可以使用 `tf`函数创建一个一阶传递函 数模型,然后使用`step`函 数进行仿真。
总结词:性能分析
详细描述:通过仿真,可以 观察一阶系统的响应曲线, 包括超调和调节时间等性能 指标。使用Matlab的绘图功 能,可以直观地展示系统的 动态行为。
THANKS FOR WATCHING
感谢您的观看
适用于模拟数字控制系统、采样控制系统等。
实时仿真
01
在实际硬件上实时模拟控制系统的动态行为,通过将
控制算法嵌入到实际控制系统中进行实时仿真。
02
使用Matlab中的`real-time workshop`等工具箱进
行建模和仿真,可以方便地实现实时仿真。
03
适用于模拟实际控制系统、验证控制算法的正确性和
实时仿真
Matlab支持实时仿真,可以在实 际硬件上运行控制算法,进行系 统测试。
02
控制系统数学模型
线性时不变系统
线性时不变系统(LTI)是指系统的输出与输入之间的关系 可以用线性常数来描述的系统。在控制系统中,LTI系统是 最常见的系统类型之一。

MATLAB控制系统各种仿真例题(包括simulink解法)

MATLAB控制系统各种仿真例题(包括simulink解法)

一、 控制系统的模型与转换1. 请将下面的传递函数模型输入到matlab 环境。

]52)1)[(2(24)(32233++++++=s s s s s s s G )99.02.0)(1(568.0)(22+--+=z z z z z H ,T=0.1s >> s=tf('s');G=(s^3+4*s+2)/(s^3*(s^2+2)*((s^2+1)^3+2*s+5));GTransfer function:s^3 + 4 s + 2------------------------------------------------------s^11 + 5 s^9 + 9 s^7 + 2 s^6 + 12 s^5 + 4 s^4 + 12 s^3>> num=[1 0 0.56];den=conv([1 -1],[1 -0.2 0.99]);H=tf(num,den,'Ts',0.1)Transfer function:z^2 + 0.56-----------------------------z^3 - 1.2 z^2 + 1.19 z - 0.992. 请将下面的零极点模型输入到matlab 环境。

请求出上述模型的零极点,并绘制其位置。

)1)(6)(5()1)(1(8)(22+++-+++=s s s s j s j s s G )2.8()6.2)(2.3()(1511-++=----z z z z z H ,T=0.05s>>z=[-1-j -1+j];p=[0 0 -5 -6 -j j];G=zpk(z,p,8)Zero/pole/gain:8 (s^2 + 2s + 2)--------------------------s^2 (s+5) (s+6) (s^2 + 1)>>pzmap(G)>> z=[0 0 0 0 0 -1/3.2 -1/2.6];p=[1/8.2];H=zpk(z,p,1,'Ts',0.05)Zero/pole/gain:z^5 (z+0.3125) (z+0.3846)-------------------------(z-0.122)Sampling time: 0.05>>pzmap (H )num=[0,7.1570,-6.4875 ];den=[1,-2.2326,1.7641,-0.4966];sysd=tf(num,den,0.05,'variable','z^-1')Transfer function:7.157 z^-1 - 6.487 z^-2-----------------------------------------1 - 2.233 z^-1 + 1.764 z^-2 - 0.4966 z^-3Sampling time: 0.05二、 线性系统分析1. 请分析下面传递函数模型的稳定性。

《MATLAB与控制系统仿真》实验报告

《MATLAB与控制系统仿真》实验报告

《MATLAB与控制系统仿真》实验报告一、实验目的本实验旨在通过MATLAB软件进行控制系统的仿真,并通过仿真结果分析控制系统的性能。

二、实验器材1.计算机2.MATLAB软件三、实验内容1.搭建控制系统模型在MATLAB软件中,通过使用控制系统工具箱,我们可以搭建不同类型的控制系统模型。

本实验中我们选择了一个简单的比例控制系统模型。

2.设定输入信号我们需要为控制系统提供输入信号进行仿真。

在MATLAB中,我们可以使用信号工具箱来产生不同类型的信号。

本实验中,我们选择了一个阶跃信号作为输入信号。

3.运行仿真通过设置模型参数、输入信号以及仿真时间等相关参数后,我们可以运行仿真。

MATLAB会根据系统模型和输入信号产生输出信号,并显示在仿真界面上。

4.分析控制系统性能根据仿真结果,我们可以对控制系统的性能进行分析。

常见的性能指标包括系统的稳态误差、超调量、响应时间等。

四、实验步骤1. 打开MATLAB软件,并在命令窗口中输入“controlSystemDesigner”命令,打开控制系统工具箱。

2.在控制系统工具箱中选择比例控制器模型,并设置相应的增益参数。

3.在信号工具箱中选择阶跃信号,并设置相应的幅值和起始时间。

4.在仿真界面中设置仿真时间,并点击运行按钮,开始仿真。

5.根据仿真结果,分析控制系统的性能指标,并记录下相应的数值,并根据数值进行分析和讨论。

五、实验结果与分析根据运行仿真获得的结果,我们可以得到控制系统的输出信号曲线。

通过观察输出信号的稳态值、超调量、响应时间等性能指标,我们可以对控制系统的性能进行分析和评价。

六、实验总结通过本次实验,我们学习了如何使用MATLAB软件进行控制系统仿真,并提取控制系统的性能指标。

通过实验,我们可以更加直观地理解控制系统的工作原理,为控制系统设计和分析提供了重要的工具和思路。

七、实验心得通过本次实验,我深刻理解了控制系统仿真的重要性和必要性。

MATLAB软件提供了强大的仿真工具和功能,能够帮助我们更好地理解和分析控制系统的性能。

Matlab与控制系统仿真部分习题答案

Matlab与控制系统仿真部分习题答案

【4.2】程序:num=[5,0];den=conv([1,1],conv([1,2],[1,3])); [numc,denc]=cloop(num,den);[z,p,k]=tf2zp(numc,denc);[A,B,C,D]=tf2ss(numc,denc);g_zp=zpk(z,p,k)g_tf=tf(numc,denc)g_ss=ss(A,B,C,D)运行结果:Zero/pole/gain:5 s----------------------------------(s+0.4432) (s^2 + 5.557s + 13.54)Transfer function:5 s----------------------s^3 + 6 s^2 + 16 s + 6a =x1 x2 x3x1 -6 -16 -6x2 1 0 0x3 0 1 0b =u1x1 1x2 0x3 0c =x1 x2 x3y1 0 5 0d =u1y1 0【4.3】程序:A=[0 0 0 -1;1 0 0 -2;0 1 0 -3;0 0 1 -4]; B=[0;0;0;1];C=[1 0 0 0];g_ss=ss(A,B,C,D)[num,den]=ss2tf(A,B,C,D);g_tf=tf(num,den)[z,p,k]=ss2zp(A,B,C,D);g_zpk=zpk(z,p,k)运行结果:a =x1 x2 x3 x4x1 0 0 0 -1x2 1 0 0 -2x3 0 1 0 -3x4 0 0 1 -4b =u1x1 0x2 0x3 0x4 1c =x1 x2 x3 x4y1 1 0 0 0d =u1y1 0Continuous-time model.Transfer function:-3.109e-015 s^3 - s^2 - 3.331e-015 s - 4.441e-016 -------------------------------------------------s^4 + 4 s^3 + 3 s^2 + 2 s + 1Zero/pole/gain:- s^2----------------------------------------------(s+0.6724) (s+3.234) (s^2 + 0.0936s + 0.4599)【5.1】(1)程序num=[0,10];den=conv([1,0],[1,7,17]); [numc,denc]=cloop(num,den,-1); G=tf(numc,denc)[y,t]=step(G);plot(t,y,'b-')C=dcgain(G);n=1;while y(n)<0.1*Cn=n+1;endm=1;while y(m)<0.9*Cm=m+1;endrisetime=t(m)-t(n)[Y,k]=max(y); percentovershoot=100*(Y-C)/Ci=length(t);while(y(i)>0.98*C)&(y(i)<1.02*C) i=i-1;endsettlingtime=t(i)运行结果:Transfer function:10-----------------------s^3 + 7 s^2 + 17 s + 10risetime =2.7312percentovershoot =-0.4399settlingtime =5.1372图:0123456700.10.20.30.40.50.60.70.80.91(2)程序k=[10,100,1000];t=linspace(1,20,200);num=1;den=conv([1,0],[1,7,17]);for j=1:3;s1=tf(num*k(j),den);sys=feedback(s1,1)y(:,j)=step(sys,t);endplot(t,y(:,1),'r',t,y(:,2),'b',t,y(:,3),'g')gtext('k=10');gtext('k=100');gtext('k=1000') 运行结果:Transfer function:10-----------------------s^3 + 7 s^2 + 17 s + 10Transfer function:100------------------------s^3 + 7 s^2 + 17 s + 100Transfer function:1000-------------------------s^3 + 7 s^2 + 17 s + 1000图:024681012141618200.20.40.60.811.21.41.61.8图:02468101214161820-3-2-1123422【6.1】程序:(1)num1=[1,1];den1=conv([1,0,0],conv([1,2],[1,4]));sys1=tf(num1,den1)rlocus(sys1)运行结果:-12-10-8-6-4-2024-8-6-4-202468Root LocusReal Axis I m a g i n a r y A x i s(2)num2=[1,1];den2=conv([1,0],conv([1,-1],[1,4,16]));sys2=tf(num2,den2)rlocus(sys2)运行结果:-10-8-6-4-2024-8-6-4-202468Root LocusReal Axis I m a g i n a r y A x i s(3)num3=[1,8];den3=conv([1,0,0],conv([1,3],conv([1,5],conv([1,7],[1,15])))); sys3=tf(num3,den3)rlocus(sys3)运行结果:-30-25-20-15-10-5051015-20-15-10-505101520Root LocusReal Axis I m a g i n a r y A x i s【6.3】程序:num=[1,2];den=conv([1,0],conv([1,4],conv([1,8],[1,2,5])));sys=tf(num,den)rlocus(sys)[k,poles]=rlocfind(sys)运行结果:Transfer function:s + 2---------------------------------------s^5 + 14 s^4 + 61 s^3 + 124 s^2 + 160 sSelect a point in the graphics windowselected_point =0.0296 + 2.2826i k =135.8815poles =-7.3248-5.41040.0145 + 2.3021i0.0145 - 2.3021i -1.2939图:-20-15-10-5051015-15-10-551015Root LocusReal Axis I m a g i n a r y A x i s【7.3】程序(1)画波特图num=[50];den=conv([1,0],conv([1,10],[3,1]));sys=tf(num,den)sys1=feedback(sys,1)bode(sys)grid图(1)-150-100-50050100M a g n i t u d e (d B)10-210-1100101102103-270-225-180-135-90P h a s e (d e g )Bode DiagramFrequency (rad/sec)程序(2)画奈奎斯特图num=[50];den=conv([1,0],conv([1,10],[3,1]));sys=tf(num,den)sys1=feedback(sys,1)nyquist(sys)grid图(2)-16-14-12-10-8-6-4-20-300-200-100100200300Nyquist DiagramReal Axis I m a g i n a r y A x i s程序(3)画零极点图num=[50];den=conv([1,0],conv([1,10],[3,1]));sys=tf(num,den)sys1=feedback(sys,1)pzmap(sys1)gird图(3)P ole-Zero MapReal Axis I m a g i n a r y A x i s -12-10-8-6-4-20-1.5-1-0.50.511.5程序(4)计算相角裕量和幅值裕量num=[50];den=conv([1,0],conv([1,10],[3,1]));sys=tf(num,den)sys1=feedback(sys,1)[gm,pm,wcg,wcp]=margin(sys)运行结果Transfer function:50---------------------3 s^3 + 31 s^2 + 10 sTransfer function:50--------------------------3 s^3 + 31 s^2 + 10 s + 50gm =2.0667pm =7.5615wcg =1.8257wcp =1.2645程序(5)绘制阶跃响应曲线num=[50];den=conv([1,0],conv([1,10],[3,1])); sys=tf(num,den)sys1=feedback(sys,1)step(sys1)图(5)00.20.40.60.811.21.41.61.82Step ResponseTime (sec)A m p l i t u d e【7.4】程序如下:num=[300];den=conv([1,0,0],conv([0.2,1],[0.02,1]));sys=tf(num,den)margin(sys)grid波特图如下:-150-100-50050100M a g n i t u d e (d B )10-1100101102103-360-315-270-225-180P h a s e (d e g )Bode DiagramGm = Inf , P m = -78 deg (at 11 rad/sec)Frequency (rad/sec)【9.3】程序:A=[-2 2 -1;0 -2 0;1 -4 0];B=[0;0;1];C=[1,0,0];D=0;M=ctrb(A,B)m=rank(M)if m==3;disp('系统可控')elsedisp('系统不可控')endN=obsv(A,C)n=rank(N)if n==3;disp('系统可观')elsedisp('系统不可观') endsys=ss(A,B,C,D) [num,den]=ss2tf(A,B,C,D) sys1=tf(num,den)[z,p,k]=ss2zp(A,B,C,D)运行结果:M =0 -1 20 0 01 0 -1m =2系统不可控N =1 0 0-2 2 -13 -4 2n =2系统不可观a =x1 x2 x3x1 -2 2 -1x2 0 -2 0x3 1 -4 0b =u1x1 0x2 0x3 1c =x1 x2 x3y1 1 0 0d =u1y1 0 Continuous-time model.0 0 -1 -2den =1 4 5 2Transfer function:-s - 2---------------------s^3 + 4 s^2 + 5 s + 2z =-2p =-1-1-2k = -1【10.1】(1)程序:A=[0,1,0,0;0,5,0,0;0,0,-7,0;0,0,0,-8]; B=[0;1;0;1];C=[1,2,3,4];D=zeros(1,1);G_ss=ss(A,B,C,D)运行结果:a =x1 x2 x3 x4x1 0 1 0 0x2 0 5 0 0x3 0 0 -7 0x4 0 0 0 -8u1x1 0x2 1x3 0x4 1c =x1 x2 x3 x4y1 1 2 3 4d =u1y1 0(2):程序:[num1,den1]=ss2tf(A,B,C,D); p=roots(den1)i=0;for k=1:1:length(p)if real(p(k))>0i=i+1;endendif i>0disp('系统不稳定');elsedisp('系统稳定');end运行结果:p =5.0000-8.0000-7.0000系统不稳定(3)(4)程序:AA=[0,1,0;0,5,0;0,0,-8];BB=[0;1;1];P=[-1,-2,-8];K=acker(AA,BB,P);i=4;K(4)=0;Kpp=eig(A-B*K)sys1=tf(num1,den1);[y1,t]=step(sys1);plot(t,y1)hold onA_feedback=A-B*K;[num2,den2]=ss2tf(A_feedback,B,C,D); sys2=tf(num2,den2);[y2,t]=step(sys2);plot(t,y2,'r')gridgtext('反馈前')gtext('反馈后')运行结果:K =2 8 0 0pp =-8-2-1-7图形:01234560123456【13.1】程序:A=[0,1;0,0];B=[0;1];C=[1,0];D=zeros(1,1);G_ss=ss(A,B,C,D)M=ctrb(A,B);if rank(M)==2disp('系统完全能控'); elsedisp('系统不完全能控'); endS=[1,0];N=obsv(A,S);if rank(N)==2disp('(A,S)可观测'); elsedisp('(A,S)不可观测'); endR=1;Q=[1,0;0,0];[K,P,E]=Lqr(A,B,Q,R)A_new=A-B*K;G_new=ss(A_new,B,C,D);t=linspace(0,5,100)';y1=step(G_ss,t);y2=step(G_new,t);plot(t,y1,'r:',t,y2,'b-')gridgtext('反馈前')gtext('反馈后')运行结果:a =x1 x2x1 0 1x2 0 0b =u1x1 0x2 1c =x1 x2y1 1 0d =u1y1 0Continuous-time model. 系统完全能控(A,S)可观测K =1.0000 1.4142P =1.4142 1.00001.0000 1.4142E =-0.7071 + 0.7071i-0.7071 - 0.7071i图形:00.51 1.52 2.53 3.54 4.5502468101214。

基于MATLAB控制系统仿真实验报告

基于MATLAB控制系统仿真实验报告

tf 4
y0

0 1
6、求出 G1(s)
2 (s2 2s 1) 与 G2 (s)
1 (2s3

3s2
1)
的单位阶跃响应,并分别
求出状态空间模型。
解:(1) G1(s) 2 (s2 2s 1) 的状态空间模型求解如下:
function shiyan2 b1=[2];
D(z)

0.62(1 0.136z 1)(1 0.183z (1 0.045z 1)(1 0.53z 1)
1 )
分别用仿真算法得到系统在单位阶跃输入作用下的响应,系统在单位速度输
入是的输出响应。
解:(1)首先将 W1(s)转换为 W1(z),采样周期 T=0.2s,程序清单如下: function shiyan42 num=[10];den=[0.005 0.15 1 0]; ts=0.2;[nc,dc]=c2dm(num,den,ts)
INTRO(注意:intro 为一个用 MATLAB 语言编写的幻灯片程序,主要演示
常用的 MATLAB 语句运行结果。)
然后,根据现实出来的幻灯片右面按钮进行操作,可按 START——NEXT—
—NEXT 按钮一步步运行,观察。
3、自编程序并完成上机编辑,调试,运行,存盘:
(1)用 MATLAB 命令完成矩阵的各种运算,例如:
5、利用 ode23 或 ode45 求解线性时不变系统微分方程 y(t) Ay(t) ,并绘制出 y(t)
曲线,式中
A

0.5

1
1 0.5
t t0 t 如下: function xdot=fun21(t,x) A=[-0.5 1;-1 -0.5]; xdot=A*x; function fzsy22 t0=0;tf=4;tol=1e-6; x0=[0;1];trace=1; [t,x]=ode23('fun21',t0,tf,x0,tol,trace); plot(t,x) 得到的实验结果如下图所示:

MATLAB与控制系统仿真

MATLAB与控制系统仿真
由分子和分母多项式系数可以唯一确定传递函数。 分子向量 num =[bm bm-1 … b1 b0 ] (numerator) 分母向量 den =[an an-1 … a1 a0 ] (denominator)
用tf( )命令可以建立一个传递函数模型,或将零极点增益模型和 状态空间模型转换为传递函数模型。 tf( )命令调用格式如下: Sys=tf(num,den): 用于生成S传递函数。
传递函数的部分分式展开 传递函数有时需要进行有理分式的分式展开。所谓部分 分式展开,就是将高阶的有理分式化为若干个一阶有理 分式之和的形式。如果传递函数G(s)不包含多重极点, 那么,将G(s)用部分分式展开后即可得到: n r
其中,k是常数项,对于真分式来说 k=0; r是各分式的系数,p是系统的极点。 MATLAB提供了一条函数residue( )可以求解有理分式的 部分分式展开,其基本调用格式为:(R,P,K)=residue(B,A) 其中B和A分别是降幂排列的该有理分式的分子和分母多 项式系数:R是求得的部分分式展开的各分式系数,P是 系统极点,K是常数项。
G1 ( s ) s5 ( s 1)(s 3 )
G2 ( s ) s 2 4s 4 )
系统输入信号为r(t)=sin(t),用Simulink求系统输出响应。
5.3.2 时域响应性能指标求取
调用单位阶跃响应函数step(),可以获得系统的单位阶跃 响应,当采用[y,t]=step(G)的调用格式时,通过对y,t的计 算,可以得到时域性能指标。 1. 峰值时间(timetopeak) [Y,k]=max(y) %求出y的峰值及相应的时间 timetopeak=t(k) %获得峰值时间 2 . 超调量(percentovershoot) C=dcgain(G) %求取系统的终值 [Y,k]=max(y) %求出y的峰值及相应的时间 percentovershoot=100*(Y-C)/C %计算超调量

matlab 控制系统仿真

matlab 控制系统仿真

摘要MATLAB语言是一种十分有效的工具,能容易地解决在系统仿真及控制系统计算机辅助设计领域的教学与研究中遇到的问题,它可以将使用者从繁琐的底层编程中解放出来,把有限的宝贵时间更多地花在解决科学问题上。

MATLAB GUI 是MATLAB的人机交互界面。

由于GUI本身提供了windows基本控件的支持,并且具有良好的事件驱动机制,同时提供了MATLAB数学库的接口,所以GUI 对于控制系统仿真的平台设计显得十分合适。

GUI对于每个用户窗口生成.fig和.m 文件。

前者负责界面的设计信息,后者负责后台代码的设计。

本文所做的研究主要是基于MATLAB GUI平台,结合控制系统基础理论和MATLAB控制系统工具箱,实现了用于控制系统计算机辅助分析与设计的软件。

本软件主要功能:实现传递函数模型输入、状态方程模型输入、模型装换、控制系统稳定性分析、系统可观性可控性判断,绘制系统奈奎斯特图、波特图、根轨迹图以及零极点分布图。

在继续完善的基础上能够用于本科自动控制原理教程的教学实验和一般的科学研究。

关键词:控制系统;MATLAB GUI;计算机辅助设计AbstractMATLAB language is a very effective tool,and can be easily resolved in the system simulation and control system of teaching in the field of computer-aided design and research problems,it could be the bottom of the user from tedious programming liberate the limited spend more valuable time to solve scientific problems.The MATLAB GUI is the interactive interface.As the GUI itself provides the basic control windows support,and has a good mechanism for event-driven,while providing the MATLAB Math Library interface,the GUI for control system simulation platform for the design of it is suitable. GUI window generated for each user. Fig and.M file. The former is responsible for the design of the interface information,which is responsible for the design of the background code.Research done in this article is mainly based on MATLAB GUI platform,the basis of combination of control system theory and MATLAB Control System Toolbox,the realization of control systems for computer-aided analysis and design software. The main functions of the software: the realization of transfer function model input,the state equation model input,the model fitted for the control system stability analysis,system observability controllability judgments、rendering the system Nyquist diagram、Bode plots、root locus and Pole-zero distribution. While continuing to improve based on the principle of automatic control can be used for undergraduate teaching course experiments and scientific research in general.Key words:Control System;MATLAB GUI; Computer-assistant design目录第1章概述 (1)1.1 论文选题背景和意义 (1)1.2 计算机辅助分析与设计在控制系统仿真中的发展现状 (1)1.3 本文主要内容 (3)第2章控制系统与MATLAB语言 (4)2.1 控制系统理论基础 (4)2.2 MATLAB语言与控制系统工具箱 (5)第3章 MATLAB GUI简介及应用 (9)3.1 MATLAB GUI (9)3.2 软件设计步骤 (10)第4章仿真系统测试与演示 (16)4.1 控制系统的模型输入 (16)4.2 控制系统的稳定性分析 (19)4.3 控制系统可控可观性分析 (20)4.4 控制系统频率响应 (23)4.5 控制系统时域响应 (27)4.6 控制系统根轨迹绘制 (28)结论 (31)参考文献 (32)致谢 (33)第1章概述1.1 论文选题背景和意义自动控制原理是自动控制专业和自动化专业的主要课程之一,是研究自动控制技术的基础理论课,是必修的专业基础课程。

MATLABSimulink和控制系统仿真实验报告

MATLABSimulink和控制系统仿真实验报告

MATLAB/Simulink与控制系统仿真实验报告姓名:喻彬彬学号:K031541725实验1、MATLAB/Simulink 仿真基础及控制系统模型的建立一、实验目的1、掌握MATLAB/Simulink 仿真的基本知识;2、熟练应用MATLAB 软件建立控制系统模型。

二、实验设备电脑一台;MATLAB 仿真软件一个三、实验内容1、熟悉MATLAB/Smulink 仿真软件。

2、一个单位负反馈二阶系统,其开环传递函数为210()3G s s s =+。

用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。

3、某控制系统的传递函数为()()()1()Y s G s X s G s =+,其中250()23s G s s s+=+。

用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。

4、一闭环系统结构如图所示,其中系统前向通道的传递函数为320.520()0.11220s G s s s s s+=+++,而且前向通道有一个[-0.2,0.5]的限幅环节,图中用N 表示,反馈通道的增益为1.5,系统为负反馈,阶跃输入经1.5倍的增益作用到系统。

用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。

四、实验报告要求实验报告撰写应包括实验名称、实验内容、实验要求、实验步骤、实验结果及分析和实验体会。

五、实验思考题总结仿真模型构建及调试过程中的心得体会。

题1、(1)利用Simulink的Library窗口中的【File】→【New】,打开一个新的模型窗口。

(2)分别从信号源库(Sourse)、输出方式库(Sink)、数学运算库(Math)、连续系统库(Continuous)中,用鼠标把阶跃信号发生器(Step)、示波器(Scope)、传递函数(Transfern Fcn)和相加器(Sum)4个标准功能模块选中,并将其拖至模型窗口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章MatLab的程序设计MatLab是一个工具、开发平台,同时它也是一门编程语言。

与在命令窗口用交互的方式工作相比,通过程序运行来解决实际问题,其效率更高,因此,凡是复杂的、大型的应用都是以程序的方式执行。

相对其它高级语言,MatLab更简单、编程的效率更高、调试过程也更容易。

MatLab中的程序文件是以m为后缀,所以通常将MatLab的程序文件称为m文件。

MatLab提供了两种形式的m文件,即:脚本(Script)式m文件(就简称m文件)、函数型m文件。

在MatLab中已经嵌入了一个功能强大的集成开发环境——m文件编辑器,用它来进行程序的编辑、修改、调试、运行等,完成应用开发工作。

4.1 MatLab程序设计基础通过前面内容的学习,大家对MatLab已经有了一个初步的认识和印象,到目前为止,我们都是在“命令”窗口中,以交互的方式运行,完成我们的工作。

实际上简单的m文件,就是一个批处理程序,它是若干条命令的集合。

例:4.1.1 M文件规则和属性函数M文件必须遵循一些特定的规则。

除此之外,它们有许多的重要属性,这其中包括:1. 函数名和文件名必须相同。

例如,函数fliplr存储在名为fliplr.m文件中。

2. MATLAB头一次执行一函数个M文件时,它打开相应的文本文件并将命令编辑成存储器的内部表示,以加速执行以后所有的调用。

如果函数包含了对其它函数M文件的引用,它们也同样被编译到存储器。

普通的脚本M文件不被编译,即使它们是从函数M文件内调用;打开脚本M文件,调用一次就逐行进行注释。

页脚内容13. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。

当需要帮助时,返回该文本。

例如,» help fliplr返回上述前八行注释。

4. 第一行帮助行,名为H1 行,是由lookfor命令搜索的行。

5. 函数可以有零个或更多个输入参量。

函数可以有零个或更多个输出参量。

6. 函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。

如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误。

相对于函数m文件,脚本式m文件就简单多了,它没有严格的格式要求,只要将有关的命令或函数一一敲入即可,但是还是有几个问题需要注意:1. m文件的名称不得与MatLab的内部函数同名、第一个字符不得为数字(这点与变量的命名规则相同);2. 最好在文件的头部加上注释,对该m文件的作用、功能作一个简要说明,而在一些重要命令行后也加上注释行,以方便使用者阅读、查找;3. 要特别注意m文件的保存路径或位置,如果不是保存在MatLab默认的路径下,可以使用addpath函数来设置、添加路径,否则,m文件不能运行。

脚本式m文件与函数m文件还有一个重要区别:脚本式m文件中的变量均为全局变量,而函数m文件中的变量则是局部变量。

这可以从这两种程序文件运行后在Workspace中留下痕迹看出。

当然,在函数m文件中也可以专门将某些变量定义为全局变量(关键字是:global)。

不过,在使用全局变量(函数m文件中)时应特别注意:①.全局变量需要函数体的变量赋值语句之前定义或说明;②.全局变量名最好是大写,而且要尽量长,能反映它本身的含义;页脚内容2③.实际编程时,全局变量也要尽可能少用,因为一旦它在一个地方被改变,那么其它包括该变量的函数中都得改变,有时可能会出现意想不到情况。

4.1.2 M文件的组成函数M文件实例:function f=fact(n)%函数定义行%Compute a factorial value %H1行%FACT (N)return the factorial of N,%usually denoted by N %帮助文本%Put simply,FACT (N)is PROD (1:N )%注释f=prod (1:N ); %函数体一个完整的函数M文件通常包括:①. 函数定义行:定义函数名以及输入、输出变量的数目和顺序;②. H1行:对该函数进行概括性的描述(可用help和Lookfor命令调出此行);③. 帮助文本:这是比H1行更详细的帮助信息,使用help命令时与H1行一起显示;④. 函数体:这是函数M文件的主要部分,程序的功能都在此部分实现;⑤. 注释:对程序行的意义进行解释(与H1行一样都是用%开头)。

有的函数M文件还包含return语句!页脚内容34.1.3 M文件编辑器介绍1. m文件编辑器的启动★在命令窗口中敲入:edit★点击工具栏中的新建图标★从菜单file/new/M-file中启动2. m文件编辑器的界面★菜单栏★工具栏★编辑窗口3. m文件的运行★在m文件编辑器内★在命令窗口中运行在命令窗口直接输入m文件名,回车即可,但函数m文件通常还必须带参数才能运行,也可以利用feval函数来运行函数m文件,其格式如下:feval('functionname', arg1, arg2, ...)对于脚本式m文件,还可以用run函数在命令窗口中运行存在的m文件。

格式:run ‘m文件名’(不必带文件的后缀)页脚内容44.1.4 对函数M文件的调用凡是以函数m文件形式保存的程序文件,均可以被其它函数m文件或脚本m文件所调用。

例:①先定义一个函数m文件:%计算阶乘function y=jiech(n)y=1;for i=1:ny=y*i;end②编写m文件实现对上述函数m文件的调用:function z=dy(n)z=log(jiech(n));4.1.5数据类型与结构MatLab的数据类型前面已经介绍,下面是它们之间的关系图:页脚内容5MatLab中结构(教材中称构架)的概念和C语言中的类似,它也包含一个或多个域(数据容器),每个域可以包含任何类型的数据(这一点与单元数组又相似),且相互独立。

下面通过实例来说明如何建立并访问结构。

用结构建立学生的数据记录。

①.例1:在命令窗口直接创建(或用m文件编辑器)创建。

student.num=20070135;='李四';student.age=20;student.weight=67;student.height=1.68;student.test=[90 85 76 63 88 54 79];从这个例子可以看出结构建立的方法:直接建立结构和各个域,同时给各域赋值(也可以不赋值),结构和域之间用点“.”连接。

②.用关键字“struct”创建,格式如下:页脚内容6s = struct('field1', values1, 'field2', values2, ...)例2:用关键字“struct”创建。

student=struct('num',20070135,'name','zhangsan','weight',1.68,'height',75,'test',…[98 87 65 95 78])③.结构的操作★结构域的访问★结构域的添加、修改直接添加或用函数setfield()添加;直接修改或用函数setfield()修改。

★结构域的删除用函数rmfield()删除某个域。

格式:s=rmfield(s,'fieldname')4.2 MatLab程序的控制程序的流程控制是高级语言中必不可少、也是非常重要的部分,要编写出高质量的程序,实现对复杂系统的控制、仿真,这一点也是必须掌握的。

MatLab提供了多种控制结构,包括:顺序结构、选择(分支)结构以及循环结构,每种结构都有各自的控制机制,利用它们及其它们的组合可以实行功能强大的、复杂的应用。

4.2.1顺序结构顺序结构最简单,它是一种最基础的程序结构,也是最遵循逻辑思路的程序代码结构,批处理文件就页脚内容7是典型的顺序语句文件。

这种语句不需要任何特殊的流控制,按照语句的排列顺序,一条一条的执行,直至结束。

例:4.2.2选择(或分支)结构如果程序中需要根据一定条件来执行不同的操作时,可以使用条件语句来构成选择或分支结构。

在MatLab中可利用if语句来实现这种结构。

if语句的结构通常有以下三种形式:1.单分支结构:这种分支结构最简单,格式为:if 表达式语句end它只有一个判断语句,当表达式为真时,就执行语句,否则就不执行。

例:function f=ifone(x)if x>=0fprintf('%f is a Positive number.\n',x);end2.双分支结构:页脚内容8此时,采用if-else-end结构,语法是:if 表达式语句1else语句2end即:表达式为真,系统执行语句1,否则将转入语句2执行。

例:将上面的例子扩充function f=ifone(x)if x>=0fprintf('%f is a positive number.\n',x);elsefprintf('%f is a negative number.\n',x);end3.多分支结构:仍采用if-else-end结构,但语法上略有不同,形式如下:if 表达式1页脚内容9语句1 %表达式1为真执行语句1 elseif 表达式2语句2 %表达式2为真执行语句2 elseif表达式3语句3 %表达式3为真执行语句3……else语句n %所有表达式为假执行语句n end例:编写一个成绩打印程序。

function f=chengji(x)if x>=90fprintf('%d 分,成绩为优\n',x)elseif x>=80fprintf('%d 分,成绩为良\n',x)elseif x>=70fprintf('%d 分,成绩为中\n',x)页脚内容10elseif x>=60fprintf('%d 分,成绩为及格\n',x)elsefprintf('%d 分,成绩为不及格\n',x)end4.2.3开关语句(Switch分支结构)开关语句实际上也是分支结构的一种,是一种多选择的分支语句,作用与上面介绍的多分支结构相似,这是MatLab6.0以上版本新增加的功能。

该结构的一般调用格式如下:Switch expressionCase value1StatementsCase value2Statements……………….OtherwiseStatements页脚内容11end例:采用switch结构的一个简单应用。

相关文档
最新文档