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=())[源代码][源代码]#
自适应积分向量值函数。
- 参数:
- f可调用
要积分的向量值函数 f(x)。
- a浮动
初始点。
- b浮动
最后一点。
- epsabsfloat, 可选
绝对容差。
- epsrelfloat, 可选
相对容差。
- 规范{‘max’, ‘2’}, 可选
用于误差估计的向量范数。
- cache_sizeint, 可选
用于记忆化的字节数。
- 限制浮点数或整数,可选
自适应算法中使用的子区间数量的上限。
- 工人int 或类似映射的可调用对象,可选
如果 workers 是一个整数,计算的一部分将并行分为这么多任务(使用
multiprocessing.pool.Pool
)。提供 -1 以使用进程可用的所有核心。或者,提供一个类似映射的可调用对象,例如multiprocessing.pool.Pool.map
用于并行评估种群。此评估按workers(func, iterable)
进行。- 点列表,可选
附加断点列表。
- 求积法{‘gk21’, ‘gk15’, ‘trapezoid’}, 可选
子区间上使用的求积规则。选项:’gk21’(Gauss-Kronrod 21点规则),’gk15’(Gauss-Kronrod 15点规则),’trapezoid’(复合梯形规则)。默认:有限区间为’gk21’,(半)无限区间为’gk15’。
- 完整输出bool, 可选
返回一个额外的
info
字典。- 参数tuple, 可选
要传递给函数的额外参数(如果有)。
Added in version 1.8.0.
- 返回:
- res{浮点数, 类数组}
结果的估计
- 错误浮动
给定范数下结果的误差估计
- 信息dict
仅在
full_output=True
时返回。信息字典。是一个具有以下属性的对象:- 成功布尔
集成是否达到目标精度。
- 状态整数
收敛指示器,成功(0),失败(1),以及由于舍入误差导致的失败(2)。
- neval整数
函数评估的次数。
- intervalsndarray, 形状 (num_intervals, 2)
细分区间的起点和终点。
- 积分ndarray, 形状 (num_intervals, …)
每个区间的积分。注意最多记录
cache_size
个值,数组中可能包含缺失项的 nan。- 错误ndarray, 形状 (num_intervals,)
每个区间的估计积分误差。
注释
该算法主要遵循 QUADPACK 的 DQAG* 算法的实现,实现了全局误差控制和自适应细分。
这里的算法与QUADPACK方法有一些不同:
该算法不是一次细分一个区间,而是一次细分具有最大误差的 N 个区间。这使得积分可以(部分)并行化。
首先不实现细分“下一个最大”区间的逻辑,我们依赖上述扩展来避免仅专注于“小”区间。
Wynn epsilon 表外推法未被使用(QUADPACK 在无限区间上使用它)。这是因为这里的算法旨在处理用户指定范数下的向量值函数,而将 epsilon 算法扩展到这种情况似乎并未得到广泛认同。对于最大范数,使用逐元素的 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()