第二章、MATLAB基础知识
2.1 数据类型
MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和 单元数组类型。这6种基本的数据类型都是按照数组形式存储和操作的。另外,MATLAB 中还有两种用于高级交叉编程的数据类型,分别是用户自定义的面向对象的用户类类型和 Java类类型。
2.1.1 数值类型
MATLAB中数值类型的数据包括有符号和无符号整数、单精度浮点数和双精度浮点数。在未加说明与特殊定义时,MATLAB对所有数值按
MATLAB会自动进行记忆体的使用和回收,而不像C语言,必须由使用者一一指定。这些功能使得MATLAB易学易用,使用者可专心致力于撰写程序。
1、整数类型
●8种内置的整数类型。
●转换函数
- 由于由于MATLAB中数值的默认存储类型是双精度浮点类型,因此将变量设置为整数类型时,需要使用相应的转换函数,将双精度浮点数转换为指定的整数类型。
- 在转换过程中,MATLAB默认将待转换数值转换为与之最为接近的整数值,若小数部分为0.5,则转换后的结果为与该浮点数最接近的两个整数中绝对值较大的一个。
- 这些转换函数也可以将其他数据类型转换为指定的数据类型。在不超出数值范围的情况下,任意两个整数类型之间也可以通过转换函数进行相互转换。
- 同时,由于不同的整数类型能够表示的数值范围不同,因此当运算结果超出相应的整数类型能够表示的范围时,就会出现一处错误,运算结果被置为该整数类型能够表示的最大值或最小值。
整数类型 | 数值范围 | 转换函数 |
---|---|---|
有符号8位整数 | ~ | int8 |
无符号8位整数 | 0~ | uint8 |
有符号16位整数 | ~ | int16 |
无符号16位整数 | ~ | uint16 |
有符号32位整数 | ~ | int32 |
无符号32位整数 | 0~ | uint32 |
有符号64位整数 | ~ | int64 |
无符号64位整数 | 0~ | uint64 |
●取整函数
- MATLAB中还包含了几类不同运算法则的取整函数,也可以把浮点数转换成整数。
函数 | 运算法则 | 示例 |
---|---|---|
floor(x) | 向下取整 | floor(1.2)=1; floor(2.5)=2; floor(-2.5)=-3 |
ceil(x) | 向上取整 | ceil (1.2)=2; ceil(2.5)=3; ceil(-2.5)=-2 |
round(x) | 取最接近的整数,如果小数部分是0.5,则向绝对值 大的方向取整 | round(1.2)=1; round(2.5)=3; round(-2.5)=-3 |
fix(x) | 向0取整 | fix(1.2)=1; fix(2.5)=2; fix(-2.5)=-2 |
2、浮点数类型
●两种浮点数类型
- 单精度浮点类型
- 双精度浮点类型
●转换函数
由于MATLAB中的默认数值类型为双精度浮点类型,因此与创建整数类型数值一样,也可以通过转换函数来实现创建单精度浮点类型。
浮点类型 | 存储位宽 | 各数位的意义 | 数值范围 | 转换函数 |
---|---|---|---|---|
单精度 | 32 | 0~22位表示小数部分; 23~30位表示指数部分; 31位表示符号(0正1负) | -3.40282e+038~-1.17549e-038 ;1.17549e-038~3.40282e+038 | single |
双精度 | 64 | 051位表示小数部分;5262位表示指数部分;63位表示符号(0正1负) | -1.79769e-308~-2.22507e-308; 2.22507e-308~1.79769e+308 | double |
●返回值
双精度浮点数参与运算时,返回值的类型依赖于参与运算的其他数据类型。
- 参与运算的其他数据为逻辑型、字符型时,返回结果为双精度浮点型;
- 参与运算的其他数据为整数型时,返回结果为相应的整数类型;
- 参与运算的其他数据为单精度浮点型时,返回结果为相应的单精度浮点型。
!!! 在MATLAB中,单精度浮点类型不能与整数类型进行算术运算。
例
浮点数参与的运算
在命令行窗口中输入:
a=uint32(120);b=single(22.809);c=73.226;
ab=a*b
输出结果:
在命令行窗口中输入:
ac=a*c
输出结果:
在命令行窗口中输入:
bc=b*c
输出结果:
在命令行窗口中输入:
str='hello'
输出结果:
在命令行窗口中输入:
newstr=str-44.3
输出结果:
在命令行窗口中输入:
whos
输出结果:
●eps函数
由于浮点数只占用一定的存储位宽,其中只有有限位分别用来存储指数部分和小数部分。因此,浮点类型能够表示的实际数值是有限且离散的,任何两个最近相邻的浮点数之间都有微小间隙,而处在间隙中的数值都只能用这两个相邻的浮点数之中的一个来表示。
MATLAB中提供了 eps函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。
例
浮点数的精度
在命令行窗口中输入:
format long
eps(3)
输出结果:
在命令行窗口中输入:
eps(single(3))
输出结果:
3、复数
●复数的创建
- 直接按照复数形式进行输入
- 利用complex函数
●有关复数的相关函数
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
real(z) | 返回复数Z的实部 | imag(z) | 返回复数Z的虚部 |
abs(z) | 返回复数Z的模 | angle(z) | 返回复数Z的辐角 |
conj(z) | 返回复数Z的共轭复数 | complex(a,b) | 以a为实部、b为虚部创建复数 |
4.无穷量(Inf)和非数值量(NaN)
●Inf
- 使用Inf和-Inf分别代表正无穷量和负无穷量。
- 正负无穷量的产生一般是由于运算溢出,产生了超出双精度浮点数数值范围的结果。
●NaN
- NaN表示非数值量。
- 非数值量则是由于0/0或In/Inf类型的非正常运算而产生的,这两个NaN彼此是不相等的。
●函数创建
除了异常运算结果外,MATLAB还提供了特定函数Inf和NaN来创建指定数值类型的无穷量和非数值量,生成结果默认为双精度浮点类型中还有一种特殊的指数类型的数据叫作非数,通常表示运算得到的数值结果超出了运算范围。非数的实部用NaN表示,虚部用InF表示。
2.1.2 逻辑类型
1、逻辑类型的数据
●逻辑类型的数据是指布尔类型的数据及数据之间的逻辑关系。除了传统的数学运算之外,MATLAB还支持关系和逻辑运算。
●这些运算的目的是提供求解真/假命题的答案。
●作为所有关系和逻辑表达式的输入,MATLAB把任何非零数值当作真,把零当作假。
●所有关系和逻辑表达式的输出:对于真,输出为1;对于假,输出为0。
2、关系操作符
●MATLAB关系操作符能用来比较两个同样大小的数组。
●或用来比较一个数组和一个标量,标量和数组中的每一个元素相比较,结果与数组大小一样。
关系操作符 | 说明 |
---|---|
< | 小与 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
~= | 不等于 |
!!!
“=”和“==”在MATLAB中的意义是不同的。
●“==”是对等号两边的两个变量进行比较,当它们相等时返回1,不相等时返回0;
●“=”则是被用来将运算的结果赋给一个变量。
例
判断两个数组之间的元素是否相等。
在命令行输入:
=1:9,B=10-A
输出结果:
在命令行输入:
TrueorFalse=(A==B) %判断A与B中的元素是否相等
输出结果:
3、逻辑运算符
●逻辑运算符提供了一种组合或否定关系表达式。
逻辑运算符 | 说明 |
---|---|
& | 与 |
| | 或 |
~ | 非 |
●逻辑函数:
xor(x,y)指令的功能为异或运算,x和y同为零(假)或非零(真)时返回0,否则返回1。
any(x)指令的功能为判断是否为零向量或零矩阵(即向量或矩阵中的元素全部为零),如果是零向量或零矩阵,则返回1,否则返回0。
在命令行输入:
A=1:9;
TrueorFalse=(A>2)&(A<6) %判断A中元素是否在2~6之间
输出结果:
4、测试函数
测试函数,在运算过程中用来测试特殊值或条件是否存在,并返回相应的表示结果的逻辑值。
函数名称 | 函数功能 |
---|---|
finite | 元素有限,返回真值 |
Isempty | 参量为空,返回真值 |
isglobal | 参量是一个全局变量,返回真值 |
ishold | 当前绘图保持状态是“ON”,返回真值 |
isieee | 计算机执行IEEE算术运算,返回真值 |
isinf | 元素无穷大,返回真值 |
isletter | 元素为字母,返回真值 |
isnan | 元素为不定值,返回真值 |
isreal | 参量无虚部,返回真值 |
isspace | 元素为空格字符,返回真值 |
isstr | 参量为一个字符串,返回真值 |
isstudent | MATLAB为学生版,返回真值 |
isunix | 计算机为UNIX系统,返回真值 |