我正在尝试从labview移植到python。
在labview中有一个函数“Integral x(t)VI”,它将一组样本作为输入,执行样本的离散积分,并根据Simpsons规则返回值列表(曲线下面积)
我试图在scipy中找到一个等效函数,例如scipy.integrate.simps,但这些函数在一组样本中返回求和积分,作为一个浮点数。
如何获得积分值列表而不是积分值之和?
我只是错误地看待问题吗?
答案 0 :(得分:6)
我认为您可能会稍微错误地使用scipy.integrate.simps。 scipy.integrate.simps
返回的区域是y
下的总面积(传递的第一个参数)。第二个参数是可选的,是x轴的样本值(每个y值的实际x值)。即:
>>> import numpy as np
>>> import scipy
>>> a=np.array([1,1,1,1,1])
>>> scipy.integrate.simps(a)
4.0
>>> scipy.integrate.simps(a,np.array([0,10,20,30,40]))
40.0
我认为您希望在不同限制之间返回相同曲线下的区域?为此,您可以传递所需曲线的一部分,如下所示:
>>> a=np.array([0,1,1,1,1,10,10,10,10,0])
>>> scipy.integrate.simps(a)
44.916666666666671
>>> scipy.integrate.simps(a[:5])
3.6666666666666665
>>> scipy.integrate.simps(a[5:])
36.666666666666664
答案 1 :(得分:0)
只有您不需要使用Simpson规则或其他方法,SciPy中只有一种方法可以执行累积整合scipy.integrate.cumtrapz()
,它可以满足您的需求。为此,您可以按照建议始终自行编写循环。