Matlab 应用基础
1.1 Matlab 简介
1.1.1 什么是 Matlab?
Matlab 是由美国 MathWorks 公司推出的用于数值计算和图形处理计算系统环境,具
备卓越的数值计算能力,还提供专业水平的符号计算,文字处理,可视化建模仿真和实
时控制等功能。Matlab 的指令表达式与数学、工程中常用的形式十分相似,是国际公认
的优秀数学应用软件之一,现在已推出了 Matlab 7.0 版本。
整个 Matlab 系统由两部分组成,即 Matlab 内核及辅助工具箱,Matlab 语言以数组
为基本数据单位,包括控制语句、函数、数据结构、输入输出及面向对象等特点的高级
语言,它具有以下基本功能:
数值计算功能
符号计算功能
图形处理及可视化功能
可视化建模及动态仿真功能
1.1.2 Matlab 的开发环境
其中重要的窗口具体如下:
(1)Matlab 主窗口
该窗口不能进行任何计算任务的操作,只用来进行一些整体的环境参数的设置。
(2)命令窗口(Command Window)
命令窗口是对 Matlab 进行操作的主要载体,默认的情况下,启动 Matlab 时就会打开
命令窗口。一般来说,Matlab 的所有函数和命令都可以在命令窗口中执行。在 Matlab 命
令窗口中,命令的实现不仅可以由菜单操作来实现,也可以由命令行操作来执行。
(3)历史窗口(Command History)
默认设置下历史命令窗口会保留自安装时起所有命令的历史记录,并标明使用时间,
以方便使用者的查询。而且双击某一行命令,即在命令窗口中执行该命令。
(4)当前目录窗口(Current Directory )
在当前目录窗口中可显示或改变当前目录,还可以显示当前目录下的文件,包括文
件名、文件类型、最后修改时间以及该文件的说明信息等并提供搜索功能。
1
(5)工作空间管理窗口(Workspace)
工作空间管理窗口是 Matlab 的重要组成部分。在工作空间管理窗口中将显示所有目
前保存在内存中的 Matlab 变量的变量名、数据结构、字节数以及类型,而不同的变量类
型分别对应不同的变量名图标。
2
1.2 Matlab 的矩阵计算功能
本节简要介绍 Matlab 的矩阵的建立及相关运算。
矩阵是 Matlab 数据存储的基本单元,在 Matlab 语言系统中几乎一切运算均是以对矩
阵的操作为基础的。
1.2.1 矩阵的生成
1.直接输入法
从键盘上直接输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的
简单矩阵。在用此方法创建矩阵时,应当注意以下几点:
(1)输入矩阵时要以“[ ]”为其标识符号,矩阵的所有元素必须都在括号内。
(2)矩阵同行元素之间由空格或逗号分隔,行与行之间用分号或回车键分隔。
(3)矩阵大小不需要预先定义。
(4)矩阵元素可以是运算表达式。
(5)若“[ ]”中无元素表示空矩阵。
另外,在 Matlab 语言中冒号的作用是最为丰富的。首先,可以用冒号来定义行向量。
例如:
>> a=1:0.5:4
a=
Columns 1 through 7
1 1.5 2 2.5 3 3.5 4
其次,通过使用冒号,可以截取指定矩阵中的部分。
例如:
>> A=[1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> B=A (1:2, : )
B=
1 2 3
4 5 6
3
通过上例可以看到 B 是由矩阵 A 的 1 到 2 行和相应的所有列的元素构成的一个新的
矩阵。在这里,冒号代替了矩阵 A 的所有列。
MATLAB 中,也可采用特殊的矩阵——向量来表示序列,但 MATLAB 对序列下标
默认为从 1 开始递增,因此要表示离散信号
=nx
)(
, ... {
,
x(0)
x(1)
,
x(-1)
} ...
,
,一般应采用
两个向量分别对信号的自变量和因变量预予描述。如
=nx
)(
}7 ,3 ,4 ,1 ,0 ,1 ,1 ,2 {
−
, n=
-3~4
在 MATLAB 中表示为:
n = [-3, -2, -1, 0, 1, 2, 3, 4]; %自变量取值
x = [ 2, 1, -1, 0, 1, 4, 3, 7]; %因变量取值
注意:分号“;”表示不回显表达式的值;“%”表示其后内容为注释对象。
2.外部文件读入法
Matlab 语言也允许用户调用在 Matlab 环境之外定义的矩阵。可以利用任意的文本编
辑器编辑所要使用的矩阵,矩阵元素之间以特定分断符分开,并按行列布置。另外也可
以利用 load 函数,其调用方法为: Load+文件名[参数]
Load 函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命
名的变量,如果不给定文件名,则将自动认为 matlab.mat 文件为操作对象,如果该文件
在 Matlab 搜索路径中不存在时,系统将会报错。
例如:事先在记事本中建立文件: 1 1 1
(并以 data1.txt 保存) 1 2 3
1 3 6
在 Matlab 命令窗口中输入:
>> load data1.txt
>> data1
data1=
1 1 1
1 2 3
1 3 6
3.特殊矩阵的生成
对于一些比较特殊的矩阵(单位阵、矩阵中含 1 或 0 较多),由于其具有特殊的结
构,Matlab 提供了一些函数用于生成这些矩阵。常用的有下面几个:
zeros(m) 生成 m 阶全 0 矩阵
4
eye(m) 生成 m 阶单位矩阵
ones(m) 生成 m 阶全 1 矩阵
rand(m) 生成 m 阶均匀分布的随机阵
randn(m) 生成 m 阶正态分布的随机矩阵
1.2.2 矩阵的基本数学运算
矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、
秩运算、特征值运算等基本函数运算,这里进行简单介绍。
1.四则运算
矩阵的加、减、乘运算符分别为“+,—,*”,用法与数字运算几乎相同,但计算
时要满足其数学要求(如:同型矩阵才可以加、减)。
在 Matlab 中矩阵的除法有两种形式:左除“\”和右除“/”。在传统的 Matlab 算法
中,右除是先计算矩阵的逆再相乘,而左除则不需要计算逆矩阵直接进行除运算。通常
右除要快一点,但左除可避免被除矩阵的奇异性所带来的麻烦。在 Matlab6 中两者的区
别不太大。
2.与常数的运算
常数与矩阵的运算即是同该矩阵的每一元素进行运算。但需注意进行数除时,常数
通常只能做除数。
3.基本函数运算
求矩阵 a 的行列式
求矩阵 a 的特征值
求矩阵 a 的逆矩阵
求矩阵 a 的秩
求矩阵 a 的迹(对角线元素之和)
矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个:
det(a)
eig(a)
inv(a)或 a ^ (-1)
rank(a)
trace(a)
例如: >> a=[2 1 –3 –1; 3 1 0 7; -1 2 4 –2; 1 0 –1 5];
>> a1=det(a);
>> a2=det(inv(a));
>> a1*a2
ans=
1
注意:命令行后加“;”表示该命令执行但不显示执行结果。
5
1.2.3 矩阵的数组运算
我们在进行工程计算时常常遇到矩阵对应元素之间的运算。这种运算不同于前面讲
的数学运算,为有所区别,我们称之为数组运算。
1.基本数学运算
数组的加、减与矩阵的加、减运算完全相同。而乘除法运算有相当大的区别,数组
的乘除法是指两同维数组对应元素之间的乘除法,它们的运算符为“.*”和“./”或“.\”。
前面讲过常数与矩阵的除法运算中常数只能做除数。在数组运算中有了“对应关系”的
规定,数组与常数之间的除法运算没有任何限制。
另外,矩阵的数组运算中还有幂运算(运算符为 .^ )、指数运算(exp)、对数运
算(log)、和开方运算(sqrt)等。有了“对应元素”的规定,数组的运算实质上就是
针对数组内部的每个元素进行的。
例如:
>> a=[2 1 -3 -1; 3 1 0 7; -1 2 4 -2; 1 0 -1 5];
>> a^3
ans=
32 -28 -101 34
99 -12 -151 239
-1 49 93 8
51 -17 -98 139
>> a .^3
ans=
8 1 -27 -1
27 1 0 343
-1 8 64 -8
1 0 -1 125
由上例可见矩阵的幂运算与数组的幂运算有很大的区别。
2.逻辑关系运算
逻辑运算是 Matlab 中数组运算所特有的一种运算形式,也是几乎所有的高级语言普
遍适用的一种运算。它们的具体符号、功能及用法见表 1-1。
表 1-2 常见逻辑运算功能表
符号运算符
功 能
函 数 名
= =
等于
eq
6
~ =
<
>
<=
>=
&
|
~
不等于
小于
大于
小于等于
大于等于
逻辑与
逻辑或
逻辑非
ne
lt
gt
le
ge
and
or
not
说明:
1)在关系比较中,若比较的双方为同维数组,则比较的结果也是同维数组。它的元
素值由 0 和 1 组成。当比较双方对应位置上的元素值满足比较关系时,它的对应值为 1,
否则为 0。
2)当比较的双方中一方为常数,另一方为一数组,则比较的结果与数组同维。在算
术运算、比较运算和逻辑与、或、非运算中,它们的优先级关系先后为:比较运算、算
术运算、逻辑与或非运算。
例如:
>>a=[1 2 3; 4 5 6; 7 8 9];
>> x=5;
>> y= ones(3)*5;
>> xa= x<=a
xa=
0 0 0
0 1 1
1 1 1
>> b=[0 1 0; 1 0 1; 0 0 1];
>> ab=a&b
ab=
0 1 0
1 0 1
0 0 1
7
1.3 Matlab 的常用控制语句和绘图语句
1.3.1 循环语句
Matlab 提供两种循环方式,for 循环和 while 循环。在循环语句中,一组被重复执行
的语句称为循环体。每循环一次,都必须作出判断,是继续循环执行还是中止执行跳出
循环,这个判断的依据称为循环的中止条件。由于这些结构经常包含大量的 Matlab 命令,
故经常出现在 M 文件中,而不是直接加在 MATLAB 提示符下。
1.for 循环
for 循环允许一组命令以固定的和预定的次数重复。For 循环的一般形式是:
在 for 和 end 语句之间的{commands}按数组中的每一列执行一次。在每一次迭代中,
for x = array
end
{commands}
x 被指定为数组的下一列,即在第 n 次循环中,x=array(:, n)。
使用 for 循环应该注意:
(1)for 循环不能用 for 循环内重新赋值循环变量 n 来终止。
(2)在 for 循环内接受任何有效的 MATLAB 数组。
(3)for 循环可按需要嵌套。
2.While 循环
与 For 循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句
的值。While 循环的一般形式是:
while expression
{commands}
end
只要在表达式里的所有元素为真,就执行 while 和 end 语句之间的{commands}。通
常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组
的所有元素必须都为真。
1.3.2 选择语句
很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种
逻辑由某种 If-Else-End 结构来提供。最简单的 If-Else-End 结构是:
if expression
8