matlab - 为什么Matlab(使用默认short)在向量/矩阵输出中显示0,而科学计数法应该显示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
返回 1.000000000000000e+00
但随后我使用 enry 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
标准输出“通常”很好,其中所有数字都具有相似的大小。一种解决方法是使用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 位数字才能完全准确地显示双精度(更多信息)
推荐阅读
- c - 如何在 Git bash 中运行 C 程序?
- javascript - yup.validate 仅返回错误数组中的单个字段
- activemq - 有没有办法在 Apache ActiveMQ 中设置溢出策略?
- mysql - EER图有什么问题吗?
- puppeteer - 将 X 和 Y 偏移设置为 puppeteer 页面
- python - 将数据框的一行合并到另一个数据框 - 熊猫
- vis.js - 使用 visjs-network 时重叠边缘
- flutter - 在键盘和文本字段之间放置额外的空间
- python - 即使响应状态为 200,Flask 响应也会引发 FileNotFoundError
- machine-learning - 更改输出层 (Keras) 的形状时,Keras 模型无法正确训练