MATLAB中?quad?函數是用Simpson's?rule方法,即利用給定區間內的二次曲線進行擬合法求積分的,屬於數值積分。
quad?的完整調用格式是?[Q,fcnt]?=?quad(funfcn,a,b,tol,trace,varargin)
第三個參數tol的缺省值是?1e-6(我用的是R2009a的版本)?,所以
quad(y,?0,?26.9)
相當於?
quad(y,?0,?26.9,1e-6)?
是以?1e-6?為求積誤差的。
另外,這個quad計算定積分使用的Simpson's?rule方法,在區間較大時,無法保證多項式擬合能夠無窮逼近,特別地區間較大時該方法對於highly?oscillatory(高度震動)的函數可能失效。
解決方法:把[0,26.9]分解成兩個小區間分別積分——在matlab中輸入:
quad(y,0,13)+quad(y,13,26.9)則會給出正確結果:0.9185
或者,妳積分時設置更小的積分精度或使用?quadl?函數。quadl?函數是用自適應Lobatto正交法求積分的,求解精度比qaud?高。
附圖是把積分壹直算到了28時的結果,圖中顯示的尖點都是計算錯誤的地方,可見區間越大,積分越不可信。