Differentialgleichung lösen in Python?
Hi Leute.
Weiß hier zufällig jemand wie man in Python 3 eine Differentialgleichung löst? Differentialgleichungen habe ich schon in der Schule nicht verstanden und nun muss ich eine in Python lösen...wäre total lieb wenn mir jemand helfen kann!
Die Aufgabe sieht wie folgt aus:
Schreiben Sie ein Programm, das die Differentialgleichung
H_(N+1) = H_N + (b-c*H_N )*dt
löst, für die Werte H0 = 100, c = 0.01 und b = 0.1. Plotten Sie die Lösung.
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:
- SciPy: https://docs.scipy.org/doc/scipy/reference/
- NumPy: https://docs.scipy.org/doc/numpy/reference/index.html
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.