本文簡要介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。