matlab实验指导书 - 图文

更新时间:2023-10-23 11:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《MATLAB计算与仿真》

实 验 指 导 书

华南理工大学广州汽车学院电子信息工程系

二0一一 年 三 月

1

学生实验守则

1 学生必须在规定时间内参加实验,不得迟到、早退。

2 学生进入实验室后,不准随地吐痰、抽烟和乱抛杂物,保持室内清洁和安静。

3 实验前应认真阅读实验指导书,复习有关理论并接受教师提问检查,一切准备工作就绪后,须经指导教师同意后方可动用仪器设备进行实验。 4 实验中,认真执行操作规程,注意人身和设备安全。学生要以科学的态度进行实验,细心观察实验现象、认真记录各种实验数据,不得马虎从事,不得抄袭他人实验数据。

5 如仪器发生故障,应立即报告教师进行处理,不得自行拆修。不得动用和触摸与本次实验无关的仪器与设备。

6 凡损坏仪器设备、器皿、工具者,应主动说明原因,书写损坏情况报告,根据具体情节进行处理。

7 实验完毕后,将计量器具和被测工件整理好,认真填写实验报告(包 括数据记录、分析与处理,以及绘制必要的图形)。

2

前 言

MATLAB程序设计语言是一种高性能的、用于科学和技术计算的计算机语言。它是一种集数学计算、分析、可视化、算法开发与发布等于一体的软件平台。自1984年MathWorks公司推出以来,MATLAB以惊人的速度应用于自动化、汽车、电子、仪器仪表和通讯等领域与行业。MATLAB有助于我们快速高效地解决问题。MATLAB相关实验课程的学习能加强学生对MATLAB程序设计语言理解及动手能力的训练,以便深入掌握和领会MATLAB应用技术。为后续的《电力电子技术》、《自动控制原理》、《电力系统分析》等专业课程提供数值计算和可视化编程工具。

3

目 录

实验一 MATLAB概述实训 ...................................................................................................................1 实验二 MATLAB基本运算实训 .........................................................................................................10 实验三 MATLAB图形绘制实训 .........................................................................................................17 实验四 MATLAB符号计算实训 .........................................................................................................24 实验五 程序设计和M文件实训 ........................................................................................................29 实验六 GUI 图形用户接口设计实训 .................................................................................................36 实验七 Simulink仿真环境实训 ..........................................................................................................45 实验八 线性控制系统设计分析实训 ..................................................................................................53

4

实验一 MATLAB概述实训

一、实验目的

1.了解MATLAB语言的基本功能和特点; 2.熟悉MATALB的基本界面。

二、实验仪器、设备

安装MATLAB6.0或以上版本的计算机。

三、实验原理

1. MATLAB 的界面 1)MATLAB 的主界面

2)MATLAB 的的工具栏

3)MATLAB 的窗口-命令窗口

打开 MATLAB 时,命令窗口自动显示于 MATLAB 界面中。

1

图中的“>>”是运算提示符,表示 MATLAB 处于准备状态,用户可以输入命令,按下回车 键执行,并在命令窗口中显示运行结果。 输入程序语言:

按下确定键后,会生成相应图像:

2

4)MATLAB 的窗口-命令历史窗口

默认情况下命令历史窗口位于左下角,显示用户曾经输入过的命令,并显示输入的时间, 方便用户查询。

命令历史窗口

对于命令历史窗口中的命令,用户可以点击右键进行相应的操作。

3

用户可以双击再次执行命令窗口中的命令。

5)MATLAB 的窗口-工作区窗口

4

工作区窗口与当前路径窗口共享一块空间,可以通过标签显示或隐藏。工作区窗口中显示当前工作区中的所有变量及其大小和类型等。通过工作区可以对这些变量进行管理。其中包含了工作区工具栏和显示窗口。通过工具栏可以新建或删除变量、导入导出数据、绘制变量的图形等。另外右键单击变量名可以对该变量进行操作。

工作区窗口

6)MATLAB 的窗口-当前路径窗口

