为什么Matlab(使用默认的缩写)在向量/矩阵输出中用科学的表示法显示0,而它应该显示1?

为什么Matlab(使用默认的缩写)在向量/矩阵输出中用科学的表示法显示0,而它应该显示1?,matlab,zero,notation,Matlab,Zero,Notation,以一条直线的向量为例 >>m = linspace(0,100,11) >>J = exp(m.^0.25) 我们得到 J = Columns 1 through 4 1.0000 5.9197 8.2875 10.3848 Columns 5 through 8 12.3650 14.2841 16.1700 18.0385 Columns 9 through 11 19.8996 21.75

以一条直线的向量为例

>>m = linspace(0,100,11)
>>J = exp(m.^0.25)
我们得到

J =

  Columns 1 through 4

    1.0000    5.9197    8.2875   10.3848

  Columns 5 through 8

   12.3650   14.2841   16.1700   18.0385

  Columns 9 through 11

   19.8996   21.7599   23.6243
我们在输出矩阵的第一项中得到正确的结果,即e^(0^0.25)=e^0=1

但是如果我们采取

>> J = exp(m.^2.5)
我们得到

J =

  1.0e+137 *

  Columns 1 through 4

    0.0000    2.1676       Inf       Inf

  Columns 5 through 8

       Inf       Inf       Inf       Inf

  Columns 9 through 11

       Inf       Inf       Inf
但是e^(0^2.5)=e^0=1

我很久没有使用matlab了,我不知道它是如何工作的,我首先认为它可能是一个舍入或截断,或者两者兼而有之,我查阅了操作内容和一些格式文档,我发现它确实使用longE格式在向量中显示了正确的结果:

>>format longE
它返回1.000000000000000 E+00

但随后我使用enry 0(默认格式缩写)检查了第一个矩阵

>>J(1)
它返回1

因此,该条目中的值是正确的,但它显示为0,并且是矩阵1.0e+137*之外的一个因子
我不明白发生了什么,为什么它显示为0?

当以长格式显示矩阵时,MATLAB选择一个适合所有条目的因子。为了便于解释,举一个例子:

k=10.^[1:10]

k =

   1.0e+10 *

    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001    0.0010    0.0100    0.1000    1.0000
第一个条目是10,但由于系数为10000,因此不会显示。当您输入
k(1)
matlab将选择适合该数字的格式:

>> k(1)

ans =

    10
标准输出“通常”是好的,所有数字的大小相似。解决方法是使用
mat2str

>> mat2str([pi,10.^[1:20]])

ans =

    '[3.14159265358979 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000 1000000000000 10000000000000 100000000000000 1e+15 1e+16 1e+17 1e+18 1e+19 1e+20]'

它最多显示15位数字,这通常就足够了,但需要17位数字才能显示完全准确的双精度

当以长格式显示矩阵时,MATLAB选择适合所有条目的系数。为了便于解释,举一个例子:

k=10.^[1:10]

k =

   1.0e+10 *

    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001    0.0010    0.0100    0.1000    1.0000
第一个条目是10,但由于系数为10000,因此不会显示。当您输入
k(1)
matlab将选择适合该数字的格式:

>> k(1)

ans =

    10
标准输出“通常”是好的,所有数字的大小相似。解决方法是使用
mat2str

>> mat2str([pi,10.^[1:20]])

ans =

    '[3.14159265358979 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000 1000000000000 10000000000000 100000000000000 1e+15 1e+16 1e+17 1e+18 1e+19 1e+20]'

它最多显示15位数字,这通常就足够了,但需要17位数字才能显示完全准确的双精度

MATLAB命令窗口中的数字输出格式由用户控制,您可以从更改

您正在观察的是默认行为

>> k=10.^[1:10];
>> k
k =
  1.0e+10 *
    0.0000  0.0000  0.0000  0.0000  0.0000  0.0001  0.0010  0.0100  0.1000  1.0000
但是,您可以将输出格式更改为使用浮点格式:

>> format short e
>> k
k =
1.0000e+01   1.0000e+02   1.0000e+03   1.0000e+04   1.0000e+05   1.0000e+06   
1.0000e+07   1.0000e+08   1.0000e+09   1.0000e+10
>> format short g
>> k
k =
10     100     1000    10000    1e+05    1e+06    1e+07    1e+08    1e+09    1e+10
您还可以将其更改为使用“最佳固定或浮点格式”:


请参见其他可用选项上的命令。显式打印变量(使用
mat2str
命令等)以查看其全部精度不是必需的,大多数MATLAB用户也不使用它。如果您真的需要全精度,可以使用
格式长e
格式长g

MATLAB命令窗口中的数值输出格式由用户控制,您可以从更改

您正在观察的是默认行为

>> k=10.^[1:10];
>> k
k =
  1.0e+10 *
    0.0000  0.0000  0.0000  0.0000  0.0000  0.0001  0.0010  0.0100  0.1000  1.0000
但是,您可以将输出格式更改为使用浮点格式:

>> format short e
>> k
k =
1.0000e+01   1.0000e+02   1.0000e+03   1.0000e+04   1.0000e+05   1.0000e+06   
1.0000e+07   1.0000e+08   1.0000e+09   1.0000e+10
>> format short g
>> k
k =
10     100     1000    10000    1e+05    1e+06    1e+07    1e+08    1e+09    1e+10
您还可以将其更改为使用“最佳固定或浮点格式”:


请参见其他可用选项上的命令。显式打印变量(使用
mat2str
命令等)以查看其全部精度不是必需的,大多数MATLAB用户也不使用它。如果您真的想要完全精确,您可以使用
格式长e
格式长g

可爱的奖金解决方案!可爱的奖金解决方案!