分享

Matlab数据&数组类型详解(1)数值数据

 基算仿真 2023-05-30 发布于江苏
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中。 
我们可以将上述这些数组类型视为容器,实际使用中哪一种更适合我们还是取决于手头的数据类型

01

数值数据-整型

MATLAB具有四个有符号整数类(int)和四个无符号整数类(uint)
  • 有符号类型能够处理负整数以及正整数,但表示的数字范围不如无符号类型广泛,因为有一个位用于指定数字的正号或负号
  • 无符号类型提供了更广泛的数字范围,但这些数只能为零或正数


MATLAB 支持以 1 字节、2 字节、4 字节和 8 字节几种形式存储整型数据。
当我们将包含小数的数据定义为整型时,会自动四舍五入


各类型的数据范围如下表所示

数据类型
取值范围
转换函数
有符号8位整数
-2e7到 2e7-1int8
有符号16位整数-2e15到 2e15-1int16
有符号32位整数-2e31到 2e31-1int32
有符号64位整数-2e63到 2e63-1int64
无符号8位整数0 到 2e8-1uint8
无符号16位整数0 到 2e16-1uint16
无符号32位整数0 到 2e32-1uint32
无符号64位整数0 到 2e64-1uint64

我们可以使用intmax()/intmin()函数来查看各数据类型的范围,例如

无符号类型同理:

对于整型类型,当你输入的数字超过了对应整型的取值范围,只会返回该整型的最大值或最小值。

整型与整型数据进行运算后仍为整型

整型与浮点型数据运算后也为整型,但运算结果会四舍五入。

02

数值数据-浮点型

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

误差会随着数值的增大而增大

后续会介绍一些类似符号运算等针对误差的操作。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多