为什么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
可爱的奖金解决方案!可爱的奖金解决方案!