Python 使用scipy.integrate.simps或类似工具集成三个向量

Python 使用scipy.integrate.simps或类似工具集成三个向量,python,scipy,calculus,Python,Scipy,Calculus,我想近似一个我没有实际解析表达式的函数。我知道我想计算这个积分:积分a*b*cdx。假设我得到的a,b和c是从观测数据中得到的。我如何计算这个积分?scipy能做到吗?scipy.integrate.simps是正确的方法吗 import numpy as np from scipy.integrate import simps a = np.random.random(10) b = np.random.uniform(0, 10, 10) c = np.random.normal(2, .

我想近似一个我没有实际解析表达式的函数。我知道我想计算这个积分:积分a*b*cdx。假设我得到的a,b和c是从观测数据中得到的。我如何计算这个积分?scipy能做到吗?scipy.integrate.simps是正确的方法吗

import numpy as np
from scipy.integrate import simps

a = np.random.random(10)
b = np.random.uniform(0, 10, 10)
c = np.random.normal(2, .8, 10)
x = np.linspace(0, 1, 10)
dx = x[1] - x[0]

print 'Is the integral of a * b * dx is ', simps(a * b, c, dx), ', ', simps(b * a, c, dx), ',', simps(a, b * c, dx), ', ', simps(a, c * b, dx), ', or something else?'

在您的设置中,正确的集成方式是

simps(a*b*c, x)   # function values, argument values

两者产生相同的结果。是的,simps是集成采样数据的一个非常好的选择。大多数情况下,它比trapz更精确


如果数据来自一个平滑函数,即使你不知道这个函数,并且你可以通过某种方式使点数比2的幂增加1,那么就更好了。我比较了trapz、simps和quad-in.

为什么不直接求和或使用梯形规则?无论如何,你不会得到比这更精确的结果。我想通过使用它的API来利用scipy的后端效率
simps(a*b*c, dx=dx)   # function values, uniform spacing between x-values