
一、 MATLAB 基本操作与使用
1. 实验目的
1) 熟悉 MATLAB工作环境平台及其各个窗口,掌握MATLAB 语言的基本规定,MATLAB图形绘制功能、M 文件程序设计。
2) 学习使用MATLAB控制系统工具箱中线性控制系统传递函数模型的相关函数。
2. 实验仪器
PC计算机一台,MATLAB软件1套
3. 实验内容
1) MATLAB工作环境平台
图1 在英文Windows 平台上的MATLAB6.5 MATLAB工作平台
① 命令窗口(Command Window)
命令窗口是对 MATLAB 进行操作的主要载体,默认的情况下,启动MATLAB 时就会打开命令窗口,显示形式如图 1 所示。一般来说,MATLAB的所有函数和命令都可以在命令窗口中执行。掌握 MALAB 命令行操作是走入 MATLAB 世界的第一步。命令行操作实现了对程序设计而言简单而又重要的人机交互,通过对命令行操作,避免了编程序的麻烦,体现了 MATLAB 所特有的灵活性。
在运行MATLAB后,当命令窗口为活动窗口时,将出现一个光标,光标的左侧还出现提示符“>>”,表示MATLAB正在等待执行命令。注意:每个命令行键入完后,都必须按回车键!
当需要处理相当繁琐的计算时,可能在一行之内无法写完表达式,可以换行表示,此时需要使用续行符“…”否则 MATLAB 将只计算一行的值,而不理会该行是否已输入完毕。
使用续行符之后 MATLAB 会自动将前一行保留而不加以计算,并与下一行衔接,等待完整输入后再计算整个输入的结果。
在 MATLAB 命令行操作中,有一些键盘按键可以提供特殊而方便的编辑操作。比如:“↑”可用于调出前一个命令行,“↓”可调出后一个命令行,避免了重新输入的麻烦。当然下面即将讲到的历史窗口也具有此功能。
② 历史窗口(Command History)
历史命令窗口是 MATLAB6 新增添的一个用户界面窗口,默认设置下历史命令窗口会保留自安装时起所有命令的历史记录,并标明使用时间,以方便使用者的查询。而且双击某一行命令,即在命令窗口中执行该命令。
③ 当前目录窗口(Current Directory)
在当前目录窗口中可显示或改变当前目录,还可以显示当前目录下的文件,包括文件名、文件类型、最后修改时间以及该文件的说明信息等并提供搜索功能。
④ 工作空间管理窗口(Workspace)
工作空间管理窗口是 MATLAB 的重要组成部分。在工作空间管理窗口中将显示所有目前保存在内存中的 MATLAB 变量的变量名、数据结构、字节数以及类型,而不同的变量类型分别对应不同的变量名图标。
2) MATLAB 的基本规定
(1) 数值的表示
MATLAB 的数值采用十进制,可以带小数点或负号。以下表示都合法。0, -100, 0.008, 12.752,1.8e-6 ,8.2e52
(2) 变量命名规定
① 变量名、函数名:字母大小写表示不同的变量名。如A 和a 表示不同的变量名;sin 是MATLAB 定义的正弦函数,而Sin,SIN 等都不是。
② 变量名的第一个字母必须是英文字母,不能是数字,最多可包含31 个字符(英文、数字和下连字符)。如A21 是合法的变量名,而3A21 是不合法的变量名。
③ 变量名中不得包含空格、标点,但可以有下连字符。如变量名A _b21 是合法变量名,而A,21 是不合法的。
(3) 基本运算符
表1 MATLAB 表达式的基本运算符
| 数学表达式 | MATLAB 运算符 | MATLAB 表达式 | |
| 加 | a + b | + | a + b |
| 减 | a-b | - | a-b |
| 乘 | a×b | * | a*b |
| 除 | a÷b | /或\ | a/b或a\\b |
| 幂 | ab | ^ | a^b |
| 点乘 | 两矩阵元素相乘 | .* | a.*b |
在MATLAB 中有一些预定义变量(predefined variable)。每当MATLAB 启动,这些变量就被产生。用户在定义变量时,尽量避开表2 所列预定义变量名,以免产生混淆。
表2 MATLAB 的预定义变量
| 预定义变量 | 含义 | 预定义变量 | 含义 |
| ans | 计算结果的缺省变量名 | NaN或nan | 未定式,如0/0 |
| eps | 机器零阈值 | nargin | 函数输入宗量数目 |
| flops | 浮点运算次数 | nargout | 函数输出宗量数目 |
| Inf 或inf | 无穷大,如1/0 | realmax | 最大正实数 |
| i 或j | 虚单元i = j = | realmin | 最小正实数 |
| pi | 圆周率π |
(5) MATLAB 的矩阵运算 (课本P410-411)
矩阵的输入和矩阵的运算
对课本p410-411中矩阵运算的例子,请在MATLAB 命令窗口中对这些运算进行验证。
3) MATLAB 图形绘制
在二维曲线绘制中,最基本的指令是plot( )函数。如果用户将x 和y 两组数据分别在向量x 和y 中存储,且它们的长度相同,调用该函数的格式为:
plot(x,y)
这时将在一个图形窗口上绘出所需要的二维图形。在MATLAB 命令窗口提示符“>>”下键入 help plot ,可得到plot( )函数的相关内容,如曲线颜色和线型的改变。
任务一:在MATLAB 命令窗口提示符“>>”下,完成下述任务:
任务(1)绘制一个周期内的正弦曲线。先产生自变量t 时间向量,由给出的自变量时间向量求取其正弦函数值向量,然后调用plot( )函数绘制曲线。
任务(2) 在一个绘图窗口上同时绘制多条曲线。参考课本p411-412,写成命令,完成上述任务(1)和任务(2)。
4) M 文件程序设计
对于简单问题,使用直接输入命令简单有效,但对于较复杂和多次重复的问题,直接输入命令比较麻烦,使用M文件则简便。
MATLAB不仅用命令行方式工作,还可以像 BASIC、FORTRAN、C等其他高级计算机语言一样进行控制流的程序设计(MATLAB 语言的流程控制语句主要有 for、while、if-else-end 及 switch-case 等 4 种语句)。MATLAB控制流,即编制一种以 . m为扩展名的 MATLAB 程序(简称 M 文件)。由于商用的 MATLAB 软件是用 C 语言编写而成。因此,M 文件的语法与 C 语言十分相似。
建立和运行M文件程序的过程如下:
1打开M文件编辑窗口:在图1中选择File→New→M-file菜单项实现,在M文件编辑窗口键入M文件的各行命令代码,例如输入课本P412M文件部分的例子代码
2保存文件:在图2中选择File→Save菜单项,保存文件。例如可键入exp1,上述命令行就保存为exp1.m。
图2 建立和运行M文件程序的过程
3调试运行M文件程序:可在图中选择Debug→Run菜单项,全速运行M文件程序。也可用鼠标点击行号后短横线,给程序设置断点,选择Debug→Step,单步运行M文件程序,并根据工作空间管理窗口(Workspace)结果了解每条指令的功能。此外,在MATLAB命令窗口键入exp1(该M文件的名字,注意不写后缀)即可运行该M文件。
任务二:按上面的过程来建立并保存一个M文件程序,并调试运行M文件程序。
5) MATLAB控制系统工具箱中的线性系统传递函数模型的相关函数
(1)tf ( )函数
若要在MATLAB 环境下得到传递函数的形式,可以调用tf ( )函数。该函数的调用格式为 G = tf ( num, den );
其中num, den 分别为系统传递函数的分子和分母多项式系数向量。返回的G 为传递函数形式。
但如果分子或分母多项式给出的不是完全的展开的形式,而是若干个因式的乘积,则事先需要将其变换为完全展开的形式,两个多项式的乘积在MATLAB下借用卷积求取函数conv( )得出,其调用格式为 p=conv(p1,p2)
其中p1和p2为两个多项式,调用这个函数就能返回乘积多项式p。如果有3个多项式的乘积,就需要嵌套使用此函数,即
p=conv(p1,conv(p2,p3)) 或 p=conv(conv(p1,p2),p3)
请注意在调用时括号的匹配。
MATLAB还支持一种特殊的传递函数的输入格式,在这样的输入方式下,应该先用s=tf(’s’)定义传递函数算子,然后用数学表达式直接输入系统的传递函数。请自己通过下面两个例子来演示和掌握tf ()和s=tf(’s’)算子这两种输入方式。
例1 设系统传递函数
输入方式一:num = [1, 5, 3, 2]; den = [1, 2, 4, 3, 1]; %分子多项式和分母多项式
G = tf ( num, den ); %这样就获得系统的数学模型G 了。
这些命令可在命令行输入也可编成一个M文件。在MATLB提示符“>>”下键入G,或省略最后命令中分号,则可显示该数学模型。
输入方式二:s=tf(’s’); G=( s^3 + 5* s^2 + 3* s + 2)/( s^4 + 2*s^3 + 4* s^2 + 3* s + 1);
任务三:设系统传递函数 采用上面两种输入方式,输入其传递函数,并记录命令。
例2 设系统传递函数
此题分子或分母多项式给出的不是完全展开的形式,而是若干个因式的乘积,采用tf () 这一种输入法之前,应先用conv( )函数获得分子和分母多项式给出的完全展开的形式num和den,即输入命令:
num=conv([0,5],[1,2.4]);
den=conv(conv(conv([1,1],[1,1]),[1,3,4]),[1,0,1]);
G=tf(num,den) %语句没有分号结尾,故将显示系统传递函数
Transfer function:
5 s + 12
-------------------------------------------------
s^6 + 5 s^5 + 12 s^4 + 16 s^3 + 15 s^2 + 11 s + 4
这种情况用算子方法可以更直观地输入系统模型,输入命令为
s=tf('s');G=5*(s+2.4)/((s+1)^2*(s^2+3*s+4)*(s^2+1));
任务四:在MATLAB 命令窗口中对例2的这两种输入方法进行验证。
(2)tfdata()函数
如果有了传递函数G,则提取控制系统的传递函数的分子多项式num和分母多项式den可以由tfdata()函数来实现。如输入命令:
s=tf('s');G=5*(s+2.4)/((s+1)^2*(s^2+3*s+4)*(s^2+1))
[num,den]=tfdata(G,'v') %其中'v'表示想获得num和den的数值
任务五:在MATLAB 命令窗口中对该例进行验证。
(3)zpk ()函数
若要得到控制系统零极点传递函数,可以调用zpk ( )函数。该函数的调用格式为
G = zpk ( Z, P,K );
其中K为系统的增益,Z, P 分别为系统传递函数的零点和极点列向量。返回的G 为传递函数形式。
例3 设系统传递函数
输入下面的命令:
Z=[-1.539; -2.7305+2.8538i;-2.7305-2.8538i]; %注意使用列向量,另外注意符号
P=[-1;-2;-3;-4]; G=zpk(Z,P,1);
在MATLB提示符“>>”下键入G,或省略最后命令中分号,则可显示该数学模型。
>> G %下面是MATLB的显示结果
Zero/pole/gain:
(s+1.539) (s^2 + 5.461s + 15.6)
---------------------------------------- -
(s+1) (s+2) (s+3) (s+4)
任务六:在MATLAB 命令窗口中对该例进行验证。
注意在MATLAB的零极点模型显示中,如果有复数零极点存在,则用二阶多项式来表示两个因子,而不直接展成复数的一阶因式。
(4)tf2zp( )函数、zp2tf( )函数
控制系统分子、分母多项式传递函数与控制系统零极点传递函数可以用tf2zp( )、zp2tf( )函数转换。tf2zp( )可将分子、分母多项式的传递函数转换为零、极点增益形式。该函数的调用格式为
[ Z, P,K] = tf2zp ( num, den );
zp2tf( )可将零、极点增益形式转换为分子、分母多项式的传递函数。该函数的调用格式为
[ num, den]= zp2tf ( Z, P,K)
任务七:应用tf2zp( )函数求出例1和任务五中系统的零极点。
4. 实验报告内容
1) 写出MATLAB工作环境平台中四个窗口的功能。
2) 实现实验内容的所有任务,并将答案记录(记录命令代码)。
3) 整理在实验过程中遇到的问题及如何解决的。
每次实验报告形式为:实验名称、实验目的、实验仪器、实验内容(包括以上列出的实验报告内容 1)、2)、3))、分析心得等。
5. 预习要求
1) 阅读实验内容及实验目的。
2) 完成对MATLAB 软件的熟悉工作。
二、 SIMULINK 基本功能与使用
1. 实验目的
1) SIMULINK 的使用方法。
2) 熟悉SIMULINK 模块库的分类及其相应用途。
3) 能够使用SIMULINK 进行系统模型的建立并仿真等。
2. 实验仪器:
PC计算机一台,MATLAB软件1套
3. 实验内容
1) SIMULINK 的启动
启动方式一:在 MATLAB 命令窗口,键入“SIMULINK”
启动方式二:点击窗口上面的 SIMULINK图标。如图3 所示,就打开了 SIMULINK 窗口,进入SIMULINK 库模块浏览界面。
2) SIMULINK 的模型窗口的建立
在 SIMULINK 窗口下,用鼠标点击 new model 图标或选取菜单 File→ New→ Model 后,SIMULINK 会打开一个名为untilited(无标题)的模型窗口,如图4 所示。随后,按用户要求可以在此模型窗口中创建模型及进行仿真运行。
图3 启动SIMULINK
图4 空的模块窗口
3) SIMULINK 模块库
SIMULINK 提供了9 类基本模块库:连续系统模块库(Continous)、离散系统模块库(Discrete)、函数与表模块库(Function&Tables)、数算模块库(Math)、非线性系统模块库(Nonlinear)、信号模块库(Signal Routing)、输出模块库(Sinks)、输入源模块库(Sourses)、子系统模块库(Subsystems)等基本模块库。附录二对本实验书中用到的5个模块:连续系统模块库(Continous)、数算模块库(Math)、信号模块库(Signal Routing)、输出模块库(Sinks)、和输入源模块库(Sourses)的功能进行了介绍。
4) 用SIMULINK 建立系统模型及仿真
(1)例1 以求一个惯性环节的阶跃响应为例,说明模型的建立过程。
①开启 SIMULINK 窗口及模块库:在 MATLAB 命令窗口,键入“SIMULINK”,或点击窗口上面的 SIMULINK图标,如图3 所示,就打开了 SIMULINK 窗口,进入SIMULINK 库模块浏览界面。
②建立新文件:在 SIMULINK 窗口下,用鼠标点击 new model 图标或选取菜单 File→ New→ Model 后,SIMULINK 会打开一个名为untilited(无标题)的空白模型窗口,如图4 所示。新文件建立后,可以用菜单 File 中的 Save as 命令保存程序,这时需要给文件取名。保存的文件扩展应名为.mdl。本例中将文件名命名为examp1.mdl。
③复制模块:双击模块组图标打开模块子库,将鼠标移到所要复制的模块上,然后按下左键并拖动鼠标到目标窗口,再松开键,用右键可在任意窗口内复制模块,此时原模块保留。
本例中需双击Sources图标从信号源库中选中阶跃信号模块,双击Continuous图标从连续系统模块库中选中传递函数模块,双击Sinks图标从显示库中选中示波器模块,分别拖入examp1.mdl目标窗口。
④修改模块参数。通常目标窗口中复制的模块的参数和要求不一致,因此需对这些复制过来的模块参数进行修改。双击复制过来的模块,会出现对一个对话框,在对话框中设置相应参数。
本例中双击Step模块,设置阶跃信号的起始时间从默认的1修改为0、并可根据实际情况设计设置初值和终值;双击Transfer Fcn模块,设置传递函数的表达式,在分子(Numerator)多项式系数处键入[5],在分母(Denominator)多项式系数处键入[0.8,2].
⑤模块之间的连接:模块左侧和右侧尖角>分别表示模块的输入和输出,模块之间的连接按照下述方法进行:鼠标移到一个模块的输入(出)端,按下左键,拖动鼠标到另一个模块的输出(入)端,松开,连线完毕。若要从一条已经存在的连线上引出另一条连线,首先把鼠标指针移到这个连线上,按下右键,拖动鼠标到目标端口,再松开键。按照上述步骤建立的惯性环节模型如图5所示。
图5 用SIMULINK建立的惯性环节模型
⑥若需要选择对象或删除对象,用鼠标左键在所选对象上单击一下,被选对象就会出现相应标记。若要删除模块或连线,首先要选中该模块过连线,然后再按 Delete 或Clear 键。
⑦仿真与显示
若要开始仿真,单击起动仿真的按钮 或选择 Simulation→ Start就可以了。双击 Scope 模块就打开示波器,示波器上就显示出变量随时间变化的曲线。
(2)典型环节仿真与分析
自控系统是由比例、积分、惯性环节等按一定的关系连接而成。熟悉这些惯性环节对阶跃输入的响应,对分析线性系统将是十分有益。
①典型环节的仿真
任务一:写出各典型环节(比例、惯性、积分环节)的传递函数,在纸上记录仿真各典型环节的仿真图及其单位阶跃响应波形,并研究参数变化对输出响应的影响。将题目中的示波器横轴终值修改为20,以便进行环节的比较,回答实验思考题。
实验记录表格如下(供参考)
| 典型环节 | 传函 | 参数 | 单位阶跃响应曲线 | 参数变化对输出影响的结论 |
| 比例环节 | ①K=1②K=5③K=10 | |||
| 惯性环节 | ①τ=0.01 ②τ=1 ③τ=100 | |||
| 积分环节 | ①K=0.01 ②K=1 ③K=10 |
A) 积分环节和惯性环节主要差别是什么?在什么条件下,惯性环节可以近似地视为积分环节?而又在什么条件下,惯性环节可以近似地视为比例环节?
B) 在积分环节和惯性环节实验中,如何根据单位阶跃响应曲线的波形,确定积分环节和惯性环节的时间常数?
任务二:在SIMULINK 环境下搭建阶跃响应时的模型,并用示波器观测输出波形,将示波器横轴终值修改为50,记录仿真图及示波器波形。
A)(传递函数形式)
B) (零极点形式)
4. 实验报告内容
1) 如何修改用到的模块的参数。
2) 示波器模块的功能。
3) 完成所有任务,并将答案记录与思考题回答。
4) 整理在实验过程中遇到的问题及如何解决的。
5. 预习要求
1) 阅读实验内容及实验目的。
2) 完成对SIMULINK 模块库的熟悉工作。
