admin管理员组

文章数量:1545229

2024年2月15日发(作者:)

实验一 MATLAB 语言的基本使用方法

1. 实验目的

1) 了解MATLAB 程序设计语言的基本特点,熟悉MATLAB软件运行环境。

2) 掌握创建、保存、打开文件及数据的方法,掌握设置文件路径的方法。

3) 掌握变量、函数等有关概念,具备初步的将一般数学问题转化为对应计算机模型并进行处理的能力。

2. MATLAB基础知识

2.1 MATLAB程序设计语言简介

MATLAB,Matrix Laboratory的缩写,是由MathWorks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。 与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方式,被称之为“草稿纸式的语言”。 MATLAB软件主要由主包、仿真系统(simulink)和工具箱(toolbox)三大部分组成。

2.2. MATLAB界面简介

下面我们主要对MATLAB基本界面进行介绍。如图 1-1所示,命令窗口包含标题栏、菜单栏、工具栏、命令行区、状态栏、垂直和水平波动条等

区域。

标题栏菜单栏工具栏命令行区状态栏垂直和水平滚动条

图 1-1 MATLAB基本界面——命令窗口

1) 菜单栏

菜单栏中包括File、Edit、View、Web、Window和Help六个菜单项。这里着重介绍File项。

File项是数据输入/输出的接口, 包括10个子项, 这里重点介绍其中的5个子项:

New:

新建文件项。 有四个选择: M File(.M,文本格式的MATLAB程序文件,

可以直接通过文件名的方式在MATLAB环境下解释运行); Figure(图形);

Model(仿真模型文件)和GUI(可视化界面文件)。

Open: 打开所有MATLAB支持的文件格式,系统将自动识别并采用相应的程序对文件进行处理。例如, 打开一个.m文件, 系统将自动打开M文件编辑器对它进行编辑。

: 导入用于MATLAB处理的数据函数,包括各种图像文件、声音文件和.mat文件。

Save : 将工作空间的变量以.mat(二进制)或ASCII文本的形式存入文件。

: 设置工作路径。可以打开路径设置(Set Path)对话框(图8-2),将用户自己建立的目录加入MATLAB的目录系统中, 以便所编制的文件能

够在MATLAB环境中直接调用。

图 1-2 路径设置对话框

单击 按钮可以将你的一个文件夹加入到系统路径中; Add with

允许把一个文件夹包括其所有的子文件夹加入到系统路径中。这两种操作均可以直观地在右侧的路径栏内看到结果。 选中一个加入的文件夹, 你可以利用Move to Top(移至所有路径的最前面), Move Up(上移一个),

Move Down(下移一个), Move to Bottom(移至所有路径的最后面)等四个按钮将改变文件在系统路径中的排列位置以利于对文件的搜索使用, 也可以利用Remove按钮将其删除。对路径操作完毕后,按Save按钮予以保存; 按Close按钮关闭本对话框; 按Revert按钮取消所有未保存的改动; 按Default按钮将还原到MATLAB安装时的路径设置; 按Help按钮则启动帮助系统解答疑难。

2) 命令行区

对输入命令的解释MATLAB按以下顺序进行:

(1) 检查它是否是工作空间中的变量,

(2) 检查它是否是嵌入函数,

(3)

(4) 检查它是否是私有函数。

(5) 检查它是否是位于MATLAB搜索路径范围内的函数文件或脚本文件。

请注意,如果有两个以上的方案与输入的命令相匹配, MATLAB将只执行第一个匹配。

表1-1 MATLAB常用命令

2.3 在线帮助

MATLAB里有以下几种方法可获得帮助:帮助命令(help)、lookfor命令、 帮助窗口(help window)、帮助桌面 (help desk)、在线帮助页或直接通过网络连接到Mathworks 公司(对以联网用户适用)。

1) 帮助命令(help)

帮助命令是查询函数相关信息的最直接方式,信息会直接显示在命令窗口中。如果你知道要找的题材(topic)是什么,直接键入help 。例如键入help

sin

会显示如下解释:

SIN Sine.

SIN(X) is the sine of the elements of X.

Overloaded methods

help sym/sin.m

2) lookfor命令

它可以从你键入的关键字(即使这个关键字并不是MATLAB的指令)列出所有相关的题材,和help先必,lookfor所能覆盖的范围更宽,可查找到包含在某个主题中的所有词组或短语。例如键入lookfor sin

会显示:

SUBSINDEX Subscript index.

ISINF True for infinite elements.

ACOS Inverse cosine.

ACOSH Inverse hyperbolic cosine.

ASIN Inverse sine.

ASINH Inverse hyperbolic sine.

COS Cosine.

COSH Hyperbolic cosine.

„ „

