lnm*_*rer 17 python numpy scipy
SciPy有三种方法可以对样本(trapz,simps和romb)进行一维积分,一种方法可以在函数上进行二维积分(dblquad),但它似乎没有方法在样本上进行二维积分 - - 甚至是矩形网格上的那些.
我看到的最接近的是scipy.interpolate.RectBivariateSpline.integral - 你可以从矩形网格上的数据创建一个RectBivariateSpline然后集成它.然而,这并不是非常快.
我想要比矩形方法更精确的东西(即只是总结一下).我可以说,使用2D Simpson规则,通过制作具有正确权重的数组,将其乘以我想要整合的数组,然后总结结果.
但是,如果已经有更好的东西,我不想重新发明轮子.在那儿?
pv.*_*pv. 22
使用1D规则两次.
>>> from scipy.integrate import simps
>>> import numpy as np
>>> x = np.linspace(0, 1, 20)
>>> y = np.linspace(0, 1, 30)
>>> z = np.cos(x[:,None])**4 + np.sin(y)**2
>>> simps(simps(z, y), x)
0.85134099743259539
>>> import sympy
>>> xx, yy = sympy.symbols('x y')
>>> sympy.integrate(sympy.cos(xx)**4 + sympy.sin(yy)**2, (xx, 0, 1), (yy, 0, 1)).evalf()
0.851349922021627
Run Code Online (Sandbox Code Playgroud)