Scipy - 单重积分 (quad)
SciPy 中的单重积分
SciPy 的 单重积分 可以使用 quad() 函数来实现,这是一个强大的工具,用于一维数值积分,即定积分。它属于 scipy.integrate 模块,基于自适应求积方法。
该函数通过返回积分结果和误差估计来计算给定函数在指定范围内的积分。它特别适用于有限区间上的光滑函数,并能处理简单和复杂的被积函数。
quad() 函数在科学计算中广泛用于涉及连续函数积分的任务。从数学角度来看,quad() 函数计算如下形式的定积分 −
语法
以下是用于计算单重积分的 scipy.integrate.quad() 函数的语法 −
scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08, epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None, wopts=None, maxp1=50, limlst=50, complex_func=False)
参数
以下是 scipy.integrate.quad() 函数的参数 −
- func: 要积分的函数。它应接受单个参数并返回标量值。
- a: 积分下限(float)。
- b: 积分上限(float)。
- args(Optional): 传递给函数的额外参数元组。
- full_output(Optional): 如果设置为 1,则输出包括误差估计和附加信息。
- epsabs(Optional): 绝对误差容限。默认值为 1.49e-08。
- epsrel(Optional): 相对误差容限。默认值为 1.49e-08。
- limit(Optional): 最大细分次数。默认值为 50。
- points(Optional): 用于评估被积函数的点列表。
- weight(Optional): 指定权重函数类型的字符串('cauchy'、'cosine'、'chebyshev' 等)。
- wvar(Optional): 权重函数的变量。
- wopts(Optional): 权重函数的选项。
- maxp1(Optional): 权重函数的最大极点数。默认值为 50。
- limlst(Optional): 最大限点数。默认值为 50。
- complex_func(Optional): 如果设置为 True,则表示函数为复函数。
单重积分示例
以下示例计算函数 f(x) = sin(x) 在区间 [0, π] 上的单重积分,结果为 2 −
import numpy as np
from scipy import integrate
# 定义要积分的函数
def f(x):
return np.sin(x)
# 执行从 0 到 π 的积分
result, error = integrate.quad(f, 0, np.pi)
# 显示结果
print(f"积分结果: {result}")
以下是给定函数单重积分的输出 −
Integral Result: 2.0
处理无限限
在 scipy.integrate.quad() 函数中,可以通过将积分限传递为 np.inf 或 -np.inf 来处理不当积分的无限限。
示例
在此示例中,函数 e-x 从 0 积分到无穷大,收敛值为 1。quad() 函数能够处理此类不当积分,并会自动应用适当的技术来计算它们。
from scipy import integrate
import numpy as np
# 定义要积分的函数
def f(x):
return np.exp(-x)
# 执行具有无限上界的积分
result, error = integrate.quad(f, 0, np.inf)
print("积分结果:", result) # 输出: 1.0
print("估计误差:", error) # 输出: 结果中的估计误差
以下是 SciPy 中单重积分处理无限限的输出 −
Integral Result: 1.0000000000000002 Estimated Error: 5.842606701570796e-11
误差容限
In scipy.integrate.quad() 中,误差容限由两个可选参数控制,即 epsabs 和 epsrel。这些参数通过确保结果的精度来定义绝对误差容限和相对误差容限。
- epsabs: 绝对误差容限。当绝对误差估计低于此值时,算法停止。默认值为 1.49e-08。
- epsrel: 相对误差容限。当相对误差估计低于此值时,算法停止。默认值为 1.49e-08。
当绝对误差小于 epsabs 或相对误差小于 epsrel 时,积分停止。我们可以调整这些值来提高精度或加速计算。
示例
在这个示例中,我们将 epsabs 和 epsrel 都设置为 1e-6,这意味着积分将持续进行,直到误差估计小于这些容限 −
from scipy import integrate
import numpy as np
# 定义要积分的函数
def f(x):
return np.exp(-x)
# 执行具有无限上界的积分
result, error = integrate.quad(f, 0, np.inf)
print("Integral Result:", result) # 输出: 1.0
print("Estimated Error:", error) # 输出: 结果中的估计误差
以下是单次积分误差容限的输出 −
Integral Result: 2.0 Estimated Error: 2.220446049250313e-14
复数函数
In scipy.integrate.quad() 中,我们可以通过将 complex_func 参数设置为 True 来积分复值函数。这允许 quad() 函数处理返回复数的函数。积分分别对函数的实部和虚部进行。
示例
在这个示例中,我们将积分 eix 从 0 到 π,以演示如何使用 SciPy 的 quad() 函数处理复值积分。
from scipy import integrate
import numpy as np
# 定义复数函数
def complex_function(x):
return np.exp(1j * x) # e^(ix)
# 从 0 到 π 执行积分,并处理复数函数
result, error = integrate.quad(complex_function, 0, np.pi, limit=100, complex_func=True)
print("Integral Result:", result)
print("Estimated Error:", error)
以下是 SciPy 中复数函数单次积分的输出 −
Integral Result: (3.6775933888827275e-17+2j) Estimated Error: (2.2102239425853306e-14+2.220446049250313e-14j)
最后,我们可以得出结论,SciPy 的 quad() 函数高度多功能,能够高效处理平滑函数、不定积分、复值函数,甚至提供详细的诊断信息。它非常适合解析解难以或不可能获得的积分情况,从而成为数值计算中的基本工具。