MATLAB程序设计实验

更新时间:2023-09-18 05:27:01 阅读量: 幼儿教育 文档下载

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

系立项建设 实验指导书

MATLAB程序设计与应用实验

主 编:王 春、段守付

物理与电子信息工程系

目 录

前 言 .................................................. 2 实验一 熟悉MATLAB 环境................................... 3 实验二 数值数组创建、应用及可视化 ........................ 7 实验三 字符串数组的使用、简单脚本文件和函数的编写 ....... 11 实验四 数据可视化方法 ................................... 18 实验五 简单数据分析 ..................................... 24 实验六 MATLAB 仿真初步 .................................. 28 实验七 电路模型仿真应用 ................................. 31 实验八 简单图形用户界面设计 ............................. 33 附录:MATLAB 主要函数指令表(按字母顺序索引) ........... 36

1

前 言

美国MathWorks公司推出的MATLAB是一种集数值计算、符号、运算、可视化建模、仿真和图形处理等多种功能于一体的优秀编程、仿真工具,被誉为“巨人肩膀上的工具”、“演算纸式的编程语言”,是从事科学研究、工程计算的广大科技工作者、理工类高校师生确认为必须掌握的计算工具,是从理论通向实际的桥梁,也是最可信赖的科技资源之一。

为了配合学生上机实践,更好掌握MATLAB 的基本使用技能,了解MATLAB 的编程风格,以及将所学课程与MATLAB 实践相结合,特别编写了本实验讲义。其主要内容包括:MATLAB 入门及基本操作,数组、矩阵的使用及数据可视化方法,脚步文件及函数的编写,以及仿真、图形用户界面入门等。MATLAB 内容丰富,内嵌了许多功能函数。

为了方便课堂教学使用,也顾及查阅功能,在书后的索引中按照字母顺序对常见MATLAB 函数进行了分类,以备读者查阅需要。

本书编写由王春、段守付完成。

由于编者水平有限,书中难免存在不妥之处,恳请广大读者指正。同时,我们也会在适当时间进行修订和补充。

2

实验一 熟悉MATLAB 环境

[实验目的]

1.熟悉MATLAB 主界面,并学会简单的菜单操作。 2.学会简单的矩阵输入与信号输入。 3.掌握部分绘图函数。

[实验原理]

MATLAB 是以复杂矩阵作为基本编程单元的一种程序设计语言。它提供了各种矩阵的运算与操作,并有较强的绘图功能。

用户第一次使用MATLAB 时,建议首先在屏幕上键入demo 命令,它将启动MATLAB 的演试程序,用户可在此演示程序中领略MATLAB 所提供的强大的运算与绘图功能。也可以键入help 进行进一步了解。MATLAB 启动界面如图所示:

操作界面主要的介绍如下:

", 指令窗(Command Window),在该窗可键入各种送给MATLAB 运作的指令、函数、表达 式,并显示除图形外的所以运算结果。

", 历史指令窗(Command History),该窗记录已经运行过的指令、函数、表达式;允许 用户对它们进行选择复制、重运行,以及产生M 文件。

", 工作空间浏览器(Workspace Browser),该窗口罗列出MATLAB 工作空间中所有的变量 名、大小、字节数;并且在该窗中,可对变量进行观察、编辑、提取和保存。

3

其它还有当前目录浏览器( Current Directory Browser ) 、M 文件编辑/ 调试器 (Editor/Debugger)以及帮助导航/浏览器(Help Navigator/Browser)等,但通常不随操 作界面的出现而启动。

利用File 菜单可方便对文件或窗口进行管理。其中File | New 的各子菜单,M-file(M 文件)、Figure(图形窗口)、或Model(SIMULINK 编辑界面)分别可创建对应文件或模块。Edit 菜单允许用户和Windows 的剪切板交互信息。

MATLAB 语言最基本的赋值语句结构为:变量名列表=表达式。表达式由操作符或其它字符,函数和变量名组成,表达式的结果为一个矩阵,显示在屏幕上,同时输送到一个变量中并存放于工作空间中以备调用。如果变量名和“=”省略,则ans 变量将自动建立,例如键入:1900/81,得到输出结果:ans =23.4568。MATLAB 中变量命名的原则要求必须以英文字母开头,文件夹名字中可以还包括、下划线和数字,不要使用其他的字符,更不要单纯使用数字或者中文名命名,有时在运行MATLAB 中一些莫名的错误可能就是不规范的命名引起的。这种规则包括将来为自己编写的脚本文件、函数文件命名以及为使用的变量命名也应遵循这个规则。

[实验内容]

一.用户工作目录和当前目录的建立和设置

1. 为管理方便,每个用户在使用MATLAB 前,尽量为自己建立一个专门的工作目录,即“用

户目录”,用来存放自己创建应用文件。例如首先打开资源管理器,在E 驱动器下可以根据自己喜好建立一个新文件夹,但应注意:该文件夹必须以英文开头,文件夹名字中可以包括字母、下划线和数字,不要使用其他的字符,更不要单纯使用数字或者中文名命名,有时在运行MATLAB 中一些莫名的错误可能就是不规范的命名引起的,这与MATLAB 中为变量和文件名命名原则是一致的。尽管MATLAB\\work允许用户存放用户文件,但最好把它仅作为临时工作目录来使用。

2. 为了用户运行方便,在开始工作前可把用户定义的目录设置为当前目录,方法是可直接

在MATLAB 命令窗口桌面上方通过目录设置栏来实现。

3. 把自己的工作目录加到MATLAB 搜索路径上,这样可以在任何情况下方便地调用自己的

