MATLAB 中的数据类型主要包括数值类型、 逻辑类型、 字符串、函数句柄、 结构体和单元数组类型。 这6种基本的数据类型都是按照数组形式存储和操作的。
整型:int8、uint8、int16、uint16、int32、uint32。有符号和无符号的整数类型
浮点型:单精度浮点类型:single,双精度浮点类型:double。
MATLAB中数值类型的数据包括有符号和无符号整数、 单精度浮点数和双精度浮点数。 在未加说明与特殊定义时, MATLAB对所有数值按照双精度浮点数类型进行存储和操作。在需要时, 可以指定系统按照整数型或单精度浮点型对指定的数字或数组进行存储、 运算等操作。 相对于双精度浮点数格式, 整数型与单精度浮点型的优点在于节省变量占用的内存空间, 当然首先要在满足精度要求的前提下。
MATLAB中提供了8种内置的整数类型, 这8种类型的存储占用位数、 能表示的数值范围和转换函数均不相同,不同的整数类型所占用的位数不同, 因此能够表示的数值范围也不同。 在实际应用中, 应根据实际需要合理选择合适的整数类型。由于MATLAB中数值的默认存储类型是双精度浮点类型, 因此将变量设置为整数类型时, 需要使用相应的转换函数, 将双精度浮点数转换为指定的整数类型。在转换过程中, MATLAB默认将待转换数值转换为与之最为接近的整数值, 若小数部分为0.5, 则转换后的结果为与该浮点数最接近的两个整数中绝对值较大的一个。
MATLAB 中提供了单精度浮点数类型和双精度浮点数类型, 其存储位宽、 能够表示的数值范围、 数值精度各方面均不相同。由于MATLAB中的默认数值类型为双精度浮点类型, 因此与创建整数类型数值一样, 也可以通过转换函数来创建单精度浮点类型。双精度浮点数参与运算时, 返回值的类型依赖于参与运算的其他数据类型。 参与运算的其他数据为逻辑型、 字符型时, 返回结果为双精度浮点型; 参与运算的其他数据为整数型时, 返回结果为相应的整数类型;参与运算的其他数据为单精度浮点型时, 返回结果为相应的单精度浮点型。浮点数参与的运算。
在命令行窗口中输入:
>> a=uint32(120);b=single(22.809);c=73.226;
>> ab=a*b
输出结果:
错误使用 *
整数只能与相同类的整数或标量双精度值组合使用。
在命令行窗口中输入:
>> ac=a*c
输出结果:
ac= uint32 8787
在命令行窗口中输入:
>> bc=b*c
输出结果:
bc = single 1.6702e+03
在命令行窗口中输入:
>> str='hello'
输出结果:
str =
'hello'
在命令行窗口中输入:
>> newstr=str-44.3
输出结果:
newstr =
59.7000 56.7000 63.7000 63.7000 66.7000
在命令行窗口中输入:
>> whos
输出结果:
Name Size Bytes Class Attributes
a 1x1 4 uint32
ac 1x1 4 uint32
b 1x1 4 single
bc 1x1 4 single
c 1x1 8 double
newstr 1x5 40 double
str 1x5 10 char
whos指令可以查看工作区的数据的信息类型及大小,由于浮点数只占用一定的存储位宽, 其中只有有限位分别用来存储指数部分和小数部分。 因此, 浮点类型能够表示的实际数值是有限且离散的, 任何两个最近相邻的浮点数之间都有微小间隙, 而处在间隙中的数值都只能用这两个相邻的浮点数之中的一个来表示。
MATLAB中提供了eps函数, 可以获取一个数值和最接近该数值的浮点数之间的间隙。
在命令行窗口中输入:
>> format long
>> eps(3)
输出结果:
ans =
4.440892098500626e-16
在命令行窗口中输入:
>> eps(single(3))
输出结果:
ans =
single 2.3841858e-07
复数包括实部和虚部两部分。
MATLAB中默认使用字符i或j作为虚部标志。 创建复数时, 可以直接按照复数形式进行输入或者利用complex 函数。
函数 | 说明 |
---|---|
real(z) | 返回复数z的实部 |
image(z) | 返回复数z的虚部 |
abs(z) | 返回复数z的模 |
angle(z) | 返回复数z的幅角 |
conj(z) | 返回复数z的共轭复数 |
complex(a,b) | 以a为实部、b为虚部创建复数 |
MATLAB中使用Inf和-Inf分别代表正无穷量和负无穷量, NaN表示非数值量。 正负无穷量的产生一般是由于运算溢出, 产生了超出双精度浮点数数值范围的结果, 非数值量则是由于0/0或Inf/Inf类型的非正常运算而产生的, 这两个NaN彼此是不相等的。
在命令行窗口中输入:
>> a=0/0,b=log(0),c=inf-inf
输出结果:
a =
NaN
b =
-Inf
c =
NaN