目录
创建复数
无穷大和 NaN
无穷大
NaN
确定数值类
数值的显示格式
合并不同的整数类型
合并不同大小的整数的示例
合并有符号与无符号整数的示例
合并整数与非整数数据
空矩阵
创建复数
复数由两个单独的部分组成:实部和虚部。基本虚数单位等于 -1 的平方根。这在 MATLAB® 中通过以下两个字母之一表示:i 或 j。以下语句显示了一种在 MATLAB 中创建复数值的方法。变量x被赋予了一个复数值,该复数的实部为 2,虚部为 3:
x = 2 + 3i;
创建复数的另一种方法是使用complex函数。此函数将两个数值输入组合成一个复数输出,并使第一个输入成为实部,使第二个输入成为虚部:
x = rand(3) * 5;
y = rand(3) * -8;z = complex(x, y)
z =4.7842 -1.0921i 0.8648 -1.5931i 1.2616 -2.2753i2.6130 -0.0941i 4.8987 -2.3898i 4.3787 -3.7538i4.4007 -7.1512i 1.3572 -5.2915i 3.6865 -0.5182i
也使用real 和 imag 函数分解复数,捕获其实部和虚部:
无穷大和 NaN
无穷大
MATLAB® 用特殊值 inf 表示无穷大。除以零和溢出等运算会生成无穷大,从而导致结果因太大而无法表示为传统的浮点值。MATLAB 还提供了一个称为 inf的函数,该函数以 double 标量值形式返回正无穷大的 IEEE® 算术表示。下面显示了在 MATLAB 中返回正无穷大或负无穷大的多个语句示例。
|
|
|
|
使用 isinf函数验证 x
是否为正无穷大或负无穷大:
x = log(0);isinf(x)
ans =1
NaN
MATLAB 使用一个称为 NaN(代表“非数值”)的特殊值来表示不是实数或复数的值。
0/0 和 inf/inf 之类的表达式会生成 NaN,就像执行涉及 NaN 的任何算术运算一样:
x = 0/0x =NaN
可以通过以下方式创建 NaN
:
x = NaN;whos xName Size Bytes Classx 1x1 8 double
NaN函数将 NaN
的一个 IEEE 算术表示形式作为 double
标量值返回。此 NaN
值的按位十六进制精确表示形式为:
format hex
x = NaNx =fff8000000000000
始终使用 isnan函数来校验数组中的元素是否为 NaN
:
isnan(x)
ans =1
MATLAB 保留其他NaN
表示形式的“非数值”状态,并同等对待NaN
的所有不同表示形式。但是,在某些特殊情形中(可能由于硬件限制),MATLAB 在整个计算过程中不保留其他 NaN
表示形式的精确位模式,而是使用上文定义的标准 NaN
位模式。对 NaN 执行逻辑运算。由于两个 NaN
彼此不相等,因此与 NaN
相关的逻辑运算始终返回 false,但测试是否不相等 (NaN ~= NaN
) 除外:
NaN > NaN
ans =0NaN ~= NaN
ans =1
确定数值类
可以使用以下任意命令检查变量 x
的数据类型。
命令 | 运算 |
---|---|
| 显示 |
| 将 |
| 确定 |
| 确定 |
| 确定 |
| 确定 |
| 确定 |
| 确定 |
数值的显示格式
默认情况下,MATLAB® 使用5位短格式显示数值。例如,
x = 4/3
x =1.3333
可以使用 format函数更改在命令行窗口或编辑器中的显示。
format long
xx =1.333333333333333
format函数仅设置当前 MATLAB 会话中的格式。要设置后续会话中的格式,请在环境部分的主页选项卡上,点击 预设。选择 MATLAB > 命令行窗口,然后选择数值格式选项。
下表总结了数值输出格式选项。
| 结果 | 示例 |
---|---|---|
| 短固定十进制小数点格式,小数点后包含 4 位数。 | 3.1416 |
| 长固定十进制小数点格式, | 3.141592653589793 |
| 短科学记数法,小数点后包含 4 位数。 | 3.1416e+00 |
| 长科学记数法, | 3.141592653589793e+00 |
| 短固定十进制小数点格式或科学记数法(取更紧凑的一个),总共 5 位。 | 3.1416 |
| 长固定十进制小数点格式或科学记数法(取更紧凑的一个),对于 | 3.14159265358979 |
| 短工程记数法,小数点后包含 4 位数,指数为 3 的倍数。 | 3.1416e+000 |
| 长工程记数法,包含 15 位有效位数,指数为 3 的倍数。 | 3.14159265358979e+000 |
| 正/负格式,对正、负和零元素分别显示 | + |
| 货币格式,小数点后包含 2 位数。 | 3.14 |
| 二进制双精度数字的十六进制表示形式。 | 400921fb54442d18 |
| 小整数的比率。 | 355/113 |
显示格式只影响数值的显示方式,不影响它们在 MATLAB 中的存储方式。
合并不同的整数类型
如果在矩阵中合并不同的整数类型(例如有符号与无符号,或 8 位整数与 16 位整数),MATLAB® 将返回所有元素都属于一个公共类型的矩阵。MATLAB 将生成矩阵的所有元素设置为输入矩阵中的最左侧元素的数据类型。例如,以下串联生成由 3 个 16 位有符号整数组成的向量:
A = [int16(450) uint8(250) int32(1000000)]
合并不同大小的整数的示例
禁用如上所示的整数串联警告后,一次串联下面的两个数字,然后转换它们的顺序。返回值取决于整数的串联顺序。最左侧的类型决定着向量中的所有元素的数据类型:
A = [int16(5000) int8(50)]
A =5000 50B = [int8(50) int16(5000)]
B =50 127
第一个操作返回由 16 位整数组成的向量。第二个操作返回由 8 位整数组成的向量。元素 int16(5000)
设置为 127
,即 8 位有符号整数的最大值。
相同规则也适用于垂直串联:
C = [int8(50); int16(5000)]
C =50127
注:可以使用intmax和intmin函数查找任何 MATLAB 整数类型的最大值或最小值。对于浮点类型,请使用 realmax
和 realmin。
合并有符号与无符号整数的示例
现在使用有符号与无符号整数做相同的练习。同样,最左侧的元素决定着生成矩阵中的所有元素的数据类型:
A = [int8(-100) uint8(100)]
A =-100 100B = [uint8(100) int8(-100)]
B =100 0
元素 int8(-100) 设为零,因为它不再有符号。MATLAB 在将每个元素串联为一个合并数组之前计算每个元素。换句话说,在合并两个元素前,以下语句的计算结果为一个 8 位有符号整数(等于 50)和一个 8 位无符号整数(无符号的 -50 设为零)。按照该串联,第二个元素保留其零值,但采用无符号 int8 类型:
A = [int8(50), uint8(-50)]
A =50 0
合并整数与非整数数据
合并 double
、single
或 logical
类的整数,将为生成矩阵的所有元素提供最左侧整数的数据类型。例如,以下向量的所有元素设置为 int32
:
A = [true pi int32(1000000) single(17.32) uint8(250)]
空矩阵
使用空矩阵元素构造矩阵,生成矩阵中会忽略空矩阵:
A = [5.36; 7.01; []; 9.44]A =5.36007.01009.4400