MATLAB第二章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(3)Insert菜单
选项功能
X Label
Title
Legend
Colorbar
命令窗口时进行MATLAB操作最主要的窗口,如下图所示。

其中“》”为运算提示符,表示MATLAB处于准备状态。

在该窗口中,用户可以运行函数、执行MATLAB的基本操作命令,以及对MATLAB系统的参数进行设置。

MATLAB具有良好的交互性,当在提示符后输入一段正确的运算式时,只需要按回车键,该窗口就会直接显示运算结果,在MATLAB命令窗口中运行的所有命令都共享一个相同的工作空
间,所以它们共享所有的变量。

当用户使用命令窗口进行工作时,用户可以根据需要,对数值计算结果的显示格式、字体风格、大小等进行设置。

选择“file”菜单中的“Preference”命令,弹出下图所示的参数设置对话框,在左侧列表栏中选择
“Command Window”即可进入命令窗口的设置。

1.4.1命令窗( Command Window)指令在MATLAB的默认设置中,关键字显示的字体为蓝色字体,命令、表达式、计算结果显示的字体为黑色,字符串显示的字体为褐红色,注释显示的字体为绿色,错误信息显示的字体为红色。

2.2 数值、变量和表达式
1. MATLAB基本数值类型
MATLAB的基本数值类型变量或者对象主要用来描述基本的数值对象,主要包括各种有无符号的整数型数据、双精度型(double)和单精度型(single)的数据。

本小节主要对这些数值数据类型进行介绍。

(1)整数
MATLAB中主要包括8位、16位、32位和64位的有符号和无符号类型的整数数据类型,在定义整形数据变量时,需要指定变量的数据类型。

表2-1给出了这8种数据类型的取值范围和类型转化函数。

需要说明的是,表2-1中定义的整数数据类型不同,但是这些类型的数据具有相同的性质。

每种类型数据都可以通过函数intmax和intmin来查询此种数据类型的上下限。

例2-1整型数据的定义。

x1=int16(20)
x1=
20
intmin(‘int16’)
ans=
-32768
intmax(‘int16’)
ans=
32767
class(x1)
ans=
int16
y1=35
y1=
35
class(y1)
ans=
double
以上代码中,显示出MATLAB中的整型数据定义方法及其默认的数据类型,同时通过intmin和intmax来获取整型数据的上下限。

此外,class函数可以获取所定义变量的数据类型。

MATLAB的默认数据存储类型为double类型,利用类型转化函数可将数据存储为整数类型。

如果数据中含有小数部分,MATLAB将按照四舍五入的方法将其转化为整数。

例2-2整数类型的转化。

在命令窗输入:
x=4.5001;
int16(x)
运行结果:
ans=
5
用户也可以根据需要对数据的小数部分进行舍入。

例2-3整数类型的范围。

在命令窗输入:
intmax(‘int8’),x=int8(333)
运行结果:
ans=
127
x=
127
整数的取值范围可以通过函数intmax和intmin来查看,如果待转化的数据超出了取值范围,则将该数据变为取值范围内的最值。

(2)浮点数
MATLAB的浮点数分为单精度浮点数类型(single)和双精度浮点数类型(double)。

double为默认数据类型,需要64位的存储空间。

单精度和双精度类型的取值范围可以选择用函数realmin、realmax来得到。

单精度类型浮点数的精度可以通过函数eps来得到。

例2-4单、双精度浮点数的数值范围和精度。

realmin(‘single’)
ans=
1.1755e-038
realmax(‘single’)
ans=
3.4028e+038
realmin(‘double’)
ans=
2.2251e-038
eps
ans=
2.2204e-016
此外,需要注意对于单精度的数据变量,创建方法和整型数据的创建方法相同,而对于单精度数据和双精度数据之间的混合运算,处理结果为单精度的数据结果。

例2-5浮点数相对精度。