3) 帮助窗口(help window)

帮助窗口提供与帮助命令相同的信息,但窗口是的帮助界面更为方便直接。在MATLAB命令窗口中有三种方法进入帮助窗口:

选取帮助菜单里的“help window”项

双击菜单条上的问号按钮

键入helpwin

4) 帮助桌面 (help desk)

通过在命令窗口中选择帮助菜单的“Help Desk”选项后键入helpdesk 命令即可进入帮助桌面。这两种方法都会自动启动浏览器,用户可利用浏览器的功能来浏览帮助。

5) 在线帮助页

帮助桌面的在线帮助均有相应的PDF格式文件,可是用Adobe Acrobat

Reader 阅览器打开。可以方便的翻页和查找。用户选中帮助桌面的关于PDF格式文件的选项,或是在命令窗口键入doc,便会自动打开文件。

6) Mathworks网站

对于以连入Internet的用户,可通过Help Desk直接访问Mathworks公司的网站询问有关问题。

2.4 基本数值运算

1) MATLAB内部特殊变量和常数

MATLAB内部有很多变量和常数, 用以表达特殊含义。常用的有:(1) 变量ans: 指示当前未定义变量名的答案。

(2) 常数eps:表示浮点相对精度, 其值是从1.0到下一个最大浮点数之间的差值。该变量值作为一些MATLAB函数计算的相对浮点精度,按IEEE标准,

eps=2-52, 近似为2.2204e-016。

(3) 常数Inf: 表示无穷大。 当输入或计算中有除以0时产生Inf。

(4) 虚数单位i,j: 表示复数虚部单位, 相当于 。

(5) NaN: 表示不定型值, 是由 0/0 运算产生的。

(6) 常数pi: 表示圆周率π, 其值为3.141 592 653 589 7…。2)

(1) 变量命名规则

MATLAB中对变量的命名应遵循以下规则:

 变量名可以由字母、 数字和下划线混合组成, 但必须以字母开头。

 字符长度不能大于31。

 变量命名区分大小写。

(2)

局部变量是指那些每个函数体内自己定义的,不能从其他函数和MATLAB工作空间访问的变量。

全局变量是指用关键字“global”声明的变量。 全局变量名应尽量大写,并能反映它本身的含义。如果需要在工作空间和几个函数中都能访问一个全局变量,必须在工作空间和这几个函数中都声明该变量是全局的。

3) 矩阵及其运算

MATLAB具有强大的矩阵运算和数据处理功能, 对矩阵的处理必须遵从代数规则。

(1) 矩阵生成

对于一般的矩阵MATLAB的生成方法有多种。 最简单的方法是从键盘直接输入矩阵元素。直接输入矩阵元素时应注意: 各元素之间用空格或逗号隔开,用分号或回车结束矩阵行,用中括号把矩阵所有元素括起来。

例1-1 在工作空间产生一个3×3矩阵A可用MATLAB语言描述如下:

