本文简要介绍 python 语言中 scipy.integrate.nquad
的用法。
用法:
scipy.integrate.nquad(func, ranges, args=None, opts=None, full_output=False)#
集成多个变量。
包装
quad
以启用对多个变量的集成。各种选项允许改进不连续函数的积分,以及加权积分的使用,以及对积分过程的一般更精细的控制。- func: {callable, scipy.LowLevelCallable}
要集成的函数。具有
x0, ... xn
、t0, ... tm
的参数,其中积分是在x0, ... xn
上进行的,它必须是浮点数。其中t0, ... tm
是在 args 中传递的额外参数。函数签名应该是func(x0, x1, ..., xn, t0, t1, ..., tm)
。整合有序进行。也就是说,x0
上的积分是最内层的积分,而xn
是最外层的积分。如果用户希望提高集成性能,那么f可能是一个scipy.LowLevelCallable带有其中一个签名:
double func(int n, double *xx) double func(int n, double *xx, void *user_data)
其中
n
是变量和参数的数量。xx
数组包含坐标和额外参数。user_data
是scipy.LowLevelCallable
中包含的数据。- ranges: 可迭代对象
范围的每个元素可以是 2 个数字的序列,也可以是返回此类序列的可调用对象。
ranges[0]
对应于 x0 上的积分,依此类推。如果范围的元素是可调用的,那么将使用所有可用的集成参数以及任何参数参数来调用它。例如,如果func = f(x0, x1, x2, t0, t1)
,则ranges[0]
可以定义为(a, b)
或(a, b) = range0(x1, x2, t0, t1)
。- args: 可迭代对象,可选
func
、ranges
和opts
所需的附加参数t0, ... tn
。- opts: 可迭代对象或字典,可选
要传递给
quad
的选项。可能是空的、一个字典、或者一系列字典或返回字典的函数。如果为空,则使用 scipy.integrate.quad 中的默认选项。如果是字典,则相同的选项用于所有级别的集成。如果是序列,则序列的每个元素对应于特定的积分。例如,opts[0]
对应于x0
上的积分,依此类推。如果是可调用的,则签名必须与ranges
相同。可用选项及其默认值是:epsabs = 1.49e-08
epsrel = 1.49e-08
limit = 50
points = None
weight = None
wvar = None
wopts = None
有关这些选项的更多信息,请参阅
quad
。- full_output: 布尔型,可选
来自 scipy.integrate.quad 的
full_output
的部分实现。被积函数求值次数neval
可以通过调用nquad时设置full_output=True
来获得。
- result: 浮点数
整合的结果。
- abserr: 浮点数
各种积分结果中绝对误差估计值的最大值。
- out_dict: 字典,可选
包含有关集成的附加信息的字典。
参数 ::
返回 ::
注意:
为了获得有效的结果,积分必须收敛;不保证发散积分的行为。
QUADPACK关卡例程的详细信息
nquad
调用 FORTRAN 库 QUADPACK 中的例程。本节提供有关调用每个例程的条件的详细信息以及每个例程的简短说明。调用的例程取决于重量,积分和积分限制a和b.四包例程
重量
积分
无限界限
qagse
None
No
No
qagie
None
No
Yes
qagpe
None
Yes
No
qawoe
‘sin’, ‘cos’
No
No
qawfe
‘sin’, ‘cos’
No
A或B
qawse
‘阿尔格*’
No
No
qawce
‘cauchy’
No
No
下面提供了 [1] 中每个例程的简短说明。
是一个基于全局自适应区间细分与外推法相结合的积分器,它将消除几种类型的被积函数奇异性的影响。
处理无限间隔内的积分。无限范围映射到有限区间,随后应用与
QAGS
中相同的策略。与 QAGS 的用途相同,但还允许用户提供有关 trouble-spots 的位置和类型的明确信息,即内部奇点、不连续性和被积函数的其他困难的横坐标。
是用于在有限区间 [a,b] 上评估 或 的积分器,其中 和 由用户指定。规则评估组件基于修改后的Clenshaw-Curtis技术
自适应细分方案与外推程序结合使用,该方案是对
QAGS
中的方案的修改,并允许算法处理 中的奇点。计算用户提供的
QAWO
的过程应用于连续的有限间隔,并且通过 算法的收敛加速应用于一系列积分近似。 和 的傅里叶变换 或 。近似 和 其中 和 ,其中 可以是以下函数之一: 、 、 、 。
用户指定
, 和函数的类型 。应用全局自适应细分策略,并对包含以下内容的子区间进行修改后的 Clenshaw-Curtis 积分:a或者b.计算 ,其中对于用户指定的 和 ,积分必须解释为柯西主值积分。该策略具有全局适应性。修改后的 Clenshaw-Curtis 积分用于包含点 的那些区间。
察格色:
卡吉:
察格佩:
卡沃伊:
夸夫:
夸瑟:
夸斯:
参考:
[1]罗伯特·皮森斯; de Doncker-Kapenga,伊莉斯;克里斯托夫·W·尤伯胡贝尔;大卫·卡哈纳 (1983)。 QUADPACK:用于自动集成的子程序包。 Springer-Verlag。 ISBN 978-3-540-12553-2。
例子:
计算
其中
>>> import numpy as np >>> from scipy import integrate >>> func = lambda x0,x1,x2,x3 : x0**2 + x1*x2 - x3**3 + np.sin(x0) + ( ... 1 if (x0-.2*x3-.5-.25*x1>0) else 0) >>> def opts0(*args, **kwargs): ... return {'points':[0.2*args[2] + 0.5 + 0.25*args[0]]} >>> integrate.nquad(func, [[0,1], [-1,1], [.13,.8], [-.15,1]], ... opts=[opts0,{},{},{}], full_output=True) (1.5267454070738633, 2.9437360001402324e-14, {'neval': 388962})
计算
其中
和 。
>>> def func2(x0, x1, x2, t0, t1): ... return x0*x2**2 + np.sin(x1) + 1 + (1 if x0+t1*x1-t0>0 else 0) >>> def lim0(x1, x2, t0, t1): ... return [t0*x1 + t1*x2 - 1, t0*x1 + t1*x2 + 1] >>> def lim1(x2, t0, t1): ... return [x2 + t0**2*t1**3 - 1, x2 + t0**2*t1**3 + 1] >>> def lim2(t0, t1): ... return [t0 + t1 - 1, t0 + t1 + 1] >>> def opts0(x1, x2, t0, t1): ... return {'points' : [t0 - t1*x1]} >>> def opts1(x2, t0, t1): ... return {} >>> def opts2(t0, t1): ... return {} >>> integrate.nquad(func2, [lim0, lim1, lim2], args=(0,1), ... opts=[opts0, opts1, opts2]) (36.099919226771625, 1.8546948553373528e-07)
相关用法
- Python SciPy integrate.newton_cotes用法及代码示例
- Python SciPy integrate.quad_vec用法及代码示例
- Python SciPy integrate.cumulative_trapezoid用法及代码示例
- Python SciPy integrate.romberg用法及代码示例
- Python SciPy integrate.qmc_quad用法及代码示例
- Python SciPy integrate.dblquad用法及代码示例
- Python SciPy integrate.simpson用法及代码示例
- Python SciPy integrate.quadrature用法及代码示例
- Python SciPy integrate.quad用法及代码示例
- Python SciPy integrate.solve_bvp用法及代码示例
- Python SciPy integrate.solve_ivp用法及代码示例
- Python SciPy integrate.odeint用法及代码示例
- Python SciPy integrate.ode用法及代码示例
- Python SciPy integrate.romb用法及代码示例
- Python SciPy integrate.fixed_quad用法及代码示例
- Python SciPy integrate.tplquad用法及代码示例
- Python SciPy integrate.trapezoid用法及代码示例
- Python SciPy integrate.quad_explain用法及代码示例
- Python SciPy interpolate.make_interp_spline用法及代码示例
- Python SciPy interpolate.krogh_interpolate用法及代码示例
- Python SciPy interpolative.reconstruct_matrix_from_id用法及代码示例
- Python SciPy interpolate.InterpolatedUnivariateSpline用法及代码示例
- Python SciPy interpolate.BSpline用法及代码示例
- Python SciPy interpolative.reconstruct_interp_matrix用法及代码示例
- Python SciPy interpolate.LSQSphereBivariateSpline用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.integrate.nquad。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。