亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python 中無限極限的集成

python 中無限極限的集成

波斯汪 2023-07-18 10:24:39
我在(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)。


查看完整回答
反對 回復 2023-07-18
  • 1 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號