我正在尝试从labview移植到python。
在labview 中有一个函数“Integral x(t) VI”,它将一组样本作为输入,执行样本的离散积分并根据辛普森规则返回一个值列表(曲线下的区域)。
我试图在 scipy 中找到一个等效的函数,例如 scipy.integrate.simps,但是这些函数将整个样本集的总积分作为浮点数返回。
如何获得积分值列表而不是积分值的总和?
我只是以错误的方式看待问题吗?
我正在尝试从labview移植到python。
在labview 中有一个函数“Integral x(t) VI”,它将一组样本作为输入,执行样本的离散积分并根据辛普森规则返回一个值列表(曲线下的区域)。
我试图在 scipy 中找到一个等效的函数,例如 scipy.integrate.simps,但是这些函数将整个样本集的总积分作为浮点数返回。
如何获得积分值列表而不是积分值的总和?
我只是以错误的方式看待问题吗?
我认为您可能稍微不正确地使用scipy.integrate.simps。返回的 面积是(传递的第一个参数)scipy.integrate.simps
下的总面积。y
第二个参数是可选的,是 x 轴的样本值(每个 y 值的实际 x 值)。IE:
>>> 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
SciPy 中只有一种方法可以进行累积积分,scipy.integrate.cumtrapz()
只要您不需要特别使用辛普森规则或其他方法,它就可以满足您的需求。为此,您可以按照建议始终自己编写循环。