Matlab中数值类型(三)

目录

创建复数

无穷大和 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.2753i
   2.6130 -0.0941i   4.8987 -2.3898i   4.3787 -3.7538i
   4.4007 -7.1512i   1.3572 -5.2915i   3.6865 -0.5182i

        也使用real 和 imag 函数分解复数,捕获其实部和虚部:

无穷大和 NaN

无穷大

         MATLAB® 用特殊值 inf 表示无穷大。除以零和溢出等运算会生成无穷大,从而导致结果因太大而无法表示为传统的浮点值。MATLAB 还提供了一个称为 inf的函数,该函数以 double 标量值形式返回正无穷大的 IEEE® 算术表示。下面显示了在 MATLAB 中返回正无穷大或负无穷大的多个语句示例。

x = 1/0
x =
Inf

x = 1.e1000
x =
   Inf

x = exp(1000)
x =
   Inf

x = log(0)
x =
   -Inf

        使用 isinf函数验证 x 是否为正无穷大或负无穷大:

x = log(0);

isinf(x)
ans =
     1

NaN

        MATLAB 使用一个称为 NaN(代表“非数值”)的特殊值来表示不是实数或复数的值。

        0/0 和 inf/inf 之类的表达式会生成 NaN,就像执行涉及 NaN 的任何算术运算一样:

x = 0/0

x =

   NaN

        可以通过以下方式创建 NaN

x = NaN;

whos x
  Name      Size                   Bytes  Class

  x         1x1                        8  double

        NaN函数将 NaN 的一个 IEEE 算术表示形式作为 double 标量值返回。此 NaN 值的按位十六进制精确表示形式为:

format hex
x = NaN

x =

   fff8000000000000

        始终使用 isnan函数来校验数组中的元素是否为 NaN

isnan(x)
ans =

     1

        MATLAB 保留其他NaN表示形式的“非数值”状态,并同等对待NaN的所有不同表示形式。但是,在某些特殊情形中(可能由于硬件限制),MATLAB 在整个计算过程中不保留其他 NaN 表示形式的精确位模式,而是使用上文定义的标准 NaN 位模式。对 NaN 执行逻辑运算。由于两个 NaN 彼此不相等,因此与 NaN 相关的逻辑运算始终返回 false,但测试是否不相等 (NaN ~= NaN) 除外:

NaN > NaN
ans =
     0

NaN ~= NaN 
ans =
     1

确定数值类

        可以使用以下任意命令检查变量 x 的数据类型。

命令

运算

whos x

显示 x 的数据类型。

xType = class(x);

将 x 的数据类型赋予变量。

isnumeric(x)

确定 x 是否为数值类型。

isa(x, 'integer')
isa(x, 'uint64')
isa(x, 'float')
isa(x, 'double')
isa(x, 'single')

确定 x 是否为指定的数值类型。(此处显示了任意整数、无符号的 64 位整数、任意浮点数、双精度数和单精度数的示例)。

isreal(x)

确定 x 是实数还是复数。

isnan(x)

确定 x 是否不是数值 (NaN)。

isinf(x)

确定 x 是否为无限值。

isfinite(x)

确定 x 是否为有限值。

数值的显示格式

        默认情况下,MATLAB® 使用5位短格式显示数值。例如,

x = 4/3
x =

    1.3333

        可以使用 format函数更改在命令行窗口或编辑器中的显示。

format long
x

x =

   1.333333333333333

        format函数仅设置当前 MATLAB 会话中的格式。要设置后续会话中的格式,请在环境部分的主页选项卡上,点击  预设。选择 MATLAB > 命令行窗口,然后选择数值格式选项。

        下表总结了数值输出格式选项。

Style

结果

示例

short (default)

短固定十进制小数点格式,小数点后包含 4 位数。

3.1416

long

长固定十进制小数点格式,double 值的小数点后包含 15 位数,single 值的小数点后包含 7 位数。

3.141592653589793

shortE

短科学记数法,小数点后包含 4 位数。

3.1416e+00

longE

长科学记数法,double 值的小数点后包含 15 位数,single 值的小数点后包含 7 位数。

3.141592653589793e+00

shortG

短固定十进制小数点格式或科学记数法(取更紧凑的一个),总共 5 位。

3.1416

longG

长固定十进制小数点格式或科学记数法(取更紧凑的一个),对于 double 值,总共 15 位;对于 single 值,总共 7 位。

3.14159265358979

shortEng

短工程记数法,小数点后包含 4 位数,指数为 3 的倍数。

3.1416e+000

longEng

长工程记数法,包含 15 位有效位数,指数为 3 的倍数。

3.14159265358979e+000

+

正/负格式,对正、负和零元素分别显示 +- 和空白字符。

+

bank

货币格式,小数点后包含 2 位数。

3.14

hex

二进制双精度数字的十六进制表示形式。

400921fb54442d18

rat

小整数的比率。

355/113

        显示格式只影响数值的显示方式,不影响它们在 MATLAB 中的存储方式。

合并不同的整数类型

        如果在矩阵中合并不同的整数类型(例如有符号与无符号,或 8 位整数与 16 位整数),MATLAB® 将返回所有元素都属于一个公共类型的矩阵。MATLAB 将生成矩阵的所有元素设置为输入矩阵中的最左侧元素的数据类型。例如,以下串联生成由 3 个 16 位有符号整数组成的向量:

A = [int16(450) uint8(250) int32(1000000)]

合并不同大小的整数的示例

        禁用如上所示的整数串联警告后,一次串联下面的两个数字,然后转换它们的顺序。返回值取决于整数的串联顺序。最左侧的类型决定着向量中的所有元素的数据类型:

A = [int16(5000) int8(50)]
A =
   5000   50

B = [int8(50) int16(5000)]
B =
   50   127

        第一个操作返回由 16 位整数组成的向量。第二个操作返回由 8 位整数组成的向量。元素 int16(5000) 设置为 127,即 8 位有符号整数的最大值。

        相同规则也适用于垂直串联:

C = [int8(50); int16(5000)]
C =
    50
   127

        注:可以使用intmax和intmin函数查找任何 MATLAB 整数类型的最大值或最小值。对于浮点类型,请使用 realmax和 realmin。

合并有符号与无符号整数的示例

        现在使用有符号与无符号整数做相同的练习。同样,最左侧的元素决定着生成矩阵中的所有元素的数据类型:

A = [int8(-100) uint8(100)]
A =
   -100   100


B = [uint8(100) int8(-100)]
B =
   100   0

        元素 int8(-100) 设为零,因为它不再有符号。MATLAB 在将每个元素串联为一个合并数组之前计算每个元素。换句话说,在合并两个元素前,以下语句的计算结果为一个 8 位有符号整数(等于 50)和一个 8 位无符号整数(无符号的 -50 设为零)。按照该串联,第二个元素保留其零值,但采用无符号 int8 类型:

A = [int8(50), uint8(-50)]
A =
  50    0

合并整数与非整数数据

        合并 doublesingle 或 logical 类的整数,将为生成矩阵的所有元素提供最左侧整数的数据类型。例如,以下向量的所有元素设置为 int32

A = [true pi int32(1000000) single(17.32) uint8(250)]

空矩阵

        使用空矩阵元素构造矩阵,生成矩阵中会忽略空矩阵:

A = [5.36; 7.01; []; 9.44]

A =
    5.3600
    7.0100
    9.4400

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值