编写文件。MATLAB 工作时,基本搜索过程为:首先在工作空间,即MATLAB 内存中进行检查,看输入的指令是不是变量;如不是,则检查输入指令是不是内建函数(比如sin 函数等);如不是,则在当前目录上,检查是否有与输入指令相同的M文件存在;如还没有,则在MATLAB 定义的搜索路径其他目录中,检查是否有该M文件存在。设置方法是通过File 菜单下设置路径对话框进行。 二.熟悉简单的矩阵输

4

1. 从屏幕上输入矩阵A=[1 2 3;4 5 6;7 8 9] 回车

A=[1,2,3;4,5,6;7,8,9] 回车 观察输出结果。

2. 试用回车代替分号,观察输出结果。 3. 输入size(A),观察结果。

4. 输入矩阵B=[9,8,7;6,5,4;3,2,1];回车

输入矩阵C=[4,5,6;7,8,9;1,2,3];回车,然后分别键入A B C 回车观察结果。 5. 选择File|new 菜单中的M-file,输入B=[9 ,8,7;6,5,4;3,2,1];保存为B.M 文件,退出编辑环境。此时在工作环境中使用B 命令就可调出B 矩阵。 6. 再试着输入一些矩阵,矩阵中的元素可为任意数值表达式,但注意:

矩阵中各行各列的元素个数需分别相等,否则会给出出错信息。 7. 输入who 和whos 观察结果,了解其作用。 二.常用基本命令的使用

数据文件的存取训练:利用save 和load 指令可以方便地把当前工作空间的数据变量保 存为数据文件。接题一,输入:save a 回车,表示把当前工作空间的所有变量保存为a.mat 文件。输入save a A C 回车,表示把当前内存中的变量A、C 保存为a.mat 文件。类似的还有load 命令,实现保存数据变量的装载,执行clear 命令,然后运行load a 回车,观察工作空间的变化。save、load、clear 命令还有一些其他的应用格式,具体可参看帮助文件。 三.基本序列运算

1. 数组的加减乘除和乘方运算

2. 输入A=[1 2 3],B=[4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B,并用stem

画出A,B,C,D,E,F,G。再输入一些数组,进行类似运算。

3. 在命令窗口用plot 指令粗略描绘下列各函数的波形(其中对于连续信号可取时间间隔

为0.001,可参看下面的a 的实例来实现,数学函数MATLAB 实现参见附录)

?ta. f(t)?3?e 0?t?3

实现方法,在命令窗口执行一下指令,可简单描绘出函数曲线: t=0:.001:3; y=3-exp(-t); plot(t,y) b. f(t)?5e?t?3e?2t 0?t?3

?tc. f(t)?esin2?t 0?t?3

d. f(t)?sinat/at ? 2π < t < 2π (π在MATLAB 中用pi 来实现)

kf. f(k)?e 0?k?5

三.M 脚本文件编写初步

5

用M 文件编辑器编写脚本文件重新描绘上面函数波形。

6

实验二 数值数组创建、应用及可视化

[实验目的]

1.掌握二维数组的创建、寻访,区分数组运算与矩阵运算的区别。 2.掌握标准数组生成函数和数组构造技法。 3.进一步熟悉M 脚本文件编写的方法和技巧。

[实验原理]

数值数组和数组运算MATALB 核心内容,是MATLAB 最重要的一种内建数据类型。通常, 数组是由一组实数或复数排成的长方阵列(Array ),它可以是一维的“行”或“列”,可以 是二维的“矩形”,也可是三维的若同维矩形的堆叠,甚至是更高的任意维。而数组运算是 指无论在数组上施加什么运算(加减乘除或函数),总认定那种运算对被运算数组中的每个元 素(Element)平等地时实施同样的操作。这使得计算程序简单、易读,使程序指令更接近教 科书上的数学计算公式,并提高了程序的向量化程度,提高计算效率,节省计算机开销。

一维数组的创建可采用逐个元素输入法,这是最简单,但又最通用的构造方法,如: x=[2 pi/2 sqrt(3) 3+5i];另外有规律的产生数组可以采用冒号生成法,通用格式是x = a : inc : b,a 是数组的第一个元素,inc 是采样点之间的步长。若(b-a)是inc 的整数 倍,则生成数组的最后一个元素是b,否则小于b。或者采用定数线性采样法,该法是在设定 “总点数”下,均匀采样生成一维“行”数组。格式为x = linspace ( a , b , n ),a、 b 分别是生成数组的第一个各最后一个元素,n 是采样总点数,该指令生成(1×n)数组。

二维数组是由实数或复数排列成矩形而构成的。从数据结构上看,矩形和二维数组没 有什么区别。当二维数组带有线性变换含义时,该二维数组就是矩阵。二维数组的创建也可 采用直接输入法,或者利用构造M 文件创建和保存数组。

除此以外,还可以采用MATLAB 提供的标准函数生成我们需要的数组,诸如zeros、ones、 rand、eye、diag、magic 等,详请见附录。

一维数组元素的寻访和标识采用X(index)方法,只是要注意MATLAB 中第一个元素下 标index 是1,而不是C 语言中的0。二维数组元素的标识和寻访可分为“全下标”标识和 “单下标”标识,“全下标”标识,即指出是“第几行,第几列”的元素,如A(3,5)表示二 维数组A 的第三行第五列元素。该标识法的优点是几何概念清楚,引述简单,在MATLAB 的 寻址和赋值中最为常用。“单下标”标识,顾名思义就是只用一个下标来指明元素在数组中 的位置,首先对二维数组的所有元素进行“一维编号”。“一维编号”是指:先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列”,然后自上往下对元素未知进行编号,其优点是简洁、方便,特别是如果碰到对二维数组进行诸如for 循环操作时可以

7

减少循环次数,提高编程效率。“全下标”标识和“单下标”标识可以通过sub2ind 和ind2sub 指令进行转换,详见帮助。另外,不论二维数组还是一维数组还可以采用“逻辑1”标识, 这种方法常用于寻找数组中所有大于或小于某值的元素的问题中。比如X(abs(X)>3)可以找 出数组X 中所有绝对值大于3 的元素。另外还可以借助ones, zeros, rand, randn 和cat, repmat, reshape 等函数直接或间接构作高维数组,详见附录或MATLAB 帮助。

Matlab 中的许多函数可以直接对任意维的数组直接运算,相当于对数组中的每个元素 分别进行运算。比如Y=sin(X)可以直接得到与数组X 中每一个元素相对应的的正弦值,这 大大简化了编程。可以执行数组运算的常用函数已经列表于附录中,以供参考。但值得注意 的是,虽然从外观形状和数据结构上看,二维数组和(数学中的)矩阵)没有区别,但矩阵 作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则。数组运算是MATLAB 软件所定义的规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有 效。为了区别数组和矩阵运算,在易混淆的地方,数组运算在运算符前加一小黑点“.”以 示区别,比如Y=A.*B,代表的示数组A 和数组B 对应元素相乘,而Y=A*B,则表示内维相同 的矩阵A 和B 的乘积。由此也可看出,在执行数组与数组的运算时,参与运算的数组必须同 维,运算所得结果也总与原数组同维。

