2013-09-21 37 views
2

似乎有一個Matlab quad函數用於評估積分使用積分公式。運行matlab四功能中的一個錯誤?

 
quad(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 10) 

回饋1.0000這是正確的答案,但提高上限說100,即

 
quad(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 100) 

還給3.4715e-8。這似乎也是quadl的情況。然而,integral命令似乎工作正常。這是一個已知的問題,還是我錯過了什麼?

+2

有趣。只增加下限到.01會給出1 –

回答

2

閱讀quaddocumentation,它看起來像使用quadgk代替它可能是一個好主意。在這種情況下,它給出了積分間隔(0,100)的正確結果:

>> quadgk(@(x) (2/sqrt(2*pi))*(x.^2).*exp(-x.^2/2), 0, 100) 

ans = 

    1.0000 
+0

謝謝,那可能是正確的選擇。雖然其他'quad'功能如此不穩定仍然很奇怪。 – passerby51

+0

同意。 「quadgk」始終是最佳選擇,或者何時選擇每個變體還不是很清楚 –

+1

@ passerby51,等:正交就像數值積分一樣 - 有許多方法,需要使用適合於功能和/或使用適當的設置。指數函數,對數函數和周期函數通常需要特別小心。例如,以double精度,這個函數對大於38.7的'x'求值爲零。如果公差選項設置得足夠小,例如「quad」可以實際使用。 '1E-12'。但'quadgk'(或更新版本的'integral')幾乎總是一個更好的首選。 – horchler

1

運行這兩個表達式與quadquadloctave導致1.有些東西可能是錯誤的機器。

+0

它可能與MATLAB版本,實現等有關。它可能已經在更新的版本中得到修復。 (我在Linux機器上的R2012a中找到了它。) – passerby51

+0

感謝您指向該在線引擎。 – passerby51