A=[1 2 3; 4 5 6; 7 8 9

或 A=[1 2 3

4 5 6

7 8 9

A=

1 2 3

4 5 6

7 8 9

对于特殊的矩阵可直接调用MATLAB的函数生成。

用函数zeros生成全0矩阵:格式 B=zeros(m,n)生成m×n的全0阵。

用函数ones生成全1矩阵:格式 B=ones(m,n)生成m×n的全1阵。

用函数eye生成单位阵:格式 B=eye(m,n)生成m×n矩阵, 其中对角线元素全为1,其他元素为0。

用函数rand生成随机矩阵:格式 B=rand(m,n)生成m×n的随机矩阵。

③ 矩阵中的元素值

和线性代数一样,我们可采取下标来表述矩阵元素,同时也可以利用下标对

矩阵元素进行修改。例如对例1-1中的矩阵A,如果输入

A(4)

则显示:

ans =

2

若输入 A(1,2),结果仍为:

ans =

2

可见矩阵是按列存储的。若输入A(1,2)=6,显示结果为:

A =

1 6 3

4 5 6

7 8 9

若要选取A的第二行,可以输入A(2,:) ,则显示

ans =

4 5 6

(2) 矩阵的运算

矩阵的运算有基本运算和函数运算两种类型。基本运算包括矩阵的加、减、乘、除、乘方、求转置、求逆等,其主要特点是通过MATLAB提供的基本运算符+、-、*、/()、^等即可完成。函数运算主要是通过调用MATLAB系统内置的运算函数来求取矩阵的行列式(det(A)), 求秩(rank(A)), 求特征值和特征向量([V, D]=eig(A)), 求Jordan标准形(jordan(A))和矩阵分解等。需要用时可以参阅联机帮助和相关参考书。

例 1-2

A=[1, 2, 3; 4, 5, 6];

B =[6, 5, 4; 3, 2, 1];

C =A+B %

D =B′ %计算矩阵B

E=A*D %

%E应该是2

F=det(E) %求E

G=E^(-1) %求E的逆

输出结果:

C=

7 7 7

7 7 7

D=

6 3

5 2

4 1

E=

28 10

73 28

F=54

G=

0.5185 -0.1852

-1.3519 0.5185

2.5 基本语句

1) 程序控制语句

(1) 循环语句

MATLAB的循环语句包括for循环和while循环两种类型。

① for

语法格式:

for 循环变量 = 起始值: 步长:

end

起始值和终止值为一整形数,步长可以为整数或小数,省略步长时,默认步长为1。执行for循环时,判定循环变量的值是否大于(步长为负时则判定是否小于)终止值,不大于(步长为负时则小于)则执行循环体, 执行完毕后加上步长, 大于(步长为负时则小于)终止值后退出循环。

例 1-3 给矩阵A、B赋值。

MATLAB 语句及运行结果如下:

k=5;

a=zeros(k, k) %

for m=1∶k

for n=1∶k

a(m,n)=1/(m+n-1);

end

end

for i=m∶-1∶1

b(i)=i;

end

运行结果:

a=

1.0000 0.5000 0.3333 0.2500 0.2000

0.5000 0.3333 0.2500 0.2000 0.1667

0.3333 0.2500 0.2000 0.1667 0.1429

0.2500 0.2000 0.1667 0.1429 0.1250

0.2000 0.1667 0.1429 0.1250 0.1111

b=

1 2 3 4 5

② while

语法格式:

while

end

其执行方式为:若表达式为真(运算值非0),则执行循环体; 若表达式为假(运算结果为0),则退出循环体,执行end后的语句。

例 1-4 a=3;

while a

a=a-1

end

输出:

a=2

a=1

a=0

(2)

条件转移语句有if和switch两种。

① if

MATLAB中if语句的用法与其他高级语言相类似, 其基本语法格式有以下几种:

格式一: if

end

格式二: if

执行语句1

else

执行语句2

end

格式三: if 逻辑表达式1

执行语句1

else if 逻辑表达式2

执行语句2

end

② switch

switch语句的用法与其他高级语言相类似, 其基本语法格式为:

switch表达式(标量或字符串)

case 值1

语句1

case 值2

语句2

otherwise

语句n end

2.6 MATLAB函数

1) 函数及其调用方法

在MATLAB语言中,M文件有两种形式:脚本和函数。

脚本没有输入/输出参数,只是一些函数和命令的组合。它可以在MATLAB环境下直接执行,也可以访问存在于整个工作空间内的数据。 由脚本建立的变量在脚本执行完后仍将保留在工作空间中可以继续对其进行操作,直到使用clear命令对其清除为止。

函数是MATLAB语言的重要组成部分。MATLAB提供的各种工具箱中的M文件几乎都是以函数的形式给出的。函数接收输入参数,返回输出参数,且只能访问该函数本身工作空间中的变量,从命令窗或其他函数中不能对其工作空间的变量进行访问。

(1) 函数结构

MATLAB语言中提供的函数通常由以下五个部分组成:

① 函数定义行;

② H1

⑤ 注释。

这五个部分中最重要的是函数定义行和函数体。

函数定义行:MATLAB语言在M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字(必须和文件名相同),同时也定义了函数

的输入和输出参数。 函数定义行是一个MATLAB函数所必需的,其他各部分的内容可以没有, 这种函数称为空函数。

例如: 求最大值函数“max

function [Y,I]=max(x)

其中, “max”为函数名, 输入参数为“x”, 输出参数为“Y”和“I”。

函数体:函数体是函数的主体部分,它包括进行运算和赋值的所有MATLAB程序代码。函数体中可以包括流程控制、输入/输出、计算、赋值、注释以及函数调用和脚本文件调用等。 在函数体中完成对输出参数的计算。

(2) 函数调用

函数调用的过程实际上就是参数传递的过程。例如,在一个脚本文件里调用函数“max”可采用如下方式:

n=1:20;

a=sin(2*pi*n/20);

[Y,I]=max(a);

该调用过程把变量“a”传给了函数中的输入参数“x”,然后把函数运算的返回值传给输出参数“Y”和“I”。其中,Y是a序列的最大值,I是最大值Y对应的坐标值。

2) 常用数字信号处理函数

(1) 信号产生函数

① 三角波或锯齿波发生函数: sawtooth()

语法格式:

sawtooth(t,width)

