当一个函数不能被分析积分,或者很难分析积分时,通常会转向数值积分方法。SciPy 有许多用于执行数值积分的程序。它们中的大多数都在同一个scipy.integrate
库中。下表列出了一些常用函数。
编号 | 示例 | 描述 |
---|---|---|
1 | quad |
单积分 |
2 | dblquad |
二重积分 |
3 | tplquad |
三重积分 |
4 | nquad |
n 倍多重积分 |
5 | fixed_quad |
高斯积分,阶数n |
6 | quadrature |
高斯正交到容差 |
7 | romberg |
Romberg 积分 |
8 | trapz |
梯形规则 |
9 | cumtrapz |
梯形法则累计计算积分 |
10 | simps |
辛普森的规则 |
11 | romb |
Romberg 积分 |
12 | polyint |
分析多项式积分(NumPy) |
13 | poly1d |
辅助函数 polyint(NumPy) |
单积分
Quad 函数是 SciPy 积分函数的主力。数值积分有时称为正交积分,因此称为名称。它通常是在a
到b
给定的固定范围内执行函数f(x)
的单个积分的默认选择。
quad
的一般形式是scipy.integrate.quad(f,a,b)
,其中'f'
是要积分的函数的名称。而'a'
和'b'
分别是下限和上限。下面来看看一个高斯函数的例子,它的积分范围是0
和1
。
首先需要定义这个函数:
这可以使用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
需要函数作为第一个参数,因此不能直接将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
的下限和上限的函数名称。
看看一个执行双重积分方法的示例。
使用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
将满足对数值积分的大部分需求。