当前路径窗口显示当前路径下的所有文件和文件夹及其相关信息,并且可以通过当前路 径工具栏或右键菜单对这些文件进行操作。

当前路径窗口

2. Matlab 的路径搜索

1)路径设置

除 MATLAB 默认的搜索路径外,用户可以设置搜索路径。设置方法为:选择 MATLAB 窗口中的 File | Set Path 命令,进入路径搜索对话框。

5

添加选中目录 添加选中目录级

路径设置函数

path 命令

在命令窗口中输入 path 命令可以查看 MATLAB 中的搜索路径: >> path

MATLAB PATH

C:\\MATLAB\\R2006a\\toolbox\\matlab\\general C:\\MATLAB\\R2006a\\toolbox\\matlab\\ops C:\\MATLAB\\R2006a\\toolbox\\matlab\\lang C:\\MATLAB\\R2006a\\toolbox\\matlab\\elmat ……

path('newpath') 命令改变搜索路径 2) MATLAB 的搜索顺序

当在命令窗口中或者一个 M 文件中输入一个元素名称时,MATLAB 按照下面的顺序 搜索该元素的意义,以元素 foo 为例: 1)查找工作区中是否存在名为 foo 的变量; 2)在当前路径中查找是否存在名 foo.m 的文件;

6

②用数组生成函数生成数组 eye:生成单位矩阵

linspace:生成线性分布的向量

rand:生成随机数组,数组元素值均匀分布 3. 数组的寻址与排序 1) 数组的寻址

数组中总是包含多个元素,因此在对数组的单个元素或者多个元素进行访问时,需要对数组进行寻址运算。

在 MATLAB 中,数组寻址是通过对数组下标的访问来实现的。 如果需要访问数组种的多个数据,可以通过下标数组进行

当下标数组为利用冒号表示的等差数组时,可以省略下标数组的中括号 2) 数组的排序

在很多时候我们需要对一个给定的数据向量进行排序。为完成这一操作,MATLAB 提 供了 sort 函数,该函数将任意给定的序列进行排序。

sort 函数的调用格式有: B = sort(A) B = sort(A,dim) B = sort(...,mode) [B,IX] = sort(...)

其中的 B 为保存结果的数组;A 为待排序的数组,当 A 为多维数组时,用 dim 指定需要排序的维数(默认为1);mode 为排序的方式,可以取值“ascend”和“descend”,分别表示升序和降序,默认为升序;IX 用于存储排序后的下标数组。

4. 数组的运算

数组的数值运算有加减法、乘除法及乘方: 1) 数组的加减法

数组加减法为数组元素的加减法,与矩阵加减法相同。利用运算符“+”和“-”实现该运算。 需要注意的是相加或相减的两个数组必须有相同的维数,或者是数组与数值相加减。 2) 数组的乘除法

数组乘除为元素的乘除,通过运算符“.*”和“./”来实现。运算时需要两个数组有相同的

12

维数,或者数组与数值相乘除。

注意:在进行除法操作时,作为分母的数组中不能包含 0 元素。 3) 数组的乘方

数组乘方用符号“.^”实现。数组乘方运算以三种方式进行。

① 底为数组,指数为标量的形式。这种形式的结果是将数组的每个元素进行指数相同的乘方。返回的结果为与底维数相同的数组,结果数组的每个元素为底中相应元素的乘方。

② 底为标量,指数为数组的形式。该形式返回的结果为数组,维数与指数数组相同。结果数组的每个元素为底以指数数组相应元素为指数做乘方的结果。

③ 底和指数都是数组的形式。此时两个数组需要有相同的维数。返回结果为一个数组,维数与前面两个数组相同,每个元素为底数数组和指数数组做乘方的结果

5.创建字符串

字符串由多个字符组成,是1×n的字符数组;每一个字符都是字符数组的一个元素, 以ASCII码的形式存放并区分大小,而显示的形式则是可读的字符。 1)创建字符串

用单引号('')括起字符来直接赋值创建字符串。MATLAB在存储字符串时,每一个字符以ASCII码的形式存放,占用两个字节。 2)字符串合并

