SciPy - 积分
当一个函数无法解析积分,或者解析积分非常困难时,通常会求助于数值积分方法。SciPy 有许多用于执行数值积分的例程。它们中的大多数都可以在同一个 scipy.integrate 库中找到。下表列出了一些常用函数。
Sr No. | 函数 &描述 |
---|---|
1 | quad 单次积分 |
2 | dblquad 两次积分 |
3 | tplquad 三次积分 |
4 | nquad n倍多次积分 |
5 | fixed_quad 高斯求积,n 阶 |
6 | quadrature 高斯求积至公差 |
7 | romberg Romberg 积分 |
8 | trapz 梯形法则 |
9 | cumtrapz 梯形法则用于累积计算积分 |
10 | simps Simpson 法则 |
11 | romb Romberg积分 |
12 | polyint 解析多项式积分 (NumPy) |
13 | poly1d polyint 的辅助函数 (NumPy) |
单积分
Quad 函数是 SciPy 积分函数中的主力。数值积分有时也称为求积,因此得名。它通常是对函数 f(x) 在给定的从 a 到 b 的固定范围内进行单次积分的默认选择。
$$\int_{a}^{b} f(x)dx$$
quad 的一般形式是 scipy.integrate.quad(f, a, b),其中"f"是要积分的函数的名称。而"a"和"b"分别是下限和上限。让我们看一个在 0 和 1 范围内积分的高斯函数的例子。
我们首先需要定义函数 → $f(x) = e^{-x^2}$ ,这可以使用 lambda 表达式来完成,然后在该函数上调用 quad 方法。
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 可以满足我们对数值积分的大部分需求。