2013-12-16 46 views
2

在Matlab中是否有任何方法來縮短這個函數或者是否有任何內置函數可以用來代替這個?下面的函數適用於我,但我想從我的腳本中排除它。如何實現分段數值積分?

function p = nintegrate(x, fx) 
    acc = 0; 
    for i = 1:length(x)-1 
      p(i) = acc; 
      delta_x = x(i+1) - x(i); 
      acc = acc + delta_x * fx(i); 
    end 
end 

回答

4

看看cumtrapz,它做了類似的事情。它使用了trapezoidal integration,這是一個稍微好一些的數值積分方法。在你的情況下的使用應該是(未經測試):

acc = cumtrapz(x, fx); 
+0

經過測試,它的工作原理!謝謝! – Dyin

+0

+1,'cumtrapz'是要走的路。 – thewaywewalk

+2

@Dyin如果您需要更高的準確性,您可以使用[FEX的此功能](http://www.mathworks.com/matlabcentral/fileexchange/19152-cumulative-cubic-integration)。 –