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、tplquad和nquad中。这些函数分别集成四个或六个参数。所有内积分的极限都需要定义为函数。
二重积分
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 将满足我们对数值积分的大部分需求。