strcat函数用于将字符串水平连接合并成一个新字符串,合并的同时会将字符串尾的空格删除。语法格式如下:

strcat(s1,s2,?)

%将s1,s2?合并成一个长字符串

char(s1,s2,?) %将s1,s2?合并成一个字符数组 strvcat(s1,s2,?) %将s1,s2?合并成一个字符数组 3)字符串与数值的转换

abs将字符串转换为ASCII码数值

str2num将字符串转换为数值

str2double将元胞字符串数组转换为数值 4)字符串的其他操作

MATLAB 7.3还可以对字符串进行比较、查找、运行等操作。

6.元胞数组

13

元胞数组是常规数值数组的扩展,其基本元素是元胞,每一个元胞可以看成是一个单元(Cell),用来存放各种不同类型不同尺寸的数据,如矩阵、多维数组、字符串、元胞数组和结构体。

元胞数组可以是一维、二维或多维,使用花括号({})表示,每一个元胞以下标区分,下标的编码方式也与矩阵相同,分为单下标方式和全下标方式。

1)创建元胞数组

cell函数创建元胞数组的语法格式: A=cell(m,n)

%创建m×n元胞数组

2)元胞数组的操作

① 用{}取元胞数组的元素内容 ② 用()取元胞数组的元素

③ 用deal函数取多个元胞元素的内容 7.结构体

结构体的基本组成是结构,每一个结构都包含多个字段(Fields),结构体只有划分了字段以后才能使用。

1)创建结构体 ① 直接创建

直接使用赋值语句创建结构体,用“结构体名.字段名”的格式赋值。 >> ps(1).name='曲线1'; ② 利用struct函数创建

struct('field1',值1,'filed2',值2,?) 2)获取结构体内部数据 ① 使用“.”符号获取 ② 用getfield函数获取

getfield(A,{A_index},'fieldname',{field_index}) ③ 使用fieldnames函数获取结构体的所有字段 fieldnames (array)%获取结构体的所有字段 ④ 使用“[]”合并相同字段的数据 3)结构体的操作函数

%创建结构体将值赋给各字段

14

① 删除结构体的字段 rmfield(A,'fieldname') ② 修改结构体的数据

setfield(A,{A_index},'fieldname',{field_index},值) ③ 结构体转换为元胞数组

>> ps=setfield(ps,{1},'color','green'); 8.关系及逻辑运算

关系运算允许常量(或矩阵中的元素与元素) 之间的比较. 如果比较结果为真,则答案为1, 否则为0. 常用的关系运算符如下:

< 小于 , > 大于 , == 等于 <= 小于等于, >= 大于等于, ~= 不等于

对于复数”==” 和”~=” 既比较实部也比较虚部, 而其它运算仅比较实部。 MATLAB有三个逻辑运算符.

& 逻辑与 | 逻辑或 ~ 逻辑非

在矩阵运算中,以上命令是将两个矩阵中的对应元素进行运算, 得到的结 果是具有同样元素的矩阵。

9. 多项式的运算 1) 多项式求根

使用roots函数来计算多项式的根,多项式的根以列向量的形式表示;反过来,也可以根据多项式的根使用poly函数获得多项式。

2) 多项式求值

函数polyval和polyvalm可以用来计算多项式在给定变量时的值。 3) 多项式的乘法和除法

多项式的乘法和除法运算分别使用函数conv和deconv来实现。 p=conv(pl,p2) %计算多项式p1和p2的乘积 [q,r]=deconv(pl,p2) 4) 多项式的微积分

使用polyder函数来计算多项式的微分: polyder(p)

%计算p的导数

%计算多项式p1与p2的商

%删除字段

15

polyder(a,b) %计算a和b乘积的导数

%计算a和b商的导数

[q,d]= polyder(b,a)

MATLAB没有专门的多项式积分函数,但可以通过以下的公式计算完成积分: [p./(length(p):-1:1),k] %计算多项式p的积分 5) 多项式的拟合与插值 拟合函数 p=polyfit(x,y,n)

