2012-03-31 8 views
2

Ich muss dieses Problem mit einem Python-Code auf der Grundlage der Annahme der Schwerkraft mit Luftwiderstand betroffen lösen y "= g - (1/70) * (y ')^2, g = 9,8, y (0) = 0, y '(0) = 0Ein Objekt fällt 100 m. Wie lange dauert es, bis es fällt 100m

Ich habe die Frage ähnlich gelöst mit der Euler-Heun-Methode für y "= y - (1/10) * y', y (0) = 0, y '(0) = 1, [0, unendlich]

Wie ändere ich was ich habe, um das erste Problem des Luftwiderstandes zu lösen? Irgendwelche Vorschläge?

h= 0.0001 
y = 0.0 
t = 0.0 
v = 1.0 

while y >= 0: 
    ym = v*h+y 
    vm = v - h*(y +v*0.1) 
    y = y + 0.5*h*(v+vm) 
    v = v - 0.5*h*(y + ym + 0.1*(v + vm)) 
    t += h 

    error = abs(1.0 - y/ym) 
    if error > 1.0e-8: 
     h*=0.1 
    if error < 1.0e-10: 
     h*=1.1 

     print y, v, t 

Hinweis: Ich habe auch versucht, ein einfaches Euler-Verfahren, aber der Fehler ist nicht genau genug

delta_t = .000001 #time step size 
y = 0.   #initial height 
g = 9.8  #gravitational acceleration 
t = 0.   #initial time 
y_prime = 0. #initial velocity 
y_2_prime = g #initial acceleration 

while y < 100: 
    y = y_prime * delta_t + y 
    y_prime = y_2_prime * delta_t + y_prime 
    y_2_prime = g - 0.014285714* y_prime**2 
    t = t + delta_t 
print t 
+1

Hey, verwenden Sie Python 2? Wenn ja, "(1/70)" ist 0, also wirst du überhaupt keinen Widerstand haben. – DSM

+0

ja du hast absolut recht. – pearli

Antwort

3

Sie ein Runge-Kutta-Verfahren verwenden, die im Grunde ein Euler-Verfahren höherer Ordnung ist. Sie können überprüfen, Wikipedia für weitere Details dazu. Es ist wirklich üblich, also sollten Sie keine Probleme haben, es zu googeln und einige gute Beispiele zu finden, wie Sie es implementieren können.

Es gibt auch andere Methoden, aber die meisten Leute (zumindest diejenigen, die ODE-Integration beginnen) wie Runge-Kutta.

Verwandte Themen