Matlab中数据与数组有许多不同的格式。 例如,数值数据(numeric data)可以放在矩阵中。 真值(True)和假值(False)数据可以存储在逻辑数组(logical array)中。 日期和时间可以存储在日期时间数组(datatime array)中。有时存储数据的方法不止一种。 文本(Text)数据可以存储为字符数组(character array)或字符串(strings),有时也可以存储为分类变量(categorical variables)。 这些都是同构数据(homogeneous data)类型,因为每个元素都是同一个类。混合(Mixed)或异构数据(heterogeneous data)可以存储在表(table)、时间表(timetable)、元胞数组(cell array)或结构数组(structure array)中。 我们可以将上述这些数组类型视为容器,实际使用中哪一种更适合我们还是取决于手头的数据类型。 数值数据-整型 MATLAB具有四个有符号整数类(int)和四个无符号整数类(uint)。- 有符号类型能够处理负整数以及正整数,但表示的数字范围不如无符号类型广泛,因为有一个位用于指定数字的正号或负号。
- 无符号类型提供了更广泛的数字范围,但这些数只能为零或正数。
MATLAB 支持以 1 字节、2 字节、4 字节和 8 字节几种形式存储整型数据。当我们将包含小数的数据定义为整型时,会自动四舍五入
各类型的数据范围如下表所示
数据类型
| 取值范围
| 转换函数
| 有符号8位整数
| -2e7到 2e7-1 | int8
| 有符号16位整数 | -2e15到 2e15-1 | int16 | 有符号32位整数 | -2e31到 2e31-1 | int32 | 有符号64位整数 | -2e63到 2e63-1 | int64 | 无符号8位整数 | 0 到 2e8-1 | uint8 | 无符号16位整数 | 0 到 2e16-1 | uint16 | 无符号32位整数 | 0 到 2e32-1 | uint32 | 无符号64位整数 | 0 到 2e64-1 | uint64 |
我们可以使用intmax()/intmin()函数来查看各数据类型的范围,例如
无符号类型同理:
对于整型类型,当你输入的数字超过了对应整型的取值范围,只会返回该整型的最大值或最小值。
整型与整型数据进行运算后仍为整型
整型与浮点型数据运算后也为整型,但运算结果会四舍五入。 数值数据-浮点型 MATLAB以双精度或单精度格式表示浮点数。默认为双精度。双精度浮点型数据同时也为Matlab的默认数据类型。 存储单精度(single)需要32位
位
| 用途
| 31
| 符号(0为正,1为负)
| 30-23
| 指数
| 22-0
| 小数
|
存储双精度(double)需要64位
位
| 用途
| 63
| 符号(0为正,1为负)
| 62-52 | 指数
| 51-0 | 小数
|
浮点型数据的取值范围可以用realmax/realmin函数获取
整型与浮点型转换操作如图所示
使用whos()函数可以查看已定义变量的类型及内存占用,可以看到双精度由于是64位所以需要8个字节的空间。 浮点型由于精度远高于整型因此作为matlab的默认数值数据类型,下面讨论一下浮点型数据的精度问题。 即使是双精度浮点型,它的位数也是有限的,面对一些数据时也会忽略掉超出位数的部分,例如计算sin(pi)
其结果并不是0,这是由于pi这类无限小数超出浮点型位数范围的数字被忽略了,因此会产生一定的误差。这类问题在所有的计算机和代码语言中都会出现。 使用eps函数可以输出对应浮点类型的精度 例如1加上该误差结果仍为1
误差会随着数值的增大而增大
后续会介绍一些类似符号运算等针对误差的操作。
|