Ing Mathematik: Näherungsweises Lösen gewöhnlicher Dgl.


Numerisches Differenzieren

Bearbeiten

Die findiff-Funktion

Bearbeiten

Python-Code:

import findiff
import numpy as np

x = np.linspace(0, 1, 100)

f = np.sin(x)  
d_dx = findiff.FinDiff(0, x, 1)
df_dx = d_dx(f) 

print(df_dx[-1])

Ausgabe:

0.5403208977697744

Differenzenquotient

Bearbeiten

 

  • Vorwärts-Differenzenquotient:  
  • Rückwärts-Differenzenquotient:  
  • Zentraler Differenzenquotient:  

Siehe auch   Numerische Differentiation,   Differenzenquotient.

Satz von Taylor

Bearbeiten
 
Brook Taylor (englischer Mathematiker, 1685-1731)
 
Joseph-Louis Lagrange (italienisch-französischer Mathematiker, 1736-1813)

Taylorpolynom:  

Lagrangesche Restgliedformel:  

 

Nachfolgend seien Entwicklungen der  -Funktion als Taylorpolynome gezeigt. Zuerst die Linearisierung um den Arbeitspunkt und eine Parabel. Anschließend Polynome höheren Grades.

 

 

Zugehöriger Python-Code:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import approximate_taylor_polynomial

x = np.arange(-10.0, 10.0, 0.01)
degree1 = 5
degree2 = 11

taylor1 = approximate_taylor_polynomial(np.exp, 0, degree1, 1, degree1+2)
taylor2 = approximate_taylor_polynomial(np.exp, 0, degree2, 1, degree2+2)

plt.plot(x, np.exp(x), label = r"$e^x$")
plt.plot(x, taylor1(x), label="Taylor, %d" % degree1)
plt.plot(x, taylor2(x), label="Taylor, %d" % degree2)
plt.plot(0, 1, "o", label = "Entwicklungspunkt")
plt.legend()
plt.tight_layout()
plt.grid()
plt.axis([-10, 10, -5, 5])
plt.show()

Siehe auch   Taylor-Formel, Knorrenschild: Seite 112ff

Diskretisierungsfehler

Bearbeiten

Problem: Wählt man   zu klein, so ist ggf. der Rundungsfehler zu groß. Ist   zu groß, dann ist offensischtlich der Diskretisierungsfehler hoch.

Herleitung: Mit der Taylorformel erhält man für  

 

 

Diskretisierungsfehler:  

(Fehler)Ordnung  :   mit  .

Je höher die Fehlerordnung, desto genauer ist i. A. die Formel. Die Schrittweite h ist optimal, wenn der Gesamtfehler aus Diskretisierungs- und Rundungsfehler minimal wird. Lt. Korrenschild: Seite 115 ist das Optimum bei   erreicht. eps sei die Maschinengenauigkeit.

Siehe auch   Lokaler Diskretisierungsfehler.

Gewöhnliche Differentialgleichungen - Allgemeines

Bearbeiten

  ist eine gewöhnliche Differenzialgleichung n-ter Ordnung. Es sind sämtliche Lösungen dieser Gleichung zu bestimmen. Häufig gelingt das nicht mehr analytisch, sondern die Gleichung muss numerisch bearbeitet werden.

Siehe auch   Differentialgleichung,   Gewöhnliche Differentialgleichung und Burg, Haf, Wille, Meister

Anfangswertprobleme

Bearbeiten

Allgemeines

Bearbeiten

Die Lösung eines Anfangswertproblems ist die Lösung der Differentialgleichung plus Berücksichtigung von vorgegebenen Anfangswerten.

  mit  .

Wie nachfolgendes Bild zeigt, gibt es auch hier eine Vielzahl an numerischen Methoden (das Bild beinhaltet nicht alle verfügbaren Methoden, Quelle: Tabellen in Burg, Haf, Wille, Meister: Seite 75f).

 

Lipschitz-Bedingung

Bearbeiten
 
Rudolf Lipschitz (deutscher Mathematiker, 1832-1903)

  heißt lipschitzstetig, wenn eine Konstante (die Lipschitz-Konstante)   existiert, die für alle   gilt.

Siehe auch   Lipschitz-stetige Funktion, Burg, Haf, Wille, Meister: Seite 21, Hanke-Bourgeois: Seite 553

Picard-Lindelöf

Bearbeiten
 