本节只涉及数组可视化方法的简单实现。通常,对于离散数据可采用stem 命令或者使 用plot 绘点的方法,而对于连续函数可直接采用plot 指令来实现。

[实验内容]

一.数组的创建和寻访

1.一维数组

在命令窗口执行下面指令,观察输出结果,体味数组创建和寻访方法,%号后面的为注 释,不用输入。

rand('state',0) %把均匀分布伪随机发生器置为0 状态 x=rand(1,5) %产生(1× 5) 的均布随机数组 x(3) %寻访数组x 的第三个元素。

x([1 2 5]) %寻访数组x 的第一、二、五个元素组成的子数组。 x(1:3) %寻访前三个元素组成的子数组

x(3:end) %寻访除前2 个元素外的全部其他元素。end 是最后一个元素的下标。 x(3:-1:1) %由前三个元素倒排构成的子数组 x(find(x>0.5)) %由大于0.5 的元素构成的子数组

x([1 2 3 4 4 3 2 1]) %对元素可以重复寻访,使所得数组长度允许大于原数组。 x(3) = 0 %把上例中的第三个元素重新赋值为0

x([1 4])=[1 1] %把当前x 数组的第一、四个元素都赋值为1 x[3]=[]; %空数组的赋值操作

8

2.二维数组

(1)在命令窗口执行下面指令,观察输出结果

a=2.7358; b=33/79; %这两条指令分别给变量 a ,b 赋值。

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] %这指令用于创建二维数 %组C

M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16] %创建复数数组的另一种方法 CN=M_r+i*M_i %由实部、虚部数组构成复数数组

(2)利用M 文件创建和保存下面的数组(分号后面是一个空格后加3 个小数点,表示 换行续写)

AM=[101,102,103,104,105,106,107,108,109;... 201,202,203,204,205,206,207,208,209;... 301,302,303,304,305,306,307,308,309]; (3)仿照问题1 中方法找出数组A??元素。

(4)在命令窗口执行下面指令,体会二维数组的子数组寻访和赋值

??4?2024?A 中所有绝对值大于3 的 ???3?1135?A=zeros(2,4) %创建(2 × 4) 的全零数组 A(:)=1:8 %全元素赋值方式 s=[2 3 5]; %产生单下标数组行数组

A(s) %由“单下标行数组”寻访产生A 元素组成的行数组 Sa=[10 20 30]’ %Sa 是长度为3 的“列数组” A(s)=Sa %单下标方式赋值

A(:,[2 3])=ones(2) %双下标赋值方式:把A 的第2、3 列元素全赋为1 (5)运行指令

rand(‘state’,11),A=rand(3,10000);B=(A>0.5);C=2*B-1;

首先预测(C*C’)/100 的运行结果,然后再在机器上验证。(本方法提供了产 生通信等仿真中常需若干独立的双随机码的方法原型。) (6)在命令窗口执行下面指令,体味数组运算与矩阵运算的区别

clear;A=zeros(2,3);

A(:)=1:6; %全元素赋值法

A=A*(1+i) %运用标量与数组乘产生复数矩阵

A_A=A.' %数组转置,即非共轭转置,其中单引号实现转置功能 A_M=A' %矩阵转置,即共轭转置

二.编写如图所示波形的MATLAB 脚本文件,图中虚线为正弦波,要求它分别在?12及处22 9

削顶。

图1

可能用到的额外指令: find、hold on、hold off、 legend,具体使用方法使用help +指令名来解答。

10

实验三 字符串数组的使用、简单脚本文件和函数的编写

[实验目的]

1.掌握字符串数组的创建和构造方法及常用字符串函数的使用。 2.熟练掌握MATLAB 控制流的使用方法。

3.熟悉M 脚本文件、函数文件的编写方法和技巧。

[实验原理]

