为什么 Matlab(使用默认 short )在 vector/matrix 输出中显示 0,而它应该显示 1?
Why does Matlab ( using default short ) show a 0 in vector/matrix output with a scientific notation when it should show a 1?
如果我们以一行向量为例
>>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
其中 returns 1.000000000000000e+00
但后来我使用
检查了第一个矩阵,其中输入为 0(默认格式短)
>>J(1)
它返回了 1。
所以该条目中的值是正确的,但它显示 0 和矩阵之外的一个因子 1.0e+137 *
我不明白发生了什么,为什么它显示 0?
当以 long 格式显示矩阵时,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,但由于 10 000 000 000 的因数,它没有显示。当您改为输入 k(1)
时,matlab 将选择适合该数字的格式:
>> k(1)
ans =
10
标准输出 "usually" 很好,其中所有数字的大小都相似。解决方法是使用 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 命令 Window 中的数值输出格式受用户控制,您可以从 MATLAB Command Window Preferences.
中更改
您观察到的是默认行为。
>> 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
您也可以将其更改为使用 "best of fixed or floating point format":
>> format short g
>> k
k =
10 100 1000 10000 1e+05 1e+06 1e+07 1e+08 1e+09 1e+10
有关其他可用选项,请参阅 format 命令。显式打印您的变量(使用 mat2str
命令等)以查看其完整精度是不必要的,大多数 MATLAB 用户也不会使用它。如果你真的想要完全精确,你可以使用 format long e
或 format long g
.
如果我们以一行向量为例
>>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
其中 returns 1.000000000000000e+00
但后来我使用
检查了第一个矩阵,其中输入为 0(默认格式短)>>J(1)
它返回了 1。
所以该条目中的值是正确的,但它显示 0 和矩阵之外的一个因子 1.0e+137 *
我不明白发生了什么,为什么它显示 0?
当以 long 格式显示矩阵时,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,但由于 10 000 000 000 的因数,它没有显示。当您改为输入 k(1)
时,matlab 将选择适合该数字的格式:
>> k(1)
ans =
10
标准输出 "usually" 很好,其中所有数字的大小都相似。解决方法是使用 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 命令 Window 中的数值输出格式受用户控制,您可以从 MATLAB Command Window Preferences.
中更改您观察到的是默认行为。
>> 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
您也可以将其更改为使用 "best of fixed or floating point format":
>> format short g
>> k
k =
10 100 1000 10000 1e+05 1e+06 1e+07 1e+08 1e+09 1e+10
有关其他可用选项,请参阅 format 命令。显式打印您的变量(使用 mat2str
命令等)以查看其完整精度是不必要的,大多数 MATLAB 用户也不会使用它。如果你真的想要完全精确,你可以使用 format long e
或 format long g
.