产生以2π 为周期幅值范围在[-1,+1]之间的三角波或锯齿波。参数t为时间向量; width是[0,1]之间的数, 它决定函数在一个周期内上升部分和下降部分的比例。width=0.5产生三角波,width=1产生锯齿波,此时函数可简写为:sawtooth(t)。

②方波发生函数: square()

语法格式:

square(t)

产生以2π为周期幅值范围在[-1, +1]之间的方波,参数t为时间向量。

③sinc发生函数: sinc()

语法格式: sinc(t)

sin(pi*t)/(pi*t)t0

sinc(t)

t01例 1-6 信号产生举例

clear all

t=0:0.0001:0.1;

x1=sawtooth(2*pi*50*t) %在[0, 0.1]之间产生5个周期的锯齿波

x2=sawtooth(2*pi*50*t,0.5) %在[0, 0.1]之间产生5

x3=square(2*pi*50*t) %在[0, 2]之间产生10个周期的方波

t=-4:0.1:4;

x4=sinc(t); %

2.7 数据的读写

在使用MATLAB当中,经常希望能够将没处理完的某些数据能够保存起来,以便以后再用。但存在于系统工作空间的变量会随着系统的关闭而释放,MATLAB提供了save 和 load 命令可帮助我们存取这些数据。这样,及时关闭了MATLAB,这些变量已然存在,下次再用时可以从文件中取出来。

完成内存变量保存的命令为 save,其格式为:

save 文件名(变量表)

从磁盘文件中读取变量到工作空间的命令为 load,其格式为:

load 文件名(变量表)

在不指明文件类型情况下,系统将这些文件的类型默认为mat 类型。

2.8 文件保存、运行、打开

如果我们希望保存程序源代码在关闭MATLAB后还存在,就需要将它保存到一m文件中。在命令窗口菜单栏File项下选New中的M-file项,就可切换到编辑窗口,或者按工具栏中的新m文件按钮也可切换到编辑窗口。在此窗口输入源代码,并按该窗口工具栏中的保存按钮,这时会弹出一“Save file as”保存窗口,在此窗口中给源代码起一文件名。输入文件名后,源代码就会存放到磁盘的指定位置。

若要运行该文件,可以有以下三种方式

(1) 选择编辑窗口菜单栏Debug项中的Run

(2) 按F5键

(3) 在命令窗口中输入文件名

若要打开一个已经存在的文件,也有三种方式

(1) 选择编辑窗口或命令窗口菜单栏File项中的Open

(2) 按ctrl +O 组合键

(3) 按编辑窗口或命令窗口工具栏的打开按钮。

图1-3 MATLAB中创建新文件

3. 实验内容及步骤

1) 打开MATLAB,熟悉MATLAB环境

2) 建立一个m文件

3) 在文件中输入以下信号并运行程序,观察试验结果。

1单位冲击信号

(n)0n0n0

矩形信号

10nN1RN(n)0其他n ,N=10。

正弦信号x1(n)=2 sin(0.1n+pi/8)

复指数信号x2(n)Ae(j0)n,要求A,0,可变

4)

5)

将产生的正弦信号,复指数信号用save 命令存放到一文件中

在命令窗口中分别产生3*3全零矩阵,单位矩阵,全一矩阵。

4. 思考题

1) 如何用MATLAB产生延迟、反转的单位冲击信号、矩形信号、正弦信号?编制一函数实现信号的延迟反转功能。

2) 利用MATLAB帮助信息了解如何绘制信号的幅频特性曲线。并对本实验步骤3)中的各信号画出其幅频特性曲线。

3) 如何取出矩阵中的某行、某列或某个元素。

4) 试举例说明点乘(.*)运算和乘法运算(*) 有何不同。

5) 谈谈你在程序输入、调试中是如何提高效率的。

5. 试验报告要求

1) 简述实验目的

2) 实验结果及分析

 实验源程序清单:要求可读性好,必要时须加注释(如变量注释等)。

 实验结果

 结果分析:程序未调试出来要分析原因;结果若不正确要分析原因;若结果误差很大要分析误差原因。

3) 简要回答思考题

6. 思考题

1.说明点乘(.*)运算和乘法运算(*) 有何不同

答:每一个符号变量都被认为是一个元素,不论它的表达式多么复杂。因此如果你仅从符号的视角出发,那所有的乘法都是点乘!就相当于两个数相乘一样,没有点乘还是差乘的分别。但是如果一个矩阵是由符号变量组成的。那么点乘和差乘就有分别了。数值运算和符号运算都是一样的,都要考虑点乘还是差乘

2.如何取出矩阵中的某行、某列或某个元素。

把下面的内容建立为“tq.m”的文件。然后放在Matlab的当前目录下,调用该函数就能解决你的问题。

本文标签: 函数文件矩阵变量命令