2014-06-05 2 views
-3

Aidez-moi à comprendre pourquoi ce code ne fonctionne pas. Je sais qu'il y a quelque chose de très stupide. Cela devrait être une implémentation de l'algorithme Runge Kutta du quatrième ordre pour résoudre le système d'équations de Lorentz. Je ne peux pas utiliser une fonction car est une erreur de assignment.The sont:Erreur de débordement dans le programme Python

Avertissement (du module avertissements): Fichier "/Users/giuseppenegro/Desktop/loretnz.py", ligne 21 fy = x * ro-yx * z RuntimeWarning: débordement rencontré dans double_scalars

avertissement (du module avertissements): fichier "/Users/giuseppenegro/Desktop/loretnz.py", ligne 22 fz = x * y * z-bêta RuntimeWarning: débordement rencontré dans double_scalars

Avertissement (du module des avertissements): Fichier "/Users/giuseppenegro/Desktop/loretnz.py", ligne 22 = fz x * y * z-bêta RuntimeWarning: valeur non valide rencontré dans double_scalars

Warning (module de mises en garde): Fichier «/Users/giuseppenegro/Desktop/loretnz.py », ligne 32 r + = (k1 + k2 * 2 + 2 * k3 + k4)/6 RuntimeWarning: valeur non valide rencontré dans ajouter

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 
+4

Pourriez-vous expliquer ce que vous entendez par "ça ne marche pas"? –

+0

Il me donne l'erreur "débordement rencontré dans double_scalars" – user3691737

+0

Où vous donne-t-il cette erreur? – SirGuy

Répondre

1

Le Runge-Kutta les méthodes doivent avancer dans de petites étapes, 5 n'est pas un petit pas. Essayez de définir N à 1000.0 à la place (le nombre décimal est pour vous assurer que (b-a)/N != 0).