Python RuntimeWarning:exp中遇到溢出

Python RuntimeWarning:exp中遇到溢出,python,iteration,Python,Iteration,我有三个耦合的ODE,我使用python中的RK4方法在给定初始条件下求解它们。当我运行它们时,会出现以下错误: RuntimeWarning:exp中遇到溢出 如果我在哪里做错了,我将不胜感激 以下是代码(最初粘贴): 您的问题似乎起源于f或g函数调用。将-w的值传递给该代码中的函数时,请注意该值。如果它的计算结果是一个足够大的正数,那么调用on似乎很容易导致溢出。谷歌告诉我e^44.927的估值为3.2474927e+19 您可能需要为w选择一个较小的绝对值,以运行此代码而不会出现溢出错误

我有三个耦合的ODE,我使用python中的RK4方法在给定初始条件下求解它们。当我运行它们时,会出现以下错误:

RuntimeWarning:exp中遇到溢出

如果我在哪里做错了,我将不胜感激

以下是代码(最初粘贴):


您的问题似乎起源于
f
g
函数调用。将
-w
的值传递给该代码中的函数时,请注意该值。如果它的计算结果是一个足够大的正数,那么调用on似乎很容易导致溢出。谷歌告诉我e^44.927的估值为3.2474927e+19

您可能需要为
w
选择一个较小的绝对值,以运行此代码而不会出现溢出错误


(有关如何确定Python中允许的最大整数值的信息,请参阅。)

欢迎!尝试以稍微不同的方式问这个问题可能会有用。最好提供尽可能少的代码来重现问题,并在问题的主体中提供它。在调试一大部分代码时仅仅寻求帮助的问题并不适合这样做。你可以在这里查阅关于如何最好地提问的指南。我强烈怀疑你的
f
g
h
公式有误。要么如此,要么问题是病态的。
v
在你的起点的导数有值
-3619146406000.8389
,它看起来已经很大了,在一小步之后,你现在将巨大的(负)值输入一个
np.exp(-w)
,结果是无穷大。(我看不出RK4实现有什么问题。)你有没有提到你正在解决的物理问题?投票结束:这不是代码的问题,代码很好地解决了ODE。这是方程式的问题。(这可能是将原始方程式转换为Python的方式的问题,但除非我们看到这些方程式,否则我们无法提供帮助。)谢谢。下次我会试着跟着它@wHicksInt的最小值和最大值在这里并不相关;这都是浮点运算。@MarkDickinson很好。我链接到一个更好的问题。谢谢你的帮助。使用的代码是正确的,但问题在于使用的微分方程。它们是自治方程,如果初始值很大,在一段时间后会爆炸。任何关于如何计算自治方程的想法或参考资料都会导致我无法在网络中找到任何合适的解释@马克迪金森
#simple exponential potential
# u = K*phi'/H0; v = omega_matter**(1/3)*(1+z); w = l*K*phi' - ln((K**2)*V0/H0**2)
# f,g,h are functions of derivation of u,v,w respectively derieved w.r.t t*H0 = T

import matplotlib.pyplot as plt
import numpy as np
import math

def f(T,u,v,w):
    return -3*u*((v**3 + (u**2)/6 + np.exp(-w)/3)**0.5) + l*np.exp(-w)

def g(T,u,v,w):
    return -v*(v**3 + (u**2)/6 + np.exp(-w)/3)**0.5

def h(T,u):
    return l*u

p = 0.1
q = 1.0
dh = 0.1
n = (q-p)/dh
u = [0.0]
v = [1100]
T = [0.00001]
w = [-44.927]
l = 1.3

for i in range(0,int(n)):
    k1 = f(T[i],u[i],v[i],w[i])
    r1 = g(T[i],u[i],v[i],w[i])
    print k1, r1
    s1 = h(T[i],u[i])
    print s1
    k2 = f(T[i] + 0.5*dh,u[i] + k1*dh,v[i] + k1*dh,w[i] + k1*dh)
    r2 = g(T[i] + 0.5*dh,u[i] + r1*dh,v[i] + r1*dh,w[i] + r1*dh)
    s2 = h(T[i] + 0.5*dh,u[i] + s1*dh)
    print k2,r2,s2
    k3 = f(T[i] + 0.5*dh,u[i] + k2*dh,v[i] + k2*dh,w[i] + k2*dh)
    r3 = g(T[i] + 0.5*dh,u[i] + r2*dh,v[i] + r2*dh,w[i] + r2*dh)
    s3 = h(T[i] + 0.5*dh,u[i] + s2*dh)
    k4 = f(T[i] + dh,u[i] + dh*k3,v[i] + dh*k3,w[i] + k3*dh)
    r4 = g(T[i] + dh,u[i] + r3*dh,v[i] + dh*r3,w[i] + r3*dh)
    s4 = h(T[i] + dh,u[i] + dh*s3)
    T == T.append(T[i] + dh)
    u == u.append(u[i] + (dh/6)*(k1 + 2.0*k2 + 2.0*k3 + k4))
    v == v.append(v[i] + (dh/6)*(r1 + 2.0*r2 + 2.0*r3 + r4))
    w == w.append(w[i] + (dh/6)*(s1 + 2.0*s2 + 2.0*s3 + s4))

plt.plot(T,u, '-b')
plt.plot(T,v, '-r')
plt.plot(T,w, '-g')   
plt.title('quintessence cosmological model')
plt.show()