簡體   English   中英

Python 指數積分:exp 中遇到溢出

[英]Python Exponential Integration: Overflow encountered in exp

這可能已經被問過一百萬次了; 但我無法為我的具體問題找出解決方案。 這是我的代碼:

import numpy as np
import matplotlib.pyplot as plt
from sympy import Symbol, integrate, exp, pprint
from scipy import integrate

我正在嘗試集成一些 function,其中有一個指數,並且邊界包括一些頻率范圍,(nu = 1e2,1e3/3),所以我應該從這個集成中得到一個點列表,但我一直遇到這個溢出錯誤,我不確定為什么。

M = 2e42
M_dot = 4e33
d = 3.1e26
G = 6.67e-8
c = 3e10
h = 6.636e-27
k = 1.38e-16
sigma = 5.67e-5
R_S = (2*G*M/c**2)
nu = np.linspace(1e2,1e3/3)


T_star = (3*G*M*M_dot/(8*np.pi*sigma*((R_S)**3)))
T_d1 = (T_star)*((2*R_S/R_S)**(-3/4))
T_d2 = (T_star)*((1000*R_S/R_S)**(-3/4))

x_in = (h*nu/k*(T_d1))
x_out = (h*nu/k*(T_d2))

my_list = ([])

a = lambda x: (x**(5/3))*(np.exp(x)-1)**(-1)
for x1,x2 in zip(x_out,x_in):
     my_list.append(integrate.quad(a,x1,x2))

這給了我:RuntimeWarning:exp中遇到的溢出

我怎樣才能解決這個問題?

盡管數字非常大。 回答你的問題。

) - 1) -1 = 1/(exp( )-1) = exp(-x)/(1 - exp(-x)), to rewrite a = lambda x: (x**(5/3))*np.exp(-x) / (np.exp(-x)-1) and this gives you zero.您可以使用關系 (exp( ) - 1) -1 = 1/(exp( )-1) = exp(-x)/(1 - exp(-x)) 來重寫a = lambda x: (x**(5/3))*np.exp(-x) / (np.exp(-x)-1)這給你零。

*另外你在T_d1和T_d2的公式中使用了高度可疑的R_S/R_S ,c是光速嗎? 不應該是 3e8 而不是 3e10?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM