2014-09-03 112 views
0

我想通过“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为单位。这会有什么问题吗?或任何其他原因。

感谢

+0

'1e-16'不够接近零? – aschepler 2014-09-03 17:04:42

回答

3

MATLAB双精度浮点运算运行,如果你不告诉它不这样做,并10^-16是合理地预期的误差范围内。

如果你想进入细节(你真的应该),看看"What every computer scientist should know about floating point arithmetic"

更新

至于你的评论,你提到的边界幅度比你看到的错误更大的至少10个数量级,所以只要这个保持这样,你真的需要不担心小错误。

+0

谢谢..你是对的。但我正在研究非常敏感的数据。所以我想区分斜率值(如果斜率大于-1或大于10^-6或小于-1 <斜率<10^-6)。那么可以区分这些值吗?提前致谢。 – user8162 2014-09-03 17:13:07

+2

那么如果你需要解决这个问题的方法,你需要告诉我们为什么在你的情况下这样一个小错误是一个问题(也就是说,告诉我们你需要怎样处理这个斜率),而且很有可能你“会得到满意的答案。 – sobek 2014-09-03 17:15:40

+0

我编辑了我的答案。 – sobek 2014-09-03 17:22:52

相关问题