
- SciPy 教程
- SciPy - 首页
- SciPy - 简介
- SciPy - 环境搭建
- SciPy - 基本功能
- SciPy - 集群
- SciPy - 常量
- SciPy - FFTpack
- SciPy - 积分
- SciPy - 插值
- SciPy - 输入和输出
- SciPy - 线性代数 (Linalg)
- SciPy - 图像处理 (Ndimage)
- SciPy - 优化
- SciPy - 统计
- SciPy - 压缩稀疏图 (CSGraph)
- SciPy - 空间
- SciPy - 正交距离回归 (ODR)
- SciPy - 特殊函数包
- SciPy 有用资源
- SciPy - 参考
- SciPy - 快速指南
- SciPy - 有用资源
- SciPy - 讨论
SciPy - 积分
当一个函数无法进行解析积分,或者解析积分非常困难时,通常会转向数值积分方法。SciPy 提供了许多执行数值积分的例程。大多数例程都位于同一个 **scipy.integrate** 库中。下表列出了一些常用的函数。
序号 | 函数及描述 |
---|---|
1 | quad 单重积分 |
2 | dblquad 二重积分 |
3 | tplquad 三重积分 |
4 | nquad n 重积分 |
5 | fixed_quad 高斯求积,n 阶 |
6 | quadrature 达到容差的高斯求积 |
7 | romberg 龙贝格积分 |
8 | trapz 梯形法则 |
9 | cumtrapz 梯形法则累积计算积分 |
10 | simps 辛普森法则 |
11 | romb 龙贝格积分 |
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²*,这可以使用 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** 函数中。这些函数分别集成四个或六个参数。所有内积分的极限都需要定义为函数。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
二重积分
**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 还有一些其他的积分例程,包括 nquad(执行 n 重积分),以及实现各种积分算法的其他例程。但是,quad 和 dblquad 将满足我们大多数数值积分的需求。