我在(0,無限)限制內積分時遇到困難。我正在嘗試做這個 Jupyter 筆記本(不知道這是否是相關信息)。代碼如下:import numpy as npimport matplotlib.pyplot as pltimport scipy as scimport mathfrom scipy.integrate import quaddef integrand3(x,z,m,n): return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))def IgK0(z,m,n): IntK1 = quad(integrand3, 0, 1, args=(z,m,n)) return IntK1IgK0(1,1,1)這給出了結果:(0.19224739693489237, 2.1343748650136926e-15)這沒關系。但是當我用無窮大替換上限時,我得到“nan”作為輸出。請看下面的代碼:def IgKI(z,m,n): IntKI = quad(integrand3, 0, np.inf, args=(z,m,n)) return IntKI當我使用 (0,0) 值作為 (m,n) 時,盡管存在一些我不明白的錯誤,但至少我得到了一些答案。IgKI(1,0,0)<ipython-input-53-9b9d0956fa85>:2: RuntimeWarning: overflow encountered in cosh return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))<ipython-input-53-9b9d0956fa85>:2: RuntimeWarning: overflow encountered in sinh return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))(0.42102443824067737, 1.3628527263018718e-08)但是當我對 (m,n) 使用任何其他值時,我得到以下結果:IgKI(1,0,1)<ipython-input-53-9b9d0956fa85>:2: RuntimeWarning: overflow encountered in cosh return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))<ipython-input-53-9b9d0956fa85>:2: RuntimeWarning: overflow encountered in sinh return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))<ipython-input-53-9b9d0956fa85>:2: RuntimeWarning: invalid value encountered in double_scalars return ((np.cosh(x))**m)*((np.sinh(x))**n)*(np.exp(-z*np.cosh(x)))<ipython-input-76-9bee7a5d6456>:2: IntegrationWarning: The occurrence of roundoff error is detected, which prevents the requested tolerance from being achieved. The error may be underestimated. IntKI = quad(integrand3, 0, np.inf, args=(z,m,n))(nan, nan)那么,我做錯了什么?
1 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
錯誤很明顯——你遇到了溢出,一切都崩潰了。這是由于您的功能很快就出現了分歧:
>>> [np.cosh(10**x) for x in range(5)]
__main__:1: RuntimeWarning: overflow encountered in cosh
[1.5430806348152437, 11013.232920103324, 1.3440585709080678e+43, inf, inf]
在 1000 時,Python 已經無法計算cosh(例如)。事實上,積分(1,1,1)到 100 就可以了。由于這是數值積分,因此需要計算界限處的值(無窮大也將轉換為界限,但您可以僅使用 1000 進行測試)。正如您從警告中看到的,這意味著函數的每個部分都是單獨計算的,更不用說您將其求冪并對指數求冪。
這個庫不能滿足你的需求。您可以嘗試使用符號集成sympy,或者更專用的工具(例如 Mathematica)。
添加回答
舉報
0/150
提交
取消