當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy integrate.nquad用法及代碼示例


本文簡要介紹 python 語言中 scipy.integrate.nquad 的用法。

用法:

scipy.integrate.nquad(func, ranges, args=None, opts=None, full_output=False)#

集成多個變量。

包裝 quad 以啟用對多個變量的集成。各種選項允許改進不連續函數的積分,以及加權積分的使用,以及對積分過程的一般更精細的控製。

參數

func {callable, scipy.LowLevelCallable}

要集成的函數。具有 x0, ... xnt0, ... 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 可迭代對象,可選

funcrangesopts 所需的附加參數 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 中的例程。本節提供有關調用每個例程的條件的詳細信息以及每個例程的簡短說明。調用的例程取決於重量,積分和積分限製ab.

四包例程

重量

積分

無限界限

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 的過程應用於連續的有限間隔,並且通過 算法的收斂加速應用於一係列積分近似。

誇瑟

近似 其中 ,其中 可以是以下函數之一:

用戶指定\(\alpha\) ,\(\beta\) 和函數的類型\(v\) 。應用全局自適應細分策略,並對包含以下內容的子區間進行修改後的 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)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.integrate.nquad。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。