与数值数组相比,串数组在MATLAB 中的重要性较小,但不可缺少。如果没有串数组及 相应的操作,那么数据可视化、图形用户界面的制作将会遇到困难。字符串与数值数组是两 种不同的数据类,它们的创建方式也不同。字符串的创建方式是:将待建的字符放在“单引 号对”中。注意,“单引号对”必须是在英文状态下输入,其作用是MATLAB 识别送来内容 “身份”所必需的,如A=’This is an example!’;就创建了一个字符串A。注意创建带 单引号的字符串时,每个单引号符用“连续2 个单引号符”标识。字符串的标识同数值数组 同,而且也可以使用size 指令观察串数组的大小。串数组的ASCII 码可以通过指令abs 和 double 来获取,而用char 指令可以把ASCII 码变为串数组,另外,MATLAB 可以很好的支持中文字符串数组。对于复杂串数组的创建,一是可以直接创建,但是要保证同一串数组的各行字符数相等,即保证各行等长,不推荐,太繁琐。二是可以利用串操作函数创建多行数组,比如char, str2mat, strvcat 等,具体操作自己通过帮助体会。另外还可以通过转化函数产生数码字符长,比如A_str=int2str(A) 就是把整数数组A 转换成串数组,如果是非整数将被四舍五入后再转换,类似的函数还有num2str(把非整数数组转换为串数组,常用于图形中数据点的标识)、mat2str(把数值数组转换成输入形态的串数组,常与eval 指令配用)。

假如想灵活运用MATLAB 去解决实际问题,想充分调动MATLAB——科学技术资源,想理 解MATLAB 版本升级所依仗的基础,那么掌握M 脚本文件合函数的编写规则将十分有用。

用户通过本次实验,感受抽象概念的内涵、各指令间的协调,从感知上领悟MATLAB 编 程的优越和要领。 编写M 脚本文件的步骤:

11

? 点击MATLAB 指令窗工具条上的New File图标

,就可打开如上图所示的MATLAB 文

件编辑调试器MATLAB Editor/Debugger。其窗口名为untitled ,用户即可在空白窗口 中编写程序。

? 点击编辑调试器工具条图标 ,在弹出的Windows 标准风格的“保存为”对话框中,

选择保存文件夹,键入新编文件名(如newfile.m),点动【保存】键,就完成了文件 保存。

?

运行可有两种方法,一种是直接点击编辑调试工具条图标,即可直接运行;或者

使newfile.m 所在目录成为当前目录,或让该目录处在MATLAB 的搜索路径上,然后在命令窗口键入指令newfile+回车,便可得到运行结果。

?

调试程序方法有多种,常见的是设置断点的方法,将光标移到程序欲执行到的位置,点击编辑调试工具条图标

,保存后运行,程序将停止在该语句位置并弹出编辑器界

,才继续向下执行。相应的按下

面等待用户下一步运行的指令,只有再次点击按钮按钮

,表示清除所有断点。如果不设置断点,也可以在程序中加入pause 指令,使

得程序在此处暂停,只有用户按任意键程序才依次向下执行。则在pause 指令的前面位置我们可以通过交互的方式得到我们想要的信息,以检测程序的正确性。

编写MATLAB 脚本文件或函数文件时要区分开与C 语言格式的不同。MATALB 使用变量前 不需要声明数据类型,对于所有的数值型数据MATLAB 均以Double 型存储。另外编程时尽量 使用MATLAB 向量(数组)编程方式,可大大提高编程效率,尽量避免过多使用for 循环等 语句。

MATLAB 提供了五种控制流的结构:for 循环结构,while 循环结构,if-else-end 分支结构,以及switch-case 结果、try-catch 结构。这些控制指令用法与其他语言十分类似, 这里只给出简要说明。

12

For 循环: while 循环结构 for x=array (commands) end while expression (commands) end

if-else-end 结构

单分支(常用) 双分支(常用) 多分支(常被swith-case 取代) if expression (commands) end if expression (commands1) else (commands1) if expression1 (commands1) elseif expression2 (commands2) ?? else (commandsk) end end

上面几条控制语句中,for 循环结构中x 称为循环变量,组命令(commands)被称为循环 体,循环体被重复执行的次数是确定的,该次数由for 指令后面的数组array 的列数决定。 换言之,循环变量依次取数组的各列,对于每个变量值,循环体被执行一次。

while 循环是首先检测expression 的值,如其值为逻辑真(非0),则执行组命令,当 组命令执行完毕,继续检测表达式的值,仍为真,循环执行组命令,一旦表达式值为假,就 结束循环。一般情况下,表达式的值是标量值,但MATLAB 允许其为一个数组,此时只有该 数组所有元素均为真时,MATLAB 才会执行循环体。若表达式为空数组,则不执行循环体。

if 指令判决和break 指令的配合使用,可以强制中止for 循环或while 循环。 switch-case 结构 try-catch 结构

13

switch ex case test1 (commands 1) case test2 … case testk (commands k) otherwise (commands) try ex (commands 1) catch (commands 2) end switch 指令后面的表达式应为一个标量或者为一个字符串。对于标量形式的表达式, 比较这样进行:表达式==检测值i。对于字符串,MATLAB 将调用函数strcmp 来实现比较: strcmp(表达式,检测值i).

try-catch 结构,只有当MATLAB 在执行组命令1 时出现错误后,组命令2 才会被执行。 当执行组命令2 时又出错,MATLAB 将中止该结构。

