章节
Scipy中的integrate
模块提供了很多数值积分方法,例如,一重积分、二重积分、三重积分、多重积分、高斯积分等等。
下面介绍几种常用的积分函数。
一重积分
SciPy积分模块中,quad函数是一个重要函数,用于求一重积分。例如,在给定的a到b范围内,对函数f(x)求一重积分。
$$\int_a^bf(x)dx$$
quad的一般形式是scipy.integrate.quad(f, a, b)
,其中f
是求积分的函数名称,a
和b
分别是下限和上限。
示例
让我们看一个高斯函数的例子,求0到5范围内的积分。
首先需要定义函数$→f(x)=e^{-x2}$,这可以使用lambda表达式来表示,然后使用quad方法对其求一重积分。
import scipy.integrate
from numpy import exp
f = lambda x:exp(-x**2)
i = scipy.integrate.quad(f, 0, 5)
print(i)
输出
(0.8862269254513955, 2.3183115159980698e-14)
quad函数返回两个值,第一个值是积分的值,第二个值是对积分值的绝对误差估计。
示例
如果积分的函数f带系数参数,即:
$$I(a,b) = \int_0^1(ax^2+b)dx$$
那么a和b可以通过args传入quad函数:
from scipy.integrate import quad
def f(x, a, b):
return a * (x ** 2) + b
ret = quad(f, 0, 1, args=(3, 1))
print (ret)
输出
(2.0, 2.220446049250313e-14)
重积分
要计算二重积分、三重积分、多重积分,可使用dblquad、tplquad和nquad函数。
二重积分
dblquad的一般形式是scipy.integrate.dblquad(func, a, b, gfun, hfun)
,其中,func
是待积分函数的名称,a
、b
是x变量的上下限,gfun
、hfun
为定义y变量上下限的函数名称。
示例
求二重积分:
$$\int_0^{\frac{1}{2}}dy\int_0^{\sqrt[]{1-4y^2}}19xydx$$
我们使用lambda表达式定义函数f
、g
和h
。注意,在很多情况下g
和h
可能是常数,但是即使g
和h
是常数,也必须被定义为函数。
import scipy.integrate
from numpy import exp
from math import sqrt
f = lambda x, y : 19*x*y
g = lambda x : 0
h = lambda y : sqrt(1-4*y**2)
i = scipy.integrate.dblquad(f, 0, 0.5, g, h)
print (i)
输出
(0.59375, 2.029716563995638e-14)
除了上面介绍的方法外,Scipy的integrate
模块中还有许多其他积分方法,例如nquad,用于求多重积分。不过,大部分场景quad和dblquad就够用了。