在命令窗输入:
format long
eps(7),eps(3)
运行结果:
ans=
8.881784197001252e-016
ans=
4.440892098500626e-016
在命令窗输入:
eps(single(7),eps(single(3))
运行结果:
ans=
4.7683716e-007
ans=
2.3841858e-007
对于浮点数的运算操作要特别小心,以免带来不必要的麻烦。

MATLAB中提供了大量的数据操作函数,可以进行不同数据类型变量的创建或数据之间的转化处理。

表2-4所示为其中的一部分数据操作函数,主要实现整型变量或数据与双精度类型变量或数据之间的转换操作。

表2-4 MATLAB中常见的数值数据函数
函数名称描述
4 double创建或转化为精双度类型的数据
single创建或转化为单精度类型的数据
int8,int16, int32,int64创建或转化为有符号的整型数据
uint8, uint16, uint32, uint64创建或转化为无符号的整型数据
isnumeric数据类型判断函数,如果为整型数据或浮点数,那么函数返回true isinteger整型数据判断函数,如果为整型数据,则返回true
isfloat浮点数类型判断函数,如果为单精度或双精度数据,则返回true
isa(x,’type’)判断x是否为指定的type类型数据,若是则返回true
cast(x,’type’)将x的数据类型转化为type类型数据
intmax(’type’)返回整形数据的最大数值
intmin(’type’)返回整形数据的最小数值
realmax(’type’)返回浮点数的最大数值
realmin(’type’)返回浮点数的最小数值
eps(’type’)返回type类型数据的eps数值(浮点数值,即精度)
eps(‘x’)x的eps数值
表中,type为numeric、integer、float及其他类型的数据类型。

(3)复数
MATLAB的复数分为实部和虚部两个部分,虚部可以用字母i或j来表示。

直接将复数的数学表达式作为命令输入,就可以创建一个复数。

另外,运用命令complex(a,b)也可以创建复数。

complex函数的第一个参量是实部数组,第二个参量是虚部数组。

例2-6创建复数。

在命令窗输入:
format short
1-2i
运行结果:
ans=
1.0000-
2.0000i
或在命令窗输入:
complex(1,-2)
运行结果:
ans=
1.0000-
2.0000i
利用函数real(z)和imag(z)可以获取复数的实部和虚部。

例2-7获取复数的实部和虚部。

在命令窗输入:
A=[1 2;3 4];B=[5 6;7 8];
Z=complex(A,B)
Zr=real(Z)
Zi=imag(Z)
运行结果:
Z=
1.0000+5.0000i
2.0000+6.0000i
3.0000+7.0000i
4.0000+8.0000i Zr= 1 2 3 4 Zi= 5 6 7 8(4)无穷与非数
MATLAB 中分别用inf 和-inf 表示无穷和负无穷,用NAN 表示非数。

例2-8无穷。

在命令窗输入: 1/0
运行结果:
ans= Inf 例2-9非数。

在命令窗输入:
0/0运行结果: ans= NaN (5)数据显示形式
MATLAB 默认的数据显示形式是5位长度,但是用户可以通过参数选择对话框或者format 函数设置数据的显示形式。

如果需要采用其他的输出格式进行数据显示,那么用户可以通过设置输出格式来进行标示。

可以设置的数据显示格式命令如表2-5所示。

表2-5输出数据显示格式命令
格式命令含义format short 小数点后包括4位有效数字,最多不超过7位有效数字;如果数值大于1000,那
么按照科学计数法来表示
format long 用15位数字来表示format short e 5位科学计数法表示format long e 15位科学计数法表示format short g 从format short 和format short e 中自动选择最佳的数值表示方法format long g 从format long 和format long e 中自动选择最佳的数值表示方法format rat 采用近似有理数来表示format hex 十六进制标示format +用+、-和空格来分别标示正数、负数和零,复数中的虚部不表示format bank 金融表示方法,元、角、分等format compact 显示变量之间没有空格format loose 显示变量之间有空格
需要注意的是,以上所有的设置格式在当前的工作空间内有效,而在该执行过程后,这些格式都不再起作用,即当关闭工作空间后,这些设置结果都不再起作用。

对于format 的具体意义,读者还可以通过在命令窗口中输入help format 来查询。

例2-10数据显示形式。

在命令窗输入:
x=[2.2 1e-13]运行结果: x=
2.20000.0000
继续在命令窗输入: format long x x=
11
2.200000000000000 0.00000000000100
2. 变量
变量是任何程序设计语言的基本元素之一。

MATLAB 并不要求对所使用的变量进行事先声明,也不需要指定变量类型,MATLAB 会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型。

在赋值过程中,如果变量已经存在,MATLAB 会用新值代替旧值,并以新的变量类型代替旧的变量类型。

(1) 变量的种类
•局部变量(Local Variables)
A = 0.01
•全局变量(Global Variables)
global ALPHA
ALPHA = 0.01
(2) 变量的命名规则
•变量名、函数名是对字母大小写敏感的,即区分大小写,如变量myvalue、MYValue、myVALUE等是不同的变量名。

sin是MATLAB定义的正弦函数名,但SIN,Sin等都不是。

•变量名的第一个字符必须是英文字母,最多可以包含65个字符(英文、数字和下连线)(可以用name_length_max函数查看当前版本的MATLAB允许的变量名最多包含多少个字符,老版本只能31个)。

•变量名中不得包含空格,标点符号。

•M文件名也必须满足这样的规则,才能在MATLAB中运行。

在MATLAB中,数值都习惯采用十进制来表示,和一般的数学表示方法一致。

如5,-
10,0.001,3.1415926,3.0e+010等。

此外,在MATLAB工作空间中,还驻留几个由系统本身定义的变量。

这些变量在2011aMATLAB程序启动后,就已经自动定义,具有特定的含义和意义,如下表2-6。

表2-6 MATLAB预定义的变量
预定义变量含义
ans MATLAB中默认的计算结果变量名,answer的缩写
形式
1
pi 圆周率π
eps 浮点运算相对精度
Inf或inf无穷大数的表示,如1/0
nan或NaN不定值,不是一个数,通常由0/0、∞/∞等不能确定
数值的时候产生
i 或j复数中的虚数单位,即i=j=1
-
realmin可用的最小正浮点数
realmax可用的最大正浮点数
nargin在调用函数时,函数变量的输入个数
nargout函数调用时,由函数输出的变量个数
〖说明〗
•在使用时,应尽量避免对这些变量重新赋值。

•MATLAB 以双精度执行所有的运算,运算结果可以在屏幕上输出,同时赋给指定变量;若无指定变量,则系统会自动将结果赋给变量“ans”。

在定义变量时还需要注意,如果用户对预定义的特殊变量赋值,那么该特殊变量的数值将会临时被覆盖。

当用clear命令清楚变量数值或重新启动MATLAB之后,预定义变量的数值可以恢复到初始值而不会发生变化;此外,在进行运算过程中,被0除不会导致程序的终止,系统会根据情况给出警告信息,并相应地用Inf或NaN来表示这些计算结果。

3. 运算符和表达式
(1)数学运算符
在MATLAB中提供了各种数学运算符号,这些运算符号是进行计算的基础。

数学运算符是定义在矩
阵上的,一个数在MATLAB中被看成1×1矩阵。

主要包括以下一些基本的运算符号,如表2-7所示。

表2-7 MATLAB表达式的基本运算符
符号功能符号功能
+加法-减法
*矩阵乘法.*乘,点乘,即数组乘法
/右除./数组右除
\左除\.数组左除
^乘方.^数组乘方
‘矩阵共轭转置.’矩阵转置
4〖说明〗
•MATLAB所有的运算定义在复数域上。

对于方根问题,运算只返回i处于第一象限的解。

•MATLAB用左斜杠会右斜杠分别代表“左除”或“右除”运算。

对标量而言,这二者的作用没有区别;但对矩阵来说,“左除”和“右除”将产生不同的结果。

例2-11矩阵的乘除和乘方。

%定义矩阵A和矩阵B
A=round(rand(3)*10)
A=
9 4 4
7 9 9
2 9 1
B=magic(3)
B=
8 1 6
3 5 7
4 9 2
%矩阵的叉乘和点乘
C1=A*B
C1=
100 65 90
119 133 123
47 56 77
C2=A.*B
C2=
72 4 24
21 45 63
8 81 2
%矩阵的左除和右除
D1=A./B
D1=
1.1250 4.0000 0.6667
2.3333 1.8000 1.2857
0.5000 1.0000 0.5000
D2=A.\B
D2=
0.8889 0.2500 1.5000
0.4268 0.5556 0.7778
2.0000 1.0000 2.0000
%矩阵的乘方
E1=A.^2
E1=
81 16 16
49 81 81
4 81 1
E2=A^2
E2=
117 108 76
144 190 118
83 98 90
从例2-11可以看出,无论哪种运算方法(乘法、除法以及乘方),带“.”的运算方式表示对矩阵的元素进行运算。

对于矩阵而言,矩阵的右除是一般意义的除法,而左除则具有对称意义,即A./B=B.\A。

(2)MATLAB表达式的书写规则
MATLAB中的表达式,和一般的数学表达式的书写原则相同,但对于数组运算而言,则需要注意数组元素的运算和数组的计算是不同的。

书写规则如下:
•表达式由变量名、运算符和函数名组成;
•表达式将按与常规相同的优先级自左至右执行运算;
•优先级的规定是:指数运算级别最高,乘除运算次之,加减运算级别最低;
•括号可以改变运算的次序;
•书写表达式时:赋值符“=”和运算符两侧允许有空格,以增加可读性。

2.3数组的定义
数组是由若干个数排列成矩形的组合。

数组的内涵经过扩充,范围很广。

以维数来分,有一维数组、二维数组和多维数组。

按数组中元素来分,有数值数组、字符串数组、结构数组和单元数组等。

2.3.1 数组的构造及生成规则
1. 一维数组的创建
概括而言,创建一维数组时,可以通过以下几种方法来进行。

(1)直接输入法:此时,可以直接通过空格、逗号和分号来分隔数组元素,在数组中输入任意的元素,生成一维数组。

(2)布长生成方法:x=a:inc:b,在使用这种方法创建一维数组时,a和b为一维向量数组的起始数值和终止数值,inc为数组的间隔步长;如果a和b为整数时,省略inc可以生成间隔为1的数列。

根据a
和b的大小不同,inc可以采用正数,也可以采用负数来生成一维向量数组。

(3)等间距线形生成方法:x=linspace(a,b,n),这种方法采用函数在a和b之间的区间内得到n个线形采样数据点。

(4)等间距对数生成方法:x=logspace(a,b,n),采用这种方法时,在设定采样点总个数n的情况下,采用常用对数计算得到n个采样点数据值。

例2-12 一维数组的创建。

A1=[0 pi 0.5*pi 0.7 1.5] % 直接输入数据生成数组
A1=
0 3.1416 1.5708 0.7000 1.5000
A2=0:0.5:3 % 步长生成方法
A2=
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
A3=linspace(1,6,7) % 等间距线形生成方法
A3=
1.0000 1.8333
2.6667
3.5000
4.3333
5.1667
6.0000
A4=logspace(1,6,7) % 等间距对数生成方法
A4=
1.0e+006*
0.0000 0.0001 0.0005 0.0032 0.0215 0.1468 1.0000
当创建数组后,对单个元素的访问,可以直接通过选择元素的索引来加以访问;如果访问数组内的一块数据,则可以通过冒号方式来进行访问;如果访问其中的部分数值,则可以通过构造访问序列或通过构造向量列表来加以访问。

在访问数组元素的过程中,访问的索引数组必须是正整数,否则,系统将会提示一条警告信息。

例2-12访问数组的内容。

x=linspace(1,6,7) %创建一维数组
x=
1.0000 1.8333
2.6667
3.5000
4.3333
5.1667
6.0000
x(5) %索引访问数组元素
ans=
4.3333
x(1:5) %访问一块数据
ans=
1.0000 1.8333
2.6667
3.5000
4.3333
x(3:end) %访问一块数据
ans=
2.6667
3.5000
4.3333
5.1667
6.0000
x(1:2:7) %构造访问数组
ans=
1.0000
2.6667 4.3333 6.0000
x([1 4 6 3 2 2]) %直接构造访问数组
ans=
1.0000 3.5000 5.1667
2.6667 1.8333 1.8333
x(3.2)
一维数组可以是一个行向量,也可以是一列多行的列向量。

在定义的过程中,如果元素之间通过“;”分隔元素,那么生成的向量是列向量;而通过空格或都好哦分隔的元素则为行向量。

当然列向量和行向量之间可以通过转置操作“’”来进行相互之间的转化过程。

但需要注意的是,如果一维数组的元素是复数,那么经过转置操作“’”后,得到的是复数的共轭转置结果,而采用点—共轭转置操作时得到的转置数组,并不进行共轭操作。

例2-13 一维数组的方向。

A=[1;2;3;4;5] % 生成列向量
A=
1
2
3
4
5
B=A’ % 生成A的转置向量
B=
1 2 3 4 5
>>C=linspace(1,10,5) % 生成新的列向量
C=
1.0000
3.2500
5.5000
7.7500
10.0000
Z=A+C*i % 生成复数向量
Z=
1.0000+1.0000i
2.0000+
3.2500i
3.0000+5.5000i
4.0000+7.7500i
5.0000+10.0000i
Z1=Z’ % 复数向量共轭转置
Z1=
Columns 1 through 4
1.0000-1.0000i
2.0000-
3.2500i 3.0000-5.5000i
4.0000-7.7500i
Columns 5
5.0000-10.0000i
Z2=Z.’ % 点共轭转置
Z2=
Columns 1 through 4
1.0000+1.0000i
2.0000+-
3.2500i 3.0000+5.5000i
4.0000+7.7500i
Columns 5
5.0000+10.0000i
2. 多维数组的创建
对于二维数组和三维数组而言,创建方法和一维数组的创建方法不同。

二维数组可以通过以下3种方法来创建。

(1)直接输入二维数组的元素来创建,此时,二维数组的行和列可以通过一维数组的方式来进行创建,不同行之间的数据可以通过分号进行分隔,同一行中的元素可以通过逗号或空格来进行分隔。

(2)通过MATLAB的Array Editor来输入二维数组。

创建方法为,点击New Variable创建图标,此时系统在工作空间的变量列表中出现新的矩阵变量,用户可以改变该变量的名称。

同时,在MATLAB的工作空间出现矩阵编辑器表格,可以直接输入矩阵的数据。

(3)对于大规模的数据,可以通过数据表格方式来输入,此时可以单击选择工作空间的Import Data 图标,选中已经编写好的矩阵数据文件后,导入到工作空间中。

(4)可以通过MATLAB所提供的其他函数来生成二维数组。

例2-14 创建多维数组。

在命令窗输入:
A=[5 7 8;0 1 9;4 3 6];A(;,;,2)=[1 0 4;3 5 6;9 8 7]
运行结果:
A(;,;,1)=
5 7 8
0 1 9
4 3 6
A(;,;,2)=
1 0 4
3 5 6
9 8 7
与矩阵扩展类似,多维数组也可以直接进行扩展。

多维数组(n维数组),如在三维数组中存在行、列和页这样三维,即三维数组中的第三维称为页。

在每一页中,存在行和列。

在MATLAB中,可以创建更高维的n维数组。

但实际上主要用到的还是三维数组。

三维数组的创建方法有以下几种。

(1)直接创建方法。

在生成过程中,可以选择使用MATLAB提供的一些内置函数来创建三维数组,如zeros、ones、rand、randn等。

(2)通过直接索引的方法进行创建。

(3)使用MATLAB的内置函数reshape和repmat将二维数组转换为三维数组。

(4)使用cat函数将低维数组转化为高维数组。

例2-15 利用函数创建多维数组。

在命令窗输入:
B=randn(4,3,2)
运行结果:
B(;,;,1)=
-0.6918 -1.4410 0.8156
0.8580 0.5711 0.7119
1.2540 -0.3999 1.2902
-1.5937 0.6900 0.6686
B(;,;,2)=
1.1908 -1.6041 0.8051
-1.2025 0.2573 0.5287
-0.0198 -1.0565 0.2193
-0.1567 1.4151 -0.9219
利用串函数也可以实现多维数组的创建。

例2-16 利用串函数创建多维数组。

在命令窗输入:
C=cat(3,[2 8;1 5],[1 3;4 9])
运行结果:
C(;,;,1)=
28
19
C(;,;,2)=
13
4 9
2.3.2特殊数组
在MATLAB中,字符串可以用字符数组来表示,而字符数组则与ASCII码相对应。

相关文档
最新文档