2013-07-11 57 views
7

我有兩個製表數據數組,x和y,我不知道生成數據的函數。我希望能夠評估沿x軸任意點處數據產生的線的積分。如何在Python中集成兩個一維數據數組?

與其向數據插入分段函數,然後嘗試集成那個,我遇到了麻煩,有沒有什麼我可以使用的,只需通過評估數組來提供積分?

在尋找解決方案時,我看到了對iPython和Pandas的引用,但是我一直無法找到那些有助於完成此任務的包的部分。

如果沒有簡單集成數組的方法,您能否提供一些關於處理此任務的最佳方法的建議?

回答

9

Scipy has some nice tools to perform numerical integration.

例如,可以使用scipy.integrate.simps執行辛普森規則,並且可以通過它執行以下操作:

scipy.integrate.simps(Y,X =無,DX = 1 ,axis = -1,even ='avg')

參數:
y:array_like 要整合的數組。

x:array_like,可選 如果給出,y被採樣的點。

dx:int,可選 沿y軸的積分點間距。僅當x是None時才使用。默認值爲1.

axis:int,可選 要集成的軸。默認是最後一個軸。

甚至:{ '平均', '第一', 'STR'},任選

'平均':平均兩個結果:1)使用第一N-2的間隔 梯形規則上的最後一個間隔和2)在第一個間隔使用梯形法則的最後N-2間隔。

'first':使用辛普森規則的第一個N-2間隔 最後一個間隔的梯形規則。

'last':在第一個區間使用梯形法則,對最後N-2個區間使用辛普森規則。

所以你可以使用你的兩個數組來做數值積分。

5

Scipy有一個integration功能,可以幫助你。

如果您想使用cumulative sum of trapezoids進行集成,這對於一系列的點可能是最好的。

你可以這樣做:

>>> from scipy import integrate 
>>> x = np.linspace(-2, 2, num=20) 
>>> y = x 
>>> y_int = integrate.cumtrapz(y, x, initial=0) 
>>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-') 
>>> plt.show() 

這也將繪製數據,並以圖形方式顯示給你。這是整合呼叫integrate.cumtrapz(y, x, initial=0)其中x和y是你的兩個數組。

相關問題