2014-09-03 107 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

相關問題