quad_vec#
- scipy.integrate.quad_vec(f, a, b, epsabs=1e-200, epsrel=1e-08, norm='2', cache_size=100000000.0, limit=10000, workers=1, points=None, quadrature=None, full_output=False, *, args=())[source]#
自适应积分矢量值函数。
- 参数:
- fcallable
矢量值函数 f(x) 进行积。
- afloat
初始点。
- b浮点数
终点。
- epsabs浮点数,可选
绝对容差。
- epsrel浮点数,可选
相对容差。
- norm{‘max’,‘2’},可选
用于误差估计的向量范数。
- cache_size整数,可选
用于记忆化的字节数。
- limit浮点数或整数,可选
自适应算法中使用的子区间数的上限。
- workers整数或类 map 可调用,可选
如果workers 是一个整数,那么一部分计算将以并行方式完成,并细分为这许多任务(使用
multiprocessing.pool.Pool
)。提供-1 以使用进程可用的所有内核。或者,提供类 map 的可调用,例如multiprocessing.pool.Pool.map
以并行评估总体。该评估将以workers(func, iterable)
执行。- points列表,可选
其他断点列表。
- quadrature{‘gk21’,‘gk15’,‘trapezoid’},可选
在子区间上使用的求积规则。选项:‘gk21’(Gauss-Kronrod 21 点规则),‘gk15’(Gauss-Kronrod 15 点规则),‘trapezoid’(复合梯形规则)。默认值:对于有限区间为 ‘gk21’,对于(半)无限区间为 ‘gk15’
- full_output布尔值,可选
返回一个附加的
info
词典。- args元组,可选
如果有的,则将向功能传递额外的参数。
在版本 1.8.0 中添加。
- 返回:
- res{浮点数,类数组}
结果估计值
- err浮点数
在给定范数下的结果误差估计值
- info字典
仅当
full_output=True
时返回。信息词典。一个具有以下属性的对象- success布尔值
积分是否达到目标精度。
- status整数
收敛、成功 (0)、失败 (1) 和由于舍入误差 (2) 而失败的指示器。
- neval整数
函数计算次数。
- intervalsndarray,形状 (num_intervals, 2)
划分区间的起点和终点。
- 积分ndarray,形状(区间数,…)
每个区间的积分。请注意,最多记录
cache_size
值,数组可能为缺失项包含nan。- 错误ndarray,形状(区间数,)
估计每个区间的积分误差。
注释
该算法主要遵循 QUADPACK 的 DQAG* 算法的实现,实现全局误差控制和自适应细分。
此处算法与 QUADPACK 方法有一些差异
算法不是一次细分一个区间,而是同时细分具有最大误差的 N 个区间。这可以(部分)实现积分并行化。
然后不实现首先细分“下一个最大”区间的逻辑,我们依靠上述扩展来避免仅集中于“小”区间。
未不使用 Wynn epsilon 表外推法(QUADPACK 在无限区间中使用它)。这是因为此处算法应该在矢量值函数上工作,以用户指定的范数,并且 epsilon 算法对这种情况的扩展似乎没有广泛达成一致。对于 max 范数,逐元素使用 Wynn epsilon 可能是可能的,但我们希望 epsilon 外推法主要在特殊情况下有用,因此此处不会这样做。
参考
[1] R. Piessens, E. de Doncker, QUADPACK (1983)。
示例
我们可以计算矢量值函数的积分
>>> from scipy.integrate import quad_vec >>> import numpy as np >>> import matplotlib.pyplot as plt >>> alpha = np.linspace(0.0, 2.0, num=30) >>> f = lambda x: x**alpha >>> x0, x1 = 0, 2 >>> y, err = quad_vec(f, x0, x1) >>> plt.plot(alpha, y) >>> plt.xlabel(r"$\alpha$") >>> plt.ylabel(r"$\int_{0}^{2} x^\alpha dx$") >>> plt.show()