Differentialgleichung lösen in Python?

4 Antworten

Für den Anfang solltest du die SciPy-Bibliothek integrieren (https://www.scipy.org/) und das NumPy-Package nutzen. So erhältst du schon mal einen Zugriff auf bereits implementierte mathematische Funktionen (wie das Integral u.ä.).

Referenzen findest du hier:

Speziell die odeint-Funktion (https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html) dürfte interessant für dich sein, da sie der Berechnung von Differentialgleichungen dient. Hier gibt es noch ein Video-Tutorial, wo sie näher erklärt wird: http://apmonitor.com/che263/index.php/Main/PythonDynamicSim

H_(N+1) = H_N + (b-c*H_N )*dt

Wofür sollen denn die Unterstriche stehen? Handelt es sich dabei wirklich um Variablennamen (H_, H_N, ...)?

Da es den Tags nach für die Schule ist, zielt die Aufgabe vermutlich auf rekursive Programmierung ab.

Versuch also mal die Gleichungdef als def anzugeben und diese dann ineinander verschachtelt immer wieder aufzurufen.

Bsp Potenz:

def rechnePotenz(zahl, potenz) :

if potenz > 1:

return zahl * rechnePotenz(zahl, potenz - 1)

else:

return 1

Verbessert mich falls mir ein Fehler unterlaufen ist. Du könntest versuchen die Gleichung auf diese Art zu lösen

Das ist keine Differentialgleichung. (Da kommt ja gar keine Ableitung vor.)

Ich denke es ist sowas gemeint:

https://www.dropbox.com/s/793ulr1fs4bg0hf/DGLh.pdf?dl=0

Ich würde die Aufgabe dann vermutlich so lösen:

H0 = 100
c = 0.01
b = 0.1

dt = 0.01
T = 10
# T ist Länge des Zeitintervalls, für das
# die Näherungslösung berechnet werden soll
NN = int(T/dt)
# NN ist Anzahl der Berechnungsschritte

t = [0]
H = [H0]

for N in range(NN):
    t.append(t[-1]+dt)
    H.append(H[-1]+(b-c*H[-1])*dt)

import matplotlib.pyplot as plt
plt.plot(t, H)
plt.xlabel('t')
plt.ylabel('h(t)')
plt.show()

Das ist keine korrekte Differentialgleichung.