我想通过“polyfit”命令在Matlab中获得我的数据的斜率。为什么我没有获得水平线的斜率= 0?
x = 1:38; y = -60*ones(1,38);
p_fit = polyfit(x,y,1);
slope = p_fit(1);
按我的知识,因为y
具有恒定的值,我期待斜率为零。但我得到的值为10^-16
。所以请帮助我纠正自己。
y
的值以dB为单位。这会有什么问题吗?或任何其他原因。
感谢
我想通过“polyfit”命令在Matlab中获得我的数据的斜率。为什么我没有获得水平线的斜率= 0?
x = 1:38; y = -60*ones(1,38);
p_fit = polyfit(x,y,1);
slope = p_fit(1);
按我的知识,因为y
具有恒定的值,我期待斜率为零。但我得到的值为10^-16
。所以请帮助我纠正自己。
y
的值以dB为单位。这会有什么问题吗?或任何其他原因。
感谢
MATLAB双精度浮点运算运行,如果你不告诉它不这样做,并10^-16
是合理地预期的误差范围内。
如果你想进入细节(你真的应该),看看"What every computer scientist should know about floating point arithmetic"。
更新:
至于你的评论,你提到的边界幅度比你看到的错误更大的至少10个数量级,所以只要这个保持这样,你真的需要不担心小错误。
'1e-16'不够接近零? – aschepler 2014-09-03 17:04:42