我有两个列表数据数组x和y,我不知道生成数据的函数。我希望能够在沿x轴的任何点评估数据产生的线的积分。
不是将分段函数插入数据然后尝试集成我遇到的问题,而是我可以使用的东西只是通过评估数组来提供积分?
在搜索解决方案时,我看到了对iPython和Pandas的引用,但我无法找到有助于完成此任务的那些软件包的部分。
如果没有办法简单地集成数组,你能提供一些关于处理这项任务的最佳方法的建议吗?
答案 0 :(得分:9)
Scipy has some nice tools to perform numerical integration.
例如,您可以使用scipy.integrate.simps
执行simpson规则,您可以传递以下内容:
scipy.integrate.simps(y,x =无,dx = 1,轴= -1,偶数='平均')
参数:
y:array_like 要集成的数组。x:array_like,可选 如果给定,则采样y的点。
dx:int,可选 沿y轴的积分点的间距。仅在x为None时使用。默认值为1。
axis:int,可选 Axis沿着它整合。默认是最后一个轴。
甚至:{'avg','first','str'},可选
'avg':平均两个结果:1)使用第一个N-2区间 最后一个区间的梯形规则和2)在第一个区间使用最后的N-2区间和梯形规则。
'first':使用Simpson规则获得第一个N-2区间 最后一个区间的梯形规则。
'last':使用Simpson的规则获得最后一个N-2区间 第一个区间的梯形规则。
因此,您可以使用两个数组进行数值积分。
答案 1 :(得分:7)
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是你的两个数组。