2013-07-11 27 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是你的两个数组。

相关问题