MATLAB实验指导书(2014) 下载本文

y=3-exp(-t); plot(t,y)

b. f?t??5e?t?3e?2t 0?t?3

c. f?t??e?tsin?2?t? 0?t?3

d. f?t??sin?at?/at ?2??t?2? (?在 MATLAB 中用pi来实现,a要取一个确定的值)

f. f?t??ek 0?k?5

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

[实验目的]

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 循环操作时可以减少循环次数,提高编程效率。“全下标”标识和“单下标”标识可以通过 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)=[] % 空数组的赋值操作 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?2024? ?中所有绝对值大于 3 的元素。?3?1135??(4)在命令窗口执行下面指令,体味二维数组的子数组寻访和赋值

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) 在命令窗口执行下面指令,体味数组运算与矩阵运算的区别 clear ;A=zeros(2,3);

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

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

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

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

2图 1

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

图例的位置可以简单的用数字代号来指定,也可用location属性值中的具体方位词来指定,具体的属性可以用help查找到;这里介绍一下简单的数字代号:0:自动把图例置于最佳位置,即和图中的曲线重复最少,此时,没改变一次大小,图例都会重新选择一次最佳位置;-1:置于坐标轴外面的右上角;1:置于图形右上角,为默认值;2:置于图形左上角;3:置于图形左下角4:置于图形右下角

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

[实验目的]

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 脚本文件的步骤:

点击 MATLAB 指令窗工具条上的 New File 图标,就可打开如上图所示的 MATLAB 文件编辑调试器 MATLAB Editor/Debugger 。其窗口名为 untitled ,用户即可在空白窗口中编写程序。

点击编辑调试器工具条图标,在弹出的 Windows 标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如 newfile.m ),点动 【 保存 】 键,就完成了文件保存。

运行可有两种方法,一种是直接点击编辑调试工具条图标,即可直接运行;或者使 newfile.m 所在目录成为当前目录,或让该目录处在 MATLAB 的搜索路径上 , 然后在命令窗口键入指令 newfile +回车,便可得到运行结果。

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

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

用户下一步运行的指令,只有再次点击按钮,才继续向下执行。相应的按下按钮,表示清除所有断点。如果不设置断点,也可以在程序中加入 pause 指令,使得程序在此处