随指令数的增加或随控制流复杂度的增加,以及重复计算要求的提出,采用M 脚本文件 进行编程较为适宜。这种脚本文件的构成比较简单,它是一串按照用户意图排列而成的 MATLAB 指令集合。脚本文件运行后,所产生的所有变量都驻留在MATLAB 基本工作空间中, 只要用户不使用clear 指令加以清除,且MATLAB 指令窗口不关闭,这些变量将一直保存在 基本工作空间中。

与脚本文件不同的,函数文件犹如一个“黑箱”。从外界只能看到传给它的输入量和送 出的计算结果,而内部运作是藏而不见的,特点是:

? 从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的“函数声 明行”。该行还罗列出函数与外界的联系的全部“标称”输入输出宗量。但对“输入输出宗量”的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意数目。形如unction sa=circle(r,s)。这里r、s 称为输入宗量,sa 称为输出宗量,函数名为circle,同时注意保存的函数文件名应与这里的函数名一致,即存为circle.m 文件。 ? MATLAB 允许使用比“标称”数目较少的输入输出宗量实现对函数的调用,但前提是函

数中应该有相应的处理程序。

? 从运行上看,与脚本文件不同,每当函数文件运行时,MATLAB 就会专门为它开辟一个

临时的工作空间,称之为函数工作空间。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到return 时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。

?

假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放在该函数空间中,而不是存放在基本空间。

[实验内容]

14

一.串数组的创建和寻访

1. 先请实际操作下例,以体会数值量与字符串的区别

clear %清除所有内存变量 a=12345.6789 %给变量a 赋数值标量 class(a) %对变量a的类别进行判断 a_s=size(a) %数值数组a 的“大小”

b='S' %给变量b赋字符标量(即单个字符) class(b) %对变量b的类别进行判断 b_s=size(b) %符号数组b 的“大小

whos %观察变量a,b 在内存中所占字节 2. 已知串数组a=”This is an example.”,试将其到序输出。

3. 接上题,试执行ascii_a=double(a),观察其ASCII 码,并将ASCII 码变回字符串。 4. 设A=”这是一个算例”,重复上面的2-3。

5. 尝试用直接输入法在命令窗口创建字符串s,第一行时“This string array”,第

二行是“has multiple rows.”。

6. 利用串操作函数char、str2mat、strvcat 分别写出使以下这段文字成为字符串的

程序,注意保持这段文字的格式。

在英式用法中,引号通常是单引号,如‘Fire!’。

In GB usage quotation marks are usually single:’Fire!’.

二.脚本文件实现y?1?e?0.4tcos(3t),0 ≤ t ≤ 3π ,并在图上标出图名和极大值点坐标。 如下图所示。

可能用到的函数:num2str, char, text, hold on, 具体应用自己查找help 文档。 三.编程实现分别用for 或while 循环语句计算:

15

K??2i?1?2?22?????263

i?063的程序,并给出运行结果。此外,实现一种避免使用循环的的计算程序。 四.函数文件

1. 详读并运行下面的circle.m 函数文件。体会M 函数文件的编写结构及方法。

%后面的内容称为注释行,不被执行,起注释说明作用。

function sa = circle(r,s) % 首行是函数声明行,以function开头 %CIRCLE 以制定颜色画半径为r的圆面 % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % % circle(r) 利用蓝实线画半径为 r 的圆周线. % circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线. % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面. % sa=circle(r,s) 计 算圆面积,并画半径为 r 的 s 色圆面. % 编写于1999年4月7日,修改于1999年8月27日。 if nargin>2 % nargin表示输入宗量的变量个数,是系统保留变量 error('输入宗量太多。'); % error把引号的内容在命令窗口前加问号输出 end if nargin==1 s='b'; end clf %清图形窗口 t=0:pi/100:2*pi; x=r*exp(i*t); if nargout==0 % nargin表示输出宗量的变量个数,是系统保留变量 plot(x,s); else sa=pi*r*r; fill(real(x),imag(x),s) % fill指令是填充颜色指令,具体看帮助 end axis('square') % 使得输出图形坐标为正方形 2. 编写一个简单的函数文件,它具有如下性质:该函数被调用时,如果不指定输入变

量,则自动输出“用户,你忘记给定输入变量了!”;当输入大于1 的整数时,则输出“你是一个合法用户!”;当输入的是一个非正整数时,函数文件会给出一个错

16

误提示“你是非法用户!”【提示:可能用到disp,error 等指令,使用方法自己查询帮助】

17

实验四 数据可视化方法

[实验目的]

1.掌握曲线绘制的基本技法和指令,会使用线形、色彩、数据点标记表现不同数据 的特征,掌握生成和运用标识注释图形。 2.进一步掌握函数编写及数据可视化方法。

[实验原理]

MATLAB 提供了相当强大的可视化指令,通过这些指令,我们可以非常简单地实现数 据的可视化。

首先我们来看离散数据和离散函数的可视化方法。对于离散实函数yn=f(xn) ,当xn以递增(或递减)次序取值时,根据函数关系可以求得同样数目的yn,当把这两组向量用直角坐标中的点次序图示时,就实现了离散函数的可视化。当然这种图形上的离散序列所反映的只是某确定的有限区间内的函数关系,不能表现无限区间上的函数关系。通常我们可以采用plot 或者stem 来实现。只是需要注意的是使用plot 时,需要使用星号或者点等标识来表示数据点,比如plot(xn,yn,’r*’,’MarkerSize’,20),就表示用字号20 的红色星点来标识数据点,此时为了便于观察,通常随后加上一条语句“grid on”,即给 图形加上坐标方格。而采用stem 标识数据点的格式是stem(xn,yn)。