%由x和y得出多项式p

说明:x、y向量分别为数据点的横、纵坐标;n是拟合的多项式阶次;p为拟合的多项式,p是n+1个系数构成的行向量。

一维插值是指对一个自变量的插值,interp1函数用来进行一维插值: yi=interp1(x,y,xi,'method')

四、实验预习要求

1. 实验前,学生须仔细阅读本实验指导书的相关内容,明确实验目的、要求; 2. 复习与实验内容有关的理论知识。

五、实验内容及步骤

1. 分别创建一个一维,二维及复数数组; 对数组进行寻址、排序和简单的运算 2. 对向量和矩阵的作运算

3. 创建一个元胞数组,对其进行基本的运算 4. 创建一个字符串,对其进行基本的运算

5. 创建结构体,获取结构体内部数据,对结构体进行基本的函数操作 6.任选一多项式,对进行多项式求根、求值、微积分、拟合和插值的操作

六、实验报告要求

1. 实验目的 2. 实验内容

3. 实验程序(命令)清单 4.运行结果,保存截屏 5.实验收获与体会

七、思考题

16

'HandleVisibility','callback', ... 'String',mPlotTypes(:,1),... 'Style','popupmenu');

④ 创建 Update 按钮的代码为:

hUpdateButton = uicontrol(... % Button for updating selected plot 'Parent', hMainFigure, ... 'Units','normalized',... 'HandleVisibility','callback', ... 'Position',[0.6 0.85 0.3 0.1],... 'String','Update',...

'Callback', @hUpdateButtonCallback);

⑤ 创建 File 菜单需要首先创建菜单,再依次创建菜单中的项目,代码如下:hFileMenu = uimenu(... % File menu 'Parent',hMainFigure,... 'HandleVisibility','callback', ... 'Label','File');

hOpenMenuitem = uimenu(... % Open menu item 'Parent',hFileMenu,... 'Label','Open',...

'HandleVisibility','callback', ...

'Callback', @hOpenMenuitemCallback); hPrintMenuitem = uimenu(... % Print menu item 'Parent',hFileMenu,... 'Label','Print',...

'HandleVisibility','callback', ... 'Callback', @hPrintMenuitemCallback);

hCloseMenuitem = uimenu(... % Close menu item 'Parent',hFileMenu,... 'Label','Close',...

42

'Separator','on',...

'HandleVisibility','callback', ...

'Callback', @hCloseMenuitemCallback');

⑥ 创建工具栏与创建菜单相同,需要首先创建工具栏,然后依次创建其中的工具。 hToolbar = uitoolbar(... % Toolbar for Open and Print buttons 'Parent',hMainFigure, ... 'HandleVisibility','callback');

hOpenPushtool = uipushtool(... % Open toolbar button 'Parent',hToolbar,... 'TooltipString','Open File',...

'CData',iconRead(fullfile(matlabroot,... 'toolbox\\matlab\\icons\\opendoc.mat')),... 'HandleVisibility','callback', ...

'ClickedCallback', @hOpenMenuitemCallback); hPrintPushtool = uipushtool(... % Print toolbar button 'Parent',hToolbar,...

'TooltipString','Print Figure',... 'CData',iconRead(fullfile(matlabroot,... 'toolbox\\matlab\\icons\\printdoc.mat')),... 'HandleVisibility','callback', ...

'ClickedCallback', @hPrintMenuitemCallback); 5) 初始化 GUI

创建打开该 GUI 时显示的图形,并且定义输出参数值。 % Update the plot with the initial plot type localUpdatePlot();

% Define default output and return it if it is requested by users mOutputArgs{1} = hMainFigure; if nargout>0

[varargout{1:nargout}] = mOutputArgs{:};

43

End

该 GUI 中共有六个控件由响应函数控制,但是由于工具栏 Open 工具和 File 菜单中的 Open 选项共用一个响应函数,工具 Print 和菜单项 Print 共用一个响应函数,因此,共需要定义四个响应函数。

Update 按钮的响应函数 Open 项的响应函数 Print 菜单项的响应函数 Close 菜单项的响应函数

