Python程序中的溢出错误

时间:2014-06-05 12:54:11

标签: python

请帮助我理解为什么此代码不起作用。我知道有一些非常愚蠢的错误。这应该是用于求解洛伦兹方程组的四阶Runge kutta算法的实现。我不能使用任何函数,因为它是一个赋值。错误是:

  

警告(来自警告模块):文件   “/Users/giuseppenegro/Desktop/loretnz.py”,第21行fy = x * ro-y-x * z   运行时警告:在double_scalars中遇到溢出

     

警告(来自警告模块):文件   “/Users/giuseppenegro/Desktop/loretnz.py”,第22行fz = x * y-beta * z   运行时警告:在double_scalars中遇到溢出

     

警告(来自警告模块):文件   “/Users/giuseppenegro/Desktop/loretnz.py”,第22行fz = x * y-beta * z   RuntimeWarning:double_scalars中遇到无效值

     

警告(来自警告模块):文件   “/Users/giuseppenegro/Desktop/loretnz.py”,第32行   r + =(k1 + 2 * k2 + 2 * k3 + k4)/ 6运行时警告:遇到无效值   添加

from numpy import array,arange,zeros
from pylab import plot,xlim,show
ro=28
beta=8/3
sigma=10
a=0
b=50
r=array([0.0,1.0,0.0],float)

N=10
h=(b-a)/N
tpoints=arange(a,b,h)
xpoints=[]
ypoints=[]
zpoints=[]
def f(r,t):
     x=r[0]
     y=r[1]
     z=r[2]
     fx =sigma*(y-x)
     fy =x*ro-y-x*z
     fz =x*y-beta*z
     return array([fx,fy,fz],float)
for t in tpoints:
    xpoints.append(r[0])
    ypoints.append(r[1])
    zpoints.append(r[2])
    k1=h*f(r,t)
    k2=h*f(r+0.5*k1,0.5*h+t)
    k3=h*f(r+0.5*k2+0.5,0.5*h+t)
    k4=h*f(r+k3,t+h)
    r+=(k1+2*k2+2*k3+k4)/6

1 个答案:

答案 0 :(得分:2)

Runge-Kutta方法需要逐步推进,5不是一小步。尝试将N设置为1000.0(小数点是为了确保(b-a)/N != 0)。