连续函数的可视化与离散函数可视化类似,也必须先在一组离散自变量上计算相应的函 数值,并把这一组“数据点”用点图示。但这些离散的点不能表现函数的连续性。为了进一 步表示离散点之间的函数函数情况,MATLAB 有两种常用处理方法:一是对区间进行更细的分割,计算更多的点,去近似表现函数的连续变化;或者把两点用直线连接,近似表现两点间的(一般为非线性的)函数形状。但要注意,倘若自变量的采样点不足够多,则无论哪种方法都不能真实地反映原函数。对于二维数据,常用指令仍旧是plot。对于离散数据,plot指令默认处理方法是:自动地把这些离散数据用直线(即采用线性插值)连接,使之成为连续曲线。对于三维图形的表示,通常有plot3 等指令。

通常,绘制二维或三维图形的一般步骤如下表所示: 1 曲线数据准备 ? ? 先取一个参变量采用向量 然后计算各坐标数据向量 步骤 典型指令 t=0:.001:3*pi; %参变量采用向量 t=linspace(0,3*pi,1000) %参变量采用向量另种方式% y=f(t); %计算相应的函数值 figure(1) %指定1 号图形窗 Subplot(2,2,3) %指定3 号子图 2 选定图形窗及子图位置 ? 缺省时,打开Figure No.1,或当前窗,当前子图 可用指令指定图形窗号和子图号 ?

18

3 4 调用二维或三维绘图指令 指定好线形、色彩、数据点形 设置轴的范围、坐标分格线 plot(t,y,’r:’) %用红虚点画二维线,画三维可用 %plot3 指令,此处略 axis([x1,x2,y1,y2]) %平面坐标范围 grid on % 坐标分格线 title(‘调制图形’) % 图名 xlabel(‘t’); ylabel(‘y’) % 轴名 legend(‘sin(t)’,’sin(t)sin(9t)’) % 图例 text(2,0.5,’y=sin(t)sin(9t)’) %文字说明 colormap, shading, light, material view, aspect get, set 5 图形注释: 图名、坐标名、图例、文字说明等 6 着色、明暗、灯光、材质处理等 (仅对三维图形使用) 7 视点、三度(横、纵、高)比 (仅对三维图形使用) 8 图形的精确修饰(图柄操作) ? ? 利用对象属性值设置 利用图形窗工具条进行 9 打印 ? ? 图形窗上的直接打印选项或按键 利用图形后处理软件打印 %采用图形窗选项或按键打印最简捷 print –dsp2 %专业质量打印指令 说明:

? 步骤1、3 是最基本的绘图步骤,一般来说,由这两步所画出的图形已经具备足够的表

现力。至于其他步骤,并不完全必需。

? 用户可根据自己需要改变上面绘图步骤,并不必严格按照执行。 ? 步骤2 一般在图形较多情况下使用,此时需要指定图形窗、指定子图。 ? 步骤8 涉及图柄操作,需要对图形对象进行属性设置,较为复杂。

?

MATLAB 提供了交互式图形编辑功能,可方便地对图形精细修饰。

plot 等绘图指令的典型调用格式为:plot(t,y,’s’)。其中s 是用来指定线型、

色彩、数据点形的选项字符串。S 的合法取值如下所示,格式形如’r+’。如果缺省,此时

线型、色彩、数据点形将由MATLAB 默认设置确定。plot 进一步的使用可参看帮助文档。

s 可用来指定的线形分别有:“-”实线,“:”虚线,“-.”点划线,“--”双划线。 s 可用来指定的色彩分别有:b-蓝,g-绿,r-红,c-青,y-黄,w-白, k-黑。 s 可用来指定的数据点形有:“.”实心黑点,“+”十字符, “^”朝上三角符,“v”

朝下三角符,“d”菱形符,“p”五角星符等。

常用的坐标控制指令axis 使用是最多的,比如axis([x1,x2,y1,y2])可人工设定坐 标范围,axis off 可取消轴背景,axis equal 横纵轴采用等长刻度等。其他使用见帮

19

log2 底为2的对数 loglog 双对数刻度图形 logm 矩阵对数 logspace 对数分度向量 lookfor 按关键字搜索M 文件 lower 转换为小写字母 lsqnonlin 解非线性最小二乘问题 lu LU分解

M m

mad magic maple mat2str material max mbuild mcc median menuedit mesh meshz meshgrid methods mex mfun MAPLEmfunlis mhelp min mkdir mkpp mod more movie moviein mtaylor N n

平均绝对值偏差 魔方阵

运作 Maple格式指令

把数值数组转换成输入形态串数组 材料反射模式 找向量中最大元素

产生EXE 文件编译环境的预设置指令求向量元素的平均值 求中位数

启动设计用户菜单的交互式编辑工具网线图 垂帘网线图 产生“格点”矩阵

获知对指定类定义的所有方法函数 产生MEX文件编译环境的预设置指令 经典函数实施数值计算 能被mfun计算的MAPLE经典函数列表 引出 Maple的在线帮助 找向量中最小元素 创建目录

逐段多项式数据的明晰化 模运算

指令窗中内容的分页显示 放映影片动画 影片帧画面的内存预置

符号计算多变量Taylor 级数展开

45

ndims 求数组维数 NaN 非数(预定义)变量 nargchk 输入宗量数验证 nargin 函数输入宗量数 ndgrid 产生高维格点矩阵 newplot 准备新的缺省图、轴 nextpow2 取最接近的较大2 次幂 nnz 矩阵的非零元素总数 norm normcdf normest norminv normpdf normrnd notebook null num2str numden nzmax O o