Charles Émile Picard (französischer Mathematiker, 1856-1941
 
Ernst Leonard Lindelöf (finnischer Mathematiker, 1870-1946)
  • Existenzproblem: Finden wir stets eine Lösung des Anfangswertproblems?
  • Eindeutigkeit: Ist dies die einzige Lösung?
  • Ist diese Lösung lokal oder lässt sie sich auf einen größeren Bereich fortsetzen?

Die dritte Frage lässt sich so beantworten: Existenzaussagen sind i.A. nur lokal gültig. Die ersten beiden beantwortet der Existenz- und Eindeutigkeitssatz von Picard-Lindelöf.

Die nachfolgende Variante des Satzes von Picard-Lindelöf stammt aus Wikipedia (  Satz von Picard-Lindelöf, Autoren siehe dort):

Sei   ein Banachraum,  ,   mit   und   stetig und lokal Lipschitz-stetig in der zweiten Variablen. Hierin bezeichnet

 

die abgeschlossene Kugel um   mit Radius  . Ist

 

und

 

dann existiert genau eine Lösung des Anfangswertproblems

 

auf dem Intervall  ; sie hat Werte in  .

Eine etwas einfacher verständliche Variante findet sich in Burg, Haf, Wille, Meister: Seite 15ff. Auch in Hanke-Bourgeois: Seite 553ff findet sich dieser Satz.

Rekursionsformel nach Picard-Lindelöf:

Das Anfangswertproblem wird durch die Integralgleichung   ersetzt.

 

 .

Dabei muss gelten:   stetig.

Mit dem Verfahren von Picard-Lindelöf ist zwar schon eine Methode zur numerischen Lösung von Anfangswertproblemen gegeben. In Burg, Haf, Wille, Meister: Seite 22ff ist ein einfaches Beispiel gezeigt. Allerdings lassen sich oft die Integrale nicht einfach explizit bestimmen. Es gibt daher eine Vielzahl anderer Methoden, die dieses Problem vermeiden.

Integrationsmethoden

Bearbeiten

 . Das Integral kann durch numerische Quadraturformeln gelöst werden. Mit der Rechteckregel ergibt sich:

 

Differenziationsmethoden

Bearbeiten

 

 

Einschrittverfahren

Bearbeiten

Zur Berechnung der Größe   ist stets die Verfügbarkeit von   ausreichend.

  Einschrittverfahren

Mehrschrittverfahren

Bearbeiten

Zur Berechnung der Lösung   sind neben   mit   noch weitere Stützpunkte zu berücksichtigen.

  Mehrschrittverfahren

Explizite Verfahren

Bearbeiten

Weist die Verfahrensfunktion keine Abhängigkeit von   auf, so heißt das Verfahren explizit.

Implizite Verfahren

Bearbeiten

Weist die Verfahrensfunktion eine Abhängigkeit von   auf, so heißt das Verfahren implizit.

Steife Differenzialgleichungen

Bearbeiten

Bei diesen versagen explizite Einschrittverfahren (Quelle: Hanke-Bourgeois: Seite 587). Die Lösungskomponenten setzen sich aus verschieden stark exponentiell abklingenden Anteilen zusammen (Quelle: Bronstein, Semendjajew, Musil, Mühlig: Taschenbuch der Mathematik. 7. Aufl., Harri Deutsch, 2008, Seite 978). Die Lipschitzkonstante nimmt große Werte   an.

Siehe auch   Steifes Anfangswertproblem. Im Englischen werden derartige DGL als stiff bezeichnet.

Ein PDF-File zum Thema Steife Differentialgeichungen findet sich auch auf [1].

 
Leonhard Euler (schweizer Mathematiker und Naturwissenschaftler, 1707-1783)

Explizit

Bearbeiten
 
Augustin-Louis Cauchy (französischer Mathematiker, 1789-1857)

 

 

Mit   kann dieses Verfahren aus obigen Formeln abgeleitet werden. Oder noch einfacher via nachfolgendem Bildchen.

 

 

 

oder allgemein

 

 

Dieses Verfahren wird auch Euler-Cauchy-, Vorwärts-Euler-Verfahren oder eulersches Polygonzugverfahren genannt.

Siehe auch   Explizites Euler-Verfahren, Burg, Haf, Wille, Meister: Seite 43ff, Knorrenschild: Seite 147ff oder Hanke-Bourgeois: Seite 557ff

Implizit

Bearbeiten

 

Auch dieses Verfahren lässt sich aus dem obigen Bild herleiten. Diesmal wird aber nicht der Punkt   betrachtet, sondern  . Es wird auch Rückwärts-Euler-Verfahren genannt.

Siehe auch   Implizites Euler-Verfahren, Burg, Haf, Wille, Meister: Seite 45ff oder Hanke-Bourgeois: Seite 560ff

 
Carl David Tolmé Runge (deutscher Mathematiker, 1856-1927)

Es ist ein verbessertes Polygonzugverfahren. Es lässt sich auch mit der Mittelpunktregel herleiten.

 

Herleitung:

 

 

 

Der folgende Python-Code dient nur der Visualisierung und zu Testzwecken und ist nicht für den Produktiveinsatz gedacht. Dazu siehe das Kapitel Runge-Kutta und die vorgefertigte SciPy-Funktion solve_ivp.

Grafikausgabe des nachfolgenden Python-Codes:

 

import numpy as np
import matplotlib.pyplot as plt

def f(t,y):
    return(y)

def runge(dt, n, y0):
    t = np.zeros(n+2)
    y = np.zeros(n+2)
    t[0] = 0.
    y[0] = y0

    for i in np.arange(0, n+1):
        y[i+1] = y[i] + dt * f(t[i]+dt/2, y[i]+dt/2*f(t[i],y[i]))
        t[i+1] = t[i] + dt

    plt.plot(t,y, label="Runge-Näherung")
    return y,t

y, t = runge(1., 9, 1.)

print("Runge-Näherung = ", y[-1])

x = np.arange(0., 10.1, .1)
y = np.exp(x)

plt.plot(x,y, label="exaktes Ergebnis")
plt.grid()
plt.legend(loc="best")
plt.show()

print("exaktes Ergebnis = ", y[-1])

Konsolenausgabe:

Runge-Näherung =  9536.7431640625
exaktes Ergebnis =  22026.465794806718

Python-Code:

import numpy as np

def f(t,y):
    return(y)

def runge(dt, n, y0):
    t = np.zeros(n+2)
    y = np.zeros(n+2)
    t[0] = 0.
    y[0] = y0

    for i in np.arange(0, n+1):
        y[i+1] = y[i] + dt * f(t[i]+dt/2, y[i]+dt/2*f(t[i],y[i]))
        t[i+1] = t[i] + dt
    return y

y = runge(.01, 1000, 1.)
print(y[-1])

Ausgabe:

22244.151807018065

Die exakte Lösung wäre  

Siehe auch Burg, Haf, Wille, Meister: Seite 53f.

Runge-Kutta

Bearbeiten
 
Martin Wilhelm Kutta (deutscher Mathematiker, 1867-1944)

 

Das obige Bild zeigt auch, dass das Runge-Kutta-Verfahren schon sehr genaue Werte liefert (verglichen mit den anderen dargestellten Verfahren).

Python-Programm (es soll die DGL   mit dem Anfangswert   gelöst werden. Siehe dazu auch Burg, Haf, Wille, Meister: Seite22f. Dort wird auch die exakte Lösung mit vollständiger Induktion hergeleitet. Dies kann aber auch mit grundlegenden Mathematikkenntnissen selbst durchgeführt werden -> Separation der Variablen):

import scipy
import numpy as np

def dy_dx(x, y):
    return y

y0 = [1]
xi = [0, 10]

z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45")
y = z.y 

print(y[-1, -1])

Ausgabe:

22016.12509092586

Die exakte Lösung wäre:  

Knorrenschild gibt auf Seite 157 seines Buches eine Tabelle mit Zahlenwerten für verschiedene Verfahren an. Es soll die DGL   u.a. mit dem Runge-Kutta-Verfahren gelöst werden. Nachfolgendes Python-Programm zeigt die Vorgehensweise. Die gelieferten Werte liegen sehr nahe an der Knorrenschild-Tabelle (und auch an den exakten Werten).

Python-Code:

import scipy
import numpy as np
import matplotlib.pyplot as plt

def dy_dx(x, y):
    return x*x + 0.1*y

y0 = [0]
x = [-1.5, 1.5]

z = scipy.integrate.solve_ivp(dy_dx, x, y0, method="RK45" ,
                              t_eval=[-1.5,-0.9,-0.3,0.3,0.9,1.5])
y = z.y

print(y)

Ausgabe:

0.         0.91345018 1.21332982 1.30691808 1.62660618 2.63179452

Siehe auch   Runge-Kutta-Verfahren, Burg, Haf, Wille, Meister: Seite 55ff, Knorrenschild: Seite 157ff, Hanke-Bourgeois: Seite 565ff und [2].

Gedruckte Bücher (auszugsweise)

Bearbeiten
  • Burg, Haf, Wille, Meister: Höhere Mathematik für Ingenieure, Band III: Gewöhnliche Differentialgleichungen, Distributionen, Integraltransformationen. 5. Auflage, Vieweg+Teubner, 2009, ISBN 978-3-8348-0565-2
  • Hanke-Bourgeois: Grundlagen der Numerischen Mathematik und des Wissenschaftlichen Rechnens. 3. Aufl., Vieweg+Teubner, 2009, ISBN 978-3-8348-0708-3
  • Knorrenschild: Numerische Mathematik, Eine beispielorientierte Einführung. 6. Aufl., Hanser, 2017, ISBN 978-3-446-45161-2