【发布时间】:2020-10-02 21:03:23
【问题描述】:
我正在研究一个化学动力学程序,该程序需要将函数从 0 积分到无穷大。有问题的变量是从数据库中获取的数组。变量的简化版本是 x、F(x) 和 G(x),其中 F(x) 和 G(x) 是从所述数据库中插值的。
所以我有我的三个数组可以传入被积函数(我不包括用于读取和插值 F 和 G 的文件解析函数)-
def integrand(x,Y,Z):
return x*Y*Z
#integrate (x*F*G)dx 0 to infinity
integrated=scipy.integrate.quad(integrand,0,np.inf,args=(F,G))
我知道这会返回错误,因为 F 和 G 是数组。对于具有 3 个变量但相对于单个参数(在本例中为 dx)进行积分的被积函数,是否有更好的积分方法? 注意:在某些情况下,G 收敛速度足够快,可以估计为浮点数。
尝试的解决方案
使用 np.trapz 与 x 数组的任意大上限来代替无穷大
x_n=np.linspace(0,10000,500)
#now, F(x_n) and G(x_n) from np.interp
vars=integrand(x_n,F,G)
answer=np.trapz(vars,x_n,dx=.01)
这种方法可能不适用于其他数据集,也不完全准确。
【问题讨论】:
标签: arrays numpy scipy integration interpolation