ode113 ode15s Stiff ode23 ode23s Stiff ode23t ode23tb Stiff ode45 odefile ODE odeget odephas2 ODE odephas3 ODE odeplot ODE odeprint odeset ones optimset orient 矩阵或向量范数

正态分布累计概率密度函数 估计矩阵2 范数

正态分布逆累计概率密度函数 正态分布概率密度函数 正态随机数发生器

启动MATLAB 和Word 的集成环境 零空间

把非整数数组转换为串

获取最小公分母和相应的分子表达式 指定存放非零元素所需内存

非Stiff 微分方程变步长解算器 微分方程变步长解算器 非Stiff 微分方程变步长解算器 微分方程解算器 适度Stiff 微分方程解算器 微分方程解算器 非Stiff 微分方程变步长解算器 文件模板 获知ODE 选项设置参数 输出函数的二维相平面图 输出函数的三维相空间图 输出函数的时间轨迹图 在MATLAB 指令窗显示结果 创建或改写 ODE 选项构架参数值 全1数组

创建或改写优化泛函指令的选项构架参数值设定图形的排放方式

46

orth 值空间正交化

P p

pack 收集MATLAB内存碎块扩大内存 pagedlg 调出图形排版对话框 patch 创建块对象

path 设置MATLAB搜索路径的指令 pathtool 搜索路径管理器 pause pcode pcolor peaks MATLAB permute pi pie pie3 pink pinv plot plot3 plotmatrix plotyy poisscdf poisspdf poissinv poissrnd pol2cart polar poly poly2str poly2sym polyder polyfit polyval polyvalm pow2 2ppval pretty 暂停

创建预解译P 码文件 伪彩图

提供的典型三维曲面 广义转置

二维饼图 三维饼图 粉红色图矩阵 伪逆 平面线图 三维线图 矩阵的散点图 双纵坐标图

泊松分布概率分布函数 泊松分布累计概率分布函数 泊松分布逆累计概率分布函数 泊松分布随机数发生器 极或柱坐标变为直角坐标 极坐标图

矩阵的特征多项式、根集对应的多项式 以习惯方式显示多项式

双精度多项式系数转变为向量符号多项式多项式导数 数据的多项式拟合 计算多项式的值 计算矩阵多项式 的幂

计算分段多项式

以习惯方式显示符号表达式

47

(预定义变量)圆周率 print 打印图形或SIMULINK 模型 printsys 以习惯方式显示有理分式 prism 光谱色图矩阵 procread 向MAPLE输送计算程序 profile 函数文件性能评估器 propedit 图形对象属性编辑器 pwd 显示当前工作目录

Q q

quad quad8 quit quiver quiver3 R r

rand randn randperm range rank rats rcond real reallog realpow realsqrt realmax realmin rectangle rem repmat reshape residue return ribbon rmfield roots 低阶法计算数值积分 高阶法计算数值积分 推出MATLAB 环境 二维方向箭头图 三维方向箭头图

产生均匀分布随机数 产生正态分布随机数 随机置换向量 样本极差 矩阵的秩 有理输出 矩阵倒条件数估计 复数的实部

在实数域内计算自然对数 在实数域内计算乘方 在实数域内计算平方根 最大正浮点数 最小正浮点数 画“长方框” 求余数 铺放模块数组 改变数组维数、大小 部分分式展开 返回

把二维曲线画成三维彩带图删去构架的域 求多项式的根

48

rose 频数扇形图 rot90 矩阵旋转90度

rotate 绕指定的原点和方向旋转 rotate3d 启动三维图形视角的交互设置功能 round 向最近整数圆整 rref 简化矩阵为梯形形式

rsf2csf 实数块对角阵转为复数特征值对角阵

S s

save scatter scatter3 sec sech semilogx X semilogy Y series set setfield setstr shading shg shiftdim sign signum sim simget simple simplify simset simulink sin sinh size slice solve spalloc sparse 把内存变量保存为文件 散点图 三维散点图 正割 双曲正割

轴对数刻度坐标图 轴对数刻度坐标图 串联连接 设置图形对象属性 设置构架数组的域

将ASCII 码转换为字符的旧版指令 色彩浓谈模式 使当前图形窗位于前台 数组维序号左移重组 根据符号取值函数 符号计算中的符号取值函数 运行SIMULINK模型

获取SIMULINK模型设置的仿真参数 寻找最短形式的符号解 符号计算中进行简化操作

对SIMULINK模型的仿真参数进行设置 启动SIMULINK 模块库浏览器 正弦 双曲正弦 矩阵的大小 立体切片图 求代数方程的符号解 为非零元素配置内存 创建稀疏矩阵

49

助。

需要特别指出的是,当遇到在已经存在的图上再绘制一条或多条曲线,可使用hold on 指令,可保持当前轴及图形保持不被刷新,并准备接收此后绘制的新曲线,hold off 则 取消此功能。对于想画多个独立的图形,则会用到figure(n)指令,这里n 为整数,可顺 序从1 向后排。如果想在特定图形中布置几幅独立的子图,则会用到subplot(m,n,k), 即在(m×n)幅子图中的第k 幅成为当前图;subplot(‘position’,[left botton width height]),表示在指定位置上开辟子图,并成为当前图。使用clf 指令可清除图 形窗的内容。另外MATLAB 还提供了ginput、gtext、legend 等交换指令。

[x,y]=ginput(n),可用鼠标从二维图形上获取n 个点的数据坐标(x,y),该指令只 适用于二维图形,在数值优化、工程设计中十分有用。通常在使用前先对图进行局部放大处 理。

[实验内容]

