scipy.integrate.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浮动

最后一点。

epsabs浮动,可选

绝对容忍。

epsrel浮动,可选

相对公差。

norm{‘max’,‘2’},可选

用于误差估计的向量范数。

cache_size整型,可选

用于备忘的字节数。

workers整型或映射型可调用,可选

如果 workers 是整数,则部分计算以并行方式细分到这些任务(使用 multiprocessing.pool.Pool )。供应 -1 使用该进程可用的所有核心。或者,提供类似于映射的可调用对象,例如 multiprocessing.pool.Pool.map 用于并行评估人口。此评估按如下方式进行 workers(func, iterable)

points列表,可选

附加断点列表。

quadrature{‘gk21’,‘gk15’,‘梯形’},可选

用于子区间的求积规则。选项:‘gk21’(高斯-克朗罗德21点规则),‘gk15’(高斯-克朗罗德15点规则),‘梯形’(复合梯形规则)。默认值:‘gk21’表示有限间隔,‘gk15’表示(半)无限间隔

full_output布尔值,可选

退回额外的 info 字典。

args元组,可选

要传递给函数的额外参数(如果有)。

1.8.0 新版功能.

退货
res{浮动,类似数组}

对结果的估计

err浮动

给定范数下结果的误差估计

infoDICT

仅在以下情况下返回 full_output=True 。信息字典。是具有以下属性的对象:

成功布尔尔

集成是否达到目标精度。

状态集成

收敛、成功(0)、失败(1)和由于舍入误差而失败(2)的指示器。

Neval集成

函数求值次数。

间隔时间ndarray,形状(Num_Interval,2)

细分间隔的起点和终点。

积分ndarray,Shape(Num_Interval,.)

每个区间的积分。请注意,至多 cache_size 值被记录,数组可能包含 nan 寻找遗失的物品。

错误ndarray,形状(数字间隔,)

每个间隔的估计积分误差。

注意事项

该算法主要遵循Quadpack的DQAG*算法的实现,实现全局差错控制和自适应细分。

此处的算法与故障诊断灯方法有一些不同:

该算法不是一次细分一个区间,而是一次细分具有最大误差的N个区间。这将启用集成的(部分)并行化。

这样就不会实现先细分“下一个最大”区间的逻辑,我们依靠上面的扩展来避免只关注“小”区间。

不使用Wynn epsilon表外推(故障诊断灯使用无限间隔)。这是因为这里的算法被认为是以用户指定的范数对向量值函数工作的,而epsilon算法在这种情况下的扩展似乎并没有得到广泛的同意。对于极大范数,可以使用基本的Wynnε,但我们在这里这样做并不是希望epsilon外推主要在特殊情况下有用。

参考文献

[1] 皮森斯,E.de Doncker,Quadpack(1983)。

示例

我们可以计算向量值函数的积分:

>>> from scipy.integrate import quad_vec
>>> 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()
../../_images/scipy-integrate-quad_vec-1.png