Ing Mathematik: Numerisches Lösen nichtlinearer Gleichungen


Dieser Abschnitt ist noch im Entstehen und noch nicht offizieller Bestandteil des Buchs. Gib den Autoren Zeit, den Inhalt anzupassen!


Nullstellenprobleme

Bearbeiten

 

Nullstellen (oder Wurzeln) einer Funktion sind diejenigen Punkte, welche die x-Achse berühren oder schneiden (y=0). Wichtig sind insbesondere die Fragen

  • existieren Nullstellen,
  • in welchem Bereich liegen sie und
  • wieviele Nullstellen gibt es?

Zwischenwertsatz

Bearbeiten
 
Bernard Bolzano (böhmischer Mathematiker, 1781-1848)

 

Eine stetige Funktion   nimmt jeden Wert   zwischen   und   an. Mit   ist der Zwischenwertsatz für die Lösung von Nullstellenproblemen wichtig. Man nennt ihn dann auch Nullstellensatz (von Bolzano). Er besagt dann: Haben   und   verschiedene Vorzeichen, so existiert mindestens eine Nullstelle von   im Intervall  .

Siehe zu diesem Thema insbesondere   Zwischenwertsatz.

Bisektion

Bearbeiten

 

Das Bisektions- oder Intervallhalbierungsverfahren kann benutzt werden, um Nullstellen grob zu bestimmen. Es ist bei Weitem nicht das schnellste Verfahren um Nullstellen genau zu bestimmen. Allerdings konvergieren die schnelleren Verfahren nicht immer und das Bisektionsverfahren kann hier ggf. Hilfestellung leisten. Das Bisektionsverfahren läuft wie folgt ab:

Sei   mit   stetig.

 

 

In jedem der erzeugten Intervalle gibt es eine Nullstelle von  .

Natürlich kann man auch das Bisektionsverfahren durch ein Python-Programm realisieren:

import numpy as np

def funktion(x):
    y = x**3-x+0.3
    return y

def bisektion(a, b, maxit):
    ai = a
    bi = b

    for i in np.arange(0, maxit):
        if funktion((ai+bi)/2.) * funktion(ai) <= 0.:
            bi = (ai+bi) / 2.
        else:
            ai = (ai+bi) / 2.
        print(ai, bi)

bisektion(0., 0.5, 10)

Ausgabe:

0.25 0.5
0.25 0.375
0.3125 0.375
0.3125 0.34375
...
0.3388671875 0.33935546875

Die Zahlenwerte für das Polynom in funktion und das Startintervall wurden aus einem Beispiel in Knorrenschild: Seite 27 entnommen. Die anderen Nullstellen lassen sich genauso bestimmen. Es muss nur das Startintervall entsprechend gesetzt werden.

Auch SciPy bietet eine vorgefertigte Funktion namens scipy.optimize.bisect:

from scipy.optimize import bisect

def funktion(x):
    y = x**3-x+0.3
    return y

print (bisect(funktion, 0., 0.5))

Ausgabe:

0.33893624159645697

Die Nullstellen des Beispiels und den Graphen allgemein zeigt folgender Plot:

 

Fixpunktiteration

Bearbeiten

Gleichungen der Form   (Fixpunktgleichungen) sollen gelöst werden. In diese Form muss die Gleichung umgeformt werden. Anschließend wird eine Startnäherung   gewählt und   berechnet und weiter iterativ verfeinert   etc. Unter bestimmten Voraussetzungen nähert sich die Folge   einer Lösung des ursprünglichen Problems an.

Für weitere Details siehe z.B.   Fixpunktiteration.

Beispiel:

 
Fixpunktgleichung:
 
Startwert:
 
Iterationen:
 
 
 
 
 
 

Sehr einfach lässt sich das auch mittels Python-Programm rechnen:

import numpy as np

x_i = 1. 

for i in np.arange(0, 10):
    x_i = 10 - np.log10(x_i)
    print(x_i)

Ausgabe:

10.0
9.0
9.045757490560675
...
9.043655967157635

Banachscher Fixpunktsatz

Bearbeiten
 
Stefan Banach (polnischer Mathematiker, 1892-1945)

Mit dem banachschen Fixpunktsatz lässt sich die Konvergenz von iterativen Verfahren (wie z.B. dem Newton-Verfahren) zeigen. S. Banach veröffentlichte diesen Satz im Jahr 1922.

Eine Abbildung   heißt kontrahierend, wenn   mit  .   heißt auch Kontraktionszahl von  . Daraus folgt:   hat genau einen Fixpunkt. Die Iterationsfolge   konvergiert gegen diesen Fixpunkt. Der Startwert sei  .

Es gelten die

  • a-priori-Fehlerabschätzung:  

und die

  • a-posteriori-Fehlerabschätzung:  

mit  

Siehe auch   Fixpunktsatz von Banach. Für die Beweise siehe z.B. Meister: Seite 30ff oder auch Burg, Haf, Wille, Meister: Bd. I, Seite 72ff, Burg, Haf, Wille, Meister: Bd. VI, Seite 20f.

Newton-Verfahren

Bearbeiten
 
Isaac Newton (englischer Mathematiker und Naturwissenschaftler, 1643-1727)

Steigung der Tangente:  

Mit der Tangente wird ein Dreieck aufgespannt:

 

 

 

oder allgemein

 

Obiges Beispiel mit der von SciPy bereitgestellten Funktion newton liefert wieder das gewünschte Ergebnis. Der Solver verwendet je nach gelieferten Informationen das Newton-Raphson-Verfahren (kurz: Newton-Verfahren) oder das später vorgestellte Sekantenverfahren oder das Halley-Verfahren. Details siehe auch [1]. Zum Halley-Verfahren siehe   Halley-Verfahren. Es benötigt auch die zweite Ableitung. Wird nur die erste Ableitung angegeben, so kommt das Newton-Verfahren zum Einsatz. Wird keine Ableitung angegeben, so wird das Sekantenverfahren verwendet.

from scipy.optimize import newton

def funktion(x):
    y = x**3 - x + 0.3
    return y

print (newton(funktion, 0.))

Ausgabe:

0.3389362415949407

Heron-Verfahren

Bearbeiten

 

Sekantenverfahren

Bearbeiten

 


Regula falsi

Bearbeiten

 

Gedruckte Werke (auszugsweise)

Bearbeiten
  • Burg, Haf, Wille, Meister: Höhere Mathematik für Ingenieure, Band I: Analysis. 9. Auflage, Springer Vieweg, 2011, ISBN 978-3-8348-1218-6
  • Burg, Haf, Wille, Meister: Partielle Differentialgleichungen und funktionalanalytische Grundlagen, Höhere Mathematik für Ingenieure, Naturwissenschaftler und Mathematiker (Band VI). 5. Auflage, Vieweg+Teubner, 2010, ISBN 978-3-8348-1294-0
  • 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
  • Meister: Numerik linearer Gleichungssysteme. 4. Aufl., Vieweg+Teubner, 2011, ISBN 978-3-8348-1550-7