一.仿照运行,体会数据可视化方法。

1.已知n=0,1,??,12,y=|(n-6)|-1,运行下面程序,体会离散数据可视化方法。

% 用plot 实现离散数据可视化 n=0:12; %产生一组自变量数据 y=1./abs(n-6); %计算相应点的函数值 plot(n,y,'r*','MarkerSize',20) %用红花标出数据点 grid on %画坐标方格 % 用stem 实现离散数据可视化 n=0:12; y=1./abs(n-6); stem(n,y) 说明:

? plot 和stem 指令均可以实现离散数据的可视化,但通常plot 更常用于连续函

数中特殊点的标记;而stem 广泛运行与数字信号处理中离散点的图示。 ? 用户在运行上面例程时会发现在命令窗口出现警告:Warning: Divide by

zero!即警告程序中出现非零数除以0 的指令。MATLAB 对于这种情况并不中止 程序,只是给该项赋值为inf 以做标记。

2.下面时用图形表示连续调制波形y = sin(t)sin(9t) ,仿照运行,分析表现形式 不同的原因。

clear t1=(0:11)/11*pi; y1=sin(t1).*sin(9*t1); t2=(0:100)/100*pi; y2=sin(t2).*sin(9*t2); subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图 (1)') subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图 (2)') subplot(2,2,3),plot(t1,y1,t1,y1,'r.') axis([0,pi,-1,1]),title('子图 (3)') subplot(2,2,4),plot(t2,y2) axis([0,pi,-1,1]),title('子图 (4)')

20

二.编程实现。

1.用图形表示连续调制波形y = sin(t)sin(9t) ,过零点及其包络线,如下图所示。

2. 励条件下二阶系统归一化响应可表现为y(t)?1?21?e??tsin(?t??),其中ξ为阻

1??2尼系数, ??1?? ,??arctg() 。请用不同的颜色或线型,在同一张图上,

?绘制ξ= 0.2 : 0.2 : 2.0取值下系统在t∈[0,18] 区间内的响应曲线,并要求用ξ=

0.2和ξ=2.0对它们相应的两条曲线进行醒目的文字标志。

3. 编写函数[x,n]=stepseq(n0,n1,n2),实现:

?1n0?n?n1 u(n)?? n为整数

0n?n?n20?并编写脚本文件实现:

x(n) = n?[u(n) ? u(n ?10)] +10e-0.3(n-10) [u(n ?10) ? u(n ? 20)], 0 ≤ n ≤ 20

要求在脚本文件中调用stepseq 函数,最后绘出序列x(n) 在给定区间的波形图。 4. 编写一个函数文件 [y,n]=sigadd(x1,n1,x2,n2),实现两个对应样本之间的相加,

其中x1 是长度为n1 的序列,x2 是长度为n2 的序列,n1、n2 分别是x1、x2 的位置 信息(n1、n2 均为整数),如:

n1={ -3,-2,-1,0,1,2,3,4},对应的 x1={ 2, 3, 1,4,1,3,1,2};

21

n2={-4,-3,-2,-1,0,1,2},对应的 x2={ 1, 3, 2, 5,1,3,4}。

当调用函数[y,n]=sigadd(x1,n1,x2,n2)时,我们应该得到: n={-4,-3,-2,-1,0,1,2,3,4},对应的 y={ 1, 5, 5, 6,5,4,7,1,2}。

仔细观察sigadd 函数的功能。编好函数文件程序后,请在命令窗口调用,验证正确 性,记录验证结果。

22

23

实验五 简单数据分析

[实验目的]

1.初步掌握利用MATLAB 实现数据的拟合、插值、简单数据分析等。

[实验原理]

数值计算能力是MATLAB 称雄世界的根本柱石。MATLAB 内建了很多函数可以求解线性方 程、特征值问题以及有关多项式和卷积、数据分析、泛函、信号处理、系统分析等方面的指 令。结合目前的学习进度,本课程内只简单讨论数据的拟合、插值、简单数据分析及在实验 中讨论函数的零极点求法等内容,对其他内容有兴趣的可参看参考书籍。

MATLAB 提供了拟合和插值的相关函数。曲线拟合是研究如何寻找“平滑”曲线最好地表现带噪声的“测量数据”点。而插值是在认定所给“基准数据”完全正确的情况下,研究如何“平滑”地估算出“基准数据”之间其他点的函数值。因此插值所得曲线一定穿过“基 准数据”。而拟合曲线就不一定了。另外,拟合多项式只能在给定数据所限定的区间内使用, 不要任意向往拓展。而每当基准数据之间其他点上函数值没法获得,或获得的代价很好时, 插值就发挥作用。插值指令很多,有interp1,interp2,interp3 等。采用的插值算法 也很多,如线形插值、三次多项式插值算法、样条插值等。对于多项式拟合有polyfit、 poly2str、polyval 等函数,具体请参看帮助和范例。

MATLAB 内建了很多数据分析函数,比如常用的随机数发生器函数rand,randn;统计 分析指令有:min-求最小值,max-求最大值,mediam-求中值,mean-求平均值,std -求标准差,sort-排序指令等。;差分和累计函数diff、prod、sum 等。另外MATLAB还提供了很多泛函指令、信号处理专业工具包、系统分析中的控制工具包以及诸如微分、求 导等符号运算功能等等,有需要的可参看帮助及相关书籍。

[实验内容]

一. 数据拟合及插值

1.下面是对给定数据点(x0,y0)进行多项式三阶拟合的例子,仿照运行,掌握数据拟 合的一般方法。

24

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

Top