Python 指数积分:exp 中遇到溢出

问题描述 投票:0回答:1

这个问题可能已经被问过一百万次了;但我无法找出针对我的具体问题的解决方案。这是我的代码:

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

我正在尝试积分一些具有指数的函数,并且边界包括一些频率范围(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))

这给了我:运行时警告:exp中遇到溢出

我该如何解决这个问题?

python math error-handling exponential numerical-integration
1个回答
0
投票

尽管数字非常大。回答你的问题。

您可以使用关系 (exp(x) - 1)-1 = 1/(exp(x)-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吗?

© www.soinside.com 2019 - 2024. All rights reserved.