四、实验预习要求

1. 实验前,学生须仔细阅读本实验指导书的相关内容,明确实验目的、要求;2. 复习与实验内容有关的理论知识。

五、实验内容及步骤

1. 通过 GUIDE 创建 GUI 2. 通过程序创建 GUI

六、实验报告要求

1. 实验目的 2. 实验内容

3. 实验程序(命令)清单 4.运行结果,保存截屏 5.实验收获与体会

七、思考题

44

实验七 Simulink仿真环境实训

一、实验目的

1.熟悉Simulink的工作环境,掌握模型的创建。

2. 熟练掌握模块参数的设置和常用模块的使用。

二、实验仪器、设备

安装MATLAB6.0或以上版本的计算机。

三、实验原理

1. SIMULINK 的启动

1)在 MATLAB 命令窗口中输入simulink 后回车。

2)单击 MATLAB 界面工具栏的图标。进入Simulink Library Browser 模块浏览器(见下图)

2. SIMULINK 常用模块库介绍 1) 连续模块库(Continuous)

① Integrator(积分模块):输入信号的连续时间积分。该模块将输入信号进过数值积分,在输

45

出端直接反应出来。

模块功能:对输入变量进行积分。 说 明:

(a)输入的信号即可以是标量,也可以是矢量。 (b)输入信号的维数必须与输入信号保持一致。 ② Derivative(微分模块) 数值微分

该模块将输入端的信号经过一阶数值微分,在输出端输出。

模块功能:通过计算差分du/dt近似计算输入变量的微分。du 为输入变量,dt 为自前一次仿真以来的时间变化量。

说 明:

(a)模块的输入可以是标量,也可以是矢量。

(b)在仿真开始前的输入信号值假设为0,模块的初始输出为0。 (c)微分结果的准确性取决于仿真步长,步长越小,输出结果越精确。 ③Transfer-Fcn (传递函数模块):分子分母形式的线性传递函数模块。 传递函数常用来描述频域下的线性微分方程,是线性化的一种时域描述。 模块功能:用于执行一个线性传递函数。 说 明:

(a)传递函数的一般形式。

(b)分母的多项式就是系统的特征多项式。

C(s)b1sm?b2sm?1?......?bms?bm?1 G(s)??R(s)a1sn?a2sn?1?......?ans?an?1④ Zero-Pole(零极点传递函数模块):以零极点表示的传递函数模型该模块用于实现一个特定的零极点系统。

模块功能:用于建立一个预定的零点、极点,并用延始算子S 表示的连续系统。 说 明:

(a)系统的零点、极点或为实数,或为共轭复数形式出现。

(b)此模块的设置为: Zeros 参数设置零点矢量;Poles 参数设置极点矢量;Gain 参 数设置增益系数。

2) Math Operation(数学模块)

46

1)创建 GUI 界面

打开 GUIDE,新建 GUI,保存为 two_axes。向其中添加控件并设置这些控件的属性。 设置 f1 的 Tag 属性为 f1_input,初始值为 50,f2 的 Tag 属性为 f2_input,的初始值为 120,t 的 Tag 属性为 t_input,的初始值为 0:.001:0.25。这些初始值为打开该GUI 时的默认值。

由于该 GUI 中包含两个图形,在绘制图形时必须指定坐标系。为实现这一功能,可以 使用 handles 结构体,该结构体中包含 GUI 中所有控件的句柄。该结构体中的域名为控件 的 Tag 属性值。在本 GUI 中,我们设置绘制函数时域的坐标系的句柄为 time_axes,绘制 频域图形的坐标系为 frequency_axes,如图所示。

设置后,在响应函数中,可以通过 handles.frequency_axes 实现对该坐标系的调用。 设置控件完成后,设置 GUI 的属性。在 Tools 菜单中选择 GUI options?,弹出窗口 如图所示。

37

设置 Resize behavior 为

Proportional ,允许用户改变该 GUI 的大小,并且改变窗口大小时,GUI 中的控件大小按照比例同时改变。 控件大小按照比例同时改变。 设置 Command-line accessibility 为 Callback 允许响应函数调用句柄,因此可以在响应函数中向坐标系中绘制图形

该 GUI 需要从界面中读入参数,利用读入的参数计算函数的快速傅立叶变换,之后绘 制图形。需要的响应函数只有一个,即按钮的响应函数。该函数的内容为:

function plot_button_Callback(hObject, eventdata, handles) % hObject handle to plot_button (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get user input from GUI

f1 = str2double(get(handles.f1_input,'String')); f2 = str2double(get(handles.f2_input,'String')); t = eval(get(handles.t_input,'String')); % Calculate data

x = sin(2*pi*f1*t) + sin(2*pi*f2*t); y = fft(x,512); m = y.*conj(y)/512; f = 1000*(0:256)/512; % Create frequency plot

38

axes(handles.frequency_axes) % Select the proper axes plot(f,m(1:257))

set(handles.frequency_axes,'XMinorTick','on') grid on

% Create time plot

axes(handles.time_axes) % Select the proper axes plot(t,x)

set(handles.time_axes,'XMinorTick','on') grid on

代码完成后保存,运行该 GUI,得到结果如图:

2. 通过程序创建GUI

1)需要实现的功能及需要包含的控件

要创建的 GUI 其功能为在坐标系内绘制用户选定的数据,包含的控件包括:坐标系; 弹出菜单,其中包含五个绘图选项;按钮,更新坐标系中的内容;菜单栏,其中包含 File 菜 单,菜单中包含三个选项,为 Open、Print 和 Close;工具栏,包含两个按钮,为 Open 和

39

Print。

打开该 GUI 时,在坐标系中显示五组随机数。用户可以通过弹出菜单选择绘制其他图形,选择后点击 Update 按钮更新图形。该 GUI 的最终界面如图所示。

2)需要使用的技术

在该 GUI 创建的过程中,需要应用的技术包括:当打开 GUI 时,向其传递输入参数;GUI 返回时,得到其输出参数;处理异常变化跨平台运行该 GUI;创建菜单;创建工具栏;大小改变功能。

3)创建GUI

定义两个变量:mOutputArgs 和 mPlotTypes。

mOutputArgs 为单元数组,其内容为输出值。在后面的程序将为其定义默认值。mOutputArgs 的定义语句为:

mOutputArgs = {}; % Variable for storing output when GUI returns。

mPlotTypes 是一个 5×2 单元数组,其元素为将要在坐标系中绘制的数据。第一列为字符串,

40

显示在弹出菜单中,第二列为匿名函数句柄,是待绘制的函数。

其定义语句为:

mPlotTypes = {... % Example plot types shown by this GUI 'plot(rand(5))', @(a)plot(a,rand(5));

'plot(sin(1:0.01:25))', @(a)plot(a,sin(1:0.01:25)); 'bar(1:.5:10)', @(a)bar(a,1:.5:10); 'plot(membrane)', @(a)plot(a,membrane); 'surf(peaks)', @(a)surf(a,peaks)};

mPlotTypes 的初始化语句写于函数的开始部分,这样后面的所有响应函数都可以使用该变量的值。

4)创建GUI 界面和控件 ① 创建主界面代码如下:

hMainFigure = figure(... % The main GUI figure 'MenuBar','none', ... 'Toolbar','none', ...

'HandleVisibility','callback', ... 'Color', get(0,...

'defaultuicontrolbackgroundcolor')); ② 创建坐标系的代码为:

hPlotAxes = axes(... % Axes for plotting the selected plot 'Parent', hMainFigure, ... 'Units', 'normalized', ... 'HandleVisibility','callback', ... 'Position',[0.11 0.13 0.80 0.67]); ③ 创建弹出菜单的代码为:

hPlotsPopupmenu = uicontrol(... % List of available types of plot 'Parent', hMainFigure, ... 'Units','normalized',...

'Position',[0.11 0.85 0.45 0.1],...

41

本文来源:https://www.bwwdw.com/article/i4uf.html

Top