SciPy - 集成


当函数无法进行解析积分或很难进行解析积分时,通常会转向数值积分方法。SciPy 有许多用于执行数值积分的例程。它们中的大多数都可以在同一个scipy.integrate库中找到。下表列出了一些常用的函数。

先生号 功能说明
1

四边形

单一集成

2

双四元组

双整合

3

tpl四边形

三重整合

4

四方

n重多重积分

5

固定四边形

高斯求积,n 阶

6

正交

高斯求积至公差

7

龙贝格

龙伯格整合

8

特拉兹

梯形法则

9

库姆特拉普兹

累积计算积分的梯形规则

10

辛普斯

辛普森法则

11

抢劫

龙伯格整合

12

多整型

解析多项式积分 (NumPy)

13

聚一维

polyint 的辅助函数 (NumPy)

单积分

Quad 函数是 SciPy 集成函数的主力。数值积分有时称为求积,因此得名。它通常是在从 a 到 b 的给定固定范围内执行函数f(x)的单积分的默认选择。

$$\int_{a}^{b} f(x)dx$$

quad 的一般形式是scipy.integrate.quad(f, a, b),其中 'f' 是要积分的函数的名称。而“a”和“b”分别是下限和上限。让我们看一个高斯函数的例子,它在 0 和 1 的范围内积分。

我们首先需要定义函数 → $f(x) = e^{-x^2}$ ,这可以使用 lambda 表达式来完成,然后对该函数调用四元组方法。

import scipy.integrate
from numpy import exp
f= lambda x:exp(-x**2)
i = scipy.integrate.quad(f, 0, 1)
print i

上述程序将生成以下输出。

(0.7468241328124271, 8.291413475940725e-15)

Quad 函数返回两个值,其中第一个数字是积分值,第二个值是积分值绝对误差的估计值。

注意- 由于quad需要函数作为第一个参数,所以我们不能直接传递exp作为参数。Quad 函数接受正无穷大和负无穷大作为限制。Quad 函数可以集成单个变量的标准预定义 NumPy 函数,例如 exp、sin 和 cos。

多重积分

二重和三重积分的机制已包含在函数dblquad、tplquadnquad中。这些函数分别集成四个或六个参数。所有内积分的极限都需要定义为函数。

二重积分

dblquad的一般形式是 scipy.integrate.dblquad(func, a, b, gfun, hfun)。其中,func 是要积分的函数名称,'a' 和 'b' 分别是 x 变量的下限和上限,而 gfun 和 hfun 是定义下限和上限的函数名称y 变量的。

作为示例,让我们执行二重积分方法。

$$\int_{0}^{1/2} dy \int_{0}^{\sqrt{1-4y^2}} 16xy \:dx$$

我们使用 lambda 表达式定义函数 f、g 和 h。请注意,即使 g 和 h 是常数(在许多情况下可能是常数),它们也必须定义为函数,正如我们在这里为下限所做的那样。

import scipy.integrate
from numpy import exp
from math import sqrt
f = lambda x, y : 16*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.5, 1.7092350012594845e-14)

除了上述例程之外,scipy.integrate 还有许多其他积分例程,包括执行 n 重多重积分的 nquad,以及实现各种积分算法的其他例程。然而,quad 和 dblquad 将满足我们对数值积分的大部分需求。