Regula falsi - LinkFang.de





Regula falsi


Das Regula-falsi-Verfahren (lateinisch: regula falsi = „Regel des Falschen“), auch: Regula duarum falsarum Positionum (lateinisch: regula duarum falsarum positionum = „Regel vom zweifachen falschen Ansatz“),[1][2] Falsirechnung rsp. Falsi-Rechnung oder lineares Eingabeln genannt, ist eine Methode zur numerischen Berechnung von Nullstellen reeller Funktionen. Es kombiniert Methoden vom Sekantenverfahren und der Bisektion.

Das Verfahren (Primitivform)

Das Regula-falsi-Verfahren startet mit zwei Stellen (in der Nähe der Nullstelle) [math]a_0[/math] und [math]b_0[/math], deren Funktionsauswertungen [math]f(a_0)[/math], [math]f(b_0)[/math] unterschiedliche Vorzeichen haben. In dem Intervall [math][a,b][/math] befindet sich somit nach dem Zwischenwertsatz (für stetiges [math]f[/math]) eine Nullstelle. Nun verkleinert man in mehreren Iterationsschritten das Intervall und bekommt so eine immer genauere Näherung für die Nullstelle.

Iterationsvorschrift

In Schritt [math]k[/math] berechnet man:

[math]\!\,c_k = a_{k-1} - \frac{b_{k-1}-a_{k-1}}{f(b_{k-1})-f(a_{k-1})} f(a_{k-1})[/math]  [math]\!\,=\frac{a_{k-1}{f(b_{k-1})}-b_{k-1}{f(a_{k-1})}}{f(b_{k-1})-f(a_{k-1})}[/math].

Ist [math]f(c_{k}) = 0[/math], so wird das Verfahren beendet, denn mit [math]c_k[/math] ist eine Nullstelle gefunden. Anderenfalls wählt man [math]a_k[/math], [math]b_k[/math] wie folgt:

  • [math]a_k=c_k,\ b_k=b_{k-1}[/math] falls [math]f(a_{k-1})[/math] und [math]f(c_{k})[/math] gleiches Vorzeichen haben sowie
  • [math]a_k=a_{k-1},\ b_k=c_k[/math] falls [math]f(b_{k-1})[/math] und [math]f(c_{k})[/math] gleiches Vorzeichen haben,

und geht damit in den nächsten Iterationsschritt.

Bemerkungen

  • Die Berechnung des [math]c_k[/math] entspricht dem Anwenden des Sekantenverfahrens mit einer Iteration im [math](k-1)[/math]-ten Intervall. Im Gegensatz zum Sekantenverfahren befindet sich in diesem Intervall aber stets eine Nullstelle.
  • Geometrisch kann man [math]c_k[/math] als die Nullstelle der Sekante durch [math]\left(a_{k-1}, f(a_{k-1})\right)[/math] und [math]\left(b_{k-1}, f(b_{k-1})\right)[/math] deuten.
  • [math]c_k[/math] liegt natürlich immer im Intervall [math]\left[a_{k-1}, b_{k-1}\right][/math].
  • Konvergenz: Solange [math]f[/math] im [math]k[/math]-ten Intervall nicht strikt konkav bzw. konvex ist, also im Intervall ein Vorzeichenwechsel der zweiten Ableitung vorliegt, liegt superlineare Konvergenz vor.

Verbesserung des Verfahrens

Ist [math]f[/math] konkav oder konvex im Intervall [math][a_k,b_k][/math], hat die zweite Ableitung also überall im Intervall das gleiche Vorzeichen, so bleibt eine der Intervallgrenzen für alle weiteren Iterationen stehen, denn die Sekante liegt immer unterhalb bzw. oberhalb der Funktion. Die andere Intervallgrenze konvergiert jetzt nur noch linear gegen die Lösung.

Abhilfe schaffen die folgenden Verfahren.

Illinois-, Pegasus- und Anderson/Björk-Verfahren

Idee der Verfahren

Den verbesserten Verfahren liegt die folgende Idee zu Grunde. Falls sich die „linke“ Intervallgrenze [math]x_1[/math] im aktuellen Schritt nicht verändert –  das heißt, dass die tatsächliche Nullstelle zwischen der „linken“ Grenze und der genäherten Nullstelle liegt, – multipliziert man [math]f(x_1)[/math] mit einem Faktor [math]0\ltm\lt1[/math] und bringt den Funktionswert an der Stelle [math]x_1[/math] damit näher an Null.

Entweder verkürzt sich somit der Abstand der Näherung zur Nullstelle im nächsten Schritt oder die Nullstelle wird im nächsten Schritt zwischen der tatsächlichen Nullstelle und der „rechten“ Intervallgrenze genähert.

Im zweiten Fall werden dann einfach „rechts“ und „links“ für den nächsten Schritt vertauscht. Da der zweite Fall irgendwann – auch in konvexen Intervallen – immer eintritt, ist sicher, dass keine der beiden Intervallgrenzen bis zum Abbruch stehen bleibt. Somit ist die Konvergenz garantiert superlinear.

Algorithmus

Den folgenden Algorithmus haben diese Verfahren gemeinsam:

[math]\!\, \begin{array}{l} \mathsf{solange}~\circledast(|x_2-x_1|\geq\varepsilon_x,|f_z|\geq\varepsilon_f):\\ ~~\left[ \begin{array}{l} z:=x_1-\frac{f_1}s~\mathrm{mit}~s=\frac{f_2-f_1}{x_2-x_1}\\ f_z:=f(z)\\ \mathsf{falls}~f_z\cdot f_2\lt0:\\ ~~\left[x_1:=x_2,~f_1:=f_2,~x_2:=z,~f_2:=f_z\right.\\ \mathsf{sonst}:\\ ~~\left[f_1:=m\cdot f_1,~x_2:=z,~f_2:=f_z,~x_1~\text{bleibt}\right.\\ \end{array}\right.\\~\\ \text{nimm beliebigen Wert aus } [x_1,x_2] \text{ als Näherung für } x^* \end{array} [/math]

Dabei sind [math]x_1,x_2[/math] die Intervallgrenzen im [math]k[/math]-ten Schritt, [math]f_1,f_2[/math] und [math]f_z[/math] die Funktionswerte an den Stellen [math]x_1,x_2[/math] und [math]z[/math]. [math]\varepsilon_x,\varepsilon_f[/math] sind die Abbruchgrenzen und [math]m[/math] der Verkürzungsfaktor. [math]\circledast(\cdot,\cdot)[/math] steht hier für eine nicht näher spezifizierte, zweistellige Boolesche Funktion. Sinnvolle Funktionen wären hier die Disjunktion, die Konjunktion, die Identität des ersten und die Identität des zweiten Operanden. Im ersten Fall muss eine der beiden Abbruchgrenzen, im zweiten Fall beide, im dritten Fall lediglich [math]\varepsilon_x[/math] und im vierten Fall [math]\varepsilon_f[/math] unterschritten werden, damit [math]\circledast(|x_2-x_1|\geq\varepsilon_x,|f_z|\geq\varepsilon_f)[/math] falsch wird und das Verfahren abbricht.

Die unterschiedlichen Verfahren unterscheiden sich lediglich im Verkürzungsfaktor [math]m[/math].

Illinois-Verfahren
[math]m_I=0.5[/math]
Pegasus-Verfahren
[math]m_P=\frac{f_2}{f_2+f_z}[/math]
Anderson/Björck-Verfahren
[math]m_{A/B}=\begin{cases}1-\frac{f_z}{f_2}&\text{falls}~1-\frac{f_z}{f_2}\geq 0\\0.5&\text{sonst}\end{cases}[/math]

Rekursive Implementierung des Pegasus-Verfahrens

Die zu untersuchende Funktion und die Abbruchkriterien:

epsx, epsf seien definiert
f(x) sei definiert

Der Verkürzungsfaktor für das Pegasus-Verfahren:

m(f2, fz): return f2 ÷ (f2 + fz)

Der eigentliche, rekursive Algorithmus:

betterFalsePosition(x1, x2, f1, f2):
  z := x1 − f1 · (x2 − x1) ÷ (f2 − f1) // Näherung für die Nullstelle berechnen
  fz := f(z)
  // Abbruchgrenze unterschritten?: z als Näherung zurückgeben
  if |x2 − x1| < epsx or |fz| < epsf then return z
  // ansonsten, Nullstelle in [f(xz), f(x2)]?: „Links und Rechts“ vertauschen, Nullstelle in [f(xz), f(x2)] suchen
  if fz · f2 < 0 then return betterFalsePosition(x2, z, f2, fz)
  // ansonsten: „verkürzen“ und Nullstelle in [x1, z] suchen
  return betterFalsePosition(x1, z, m(f2, fz) · f1, fz)

Die Methode, mit der das Verfahren für das zu untersuchende Intervall, gestartet wird:

betterFalsePosition(x1, x2): return betterFalsePosition(x1, x2, f(x1), f(x2))

Bemerkungen

  • Die Konvergenz der Verfahren ist superlinear und mit der des Sekantenverfahrens vergleichbar.
  • Durch die superlineare, garantierte Konvergenz und den relativ geringen Rechenaufwand je Iteration sind diese Verfahren bei eindimensionalen Problemen in der Regel anderen Verfahren (wie z. B. dem Newton-Verfahren) vorzuziehen.

Geschichte

Das älteste erhaltene Dokument, das vom Wissen um die Methode des doppelten falschen Ansetzens zeugt, ist die indisch-mathematische Schrift „Vaishali Ganit“ (ca. 3. Jh. v. Chr.). Der altchinesische mathematische Text Die Neun Kapitel der mathematischen Kunst (200 v. Chr. – 100 n. Chr.) erwähnt den Algorithmus ebenfalls. In diesem Text wurde das Verfahren in Beispielen allerdings nur auf lineare Gleichungen angewandt, sodass die Lösungen in nur einer Iteration erreicht wurden. Leonardo da Pisa (Fibonacci) beschrieb das Verfahren des doppelten falschen Ansetzens in seinem Buch „Liber Abaci“ (1202 n. Chr.),[1] angelehnt an eine Methode, die er aus arabischen Quellen gelernt hatte.

Auch Adam Ries kannte die regula falsi und beschrieb die Methode wie folgt:[2]

„wird angesetzt mit zwei falschen Zahlen, die der Aufgabe entsprechend gründlich überprüft werden sollen in dem Maße, wie es die gesuchte Zahl erfordert. Führen sie zu einem höheren Ergebnis, als es in Wahrheit richtig ist, so bezeichne sie mit dem Zeichen + plus, bei einem zu kleinen Ergebnis aber beschreibe sie mit dem Zeichen −, minus genannt. Sodann ziehe einen Fehlbetrag vom anderen ab. Was dabei als Rest bleibt, behalte für deinen Teiler. Danach multipliziere über Kreuz jeweils eine falsche Zahl mit dem Fehlbetrag der anderen. Ziehe eins vom anderen ab, und was da als Rest bleibt, teile durch den vorher berechneten Teiler. So kommt die Lösung der Aufgabe heraus. Führt aber eine falsche Zahl zu einem zu großen und die andere zu einem zu kleinen Ergebnis, so addiere die zwei Fehlbeträge. Was dabei herauskommt, ist dein Teiler. Danach multipliziere über Kreuz, addiere und dividiere. So kommt die Lösung der Aufgabe heraus.“

Einzelnachweise

  1. 1,0 1,1 Leonardo da Pisa: Liber abbaci. 1202, Kapitel 13. De regula elcataym qualiter per ipsam fere omnes erratice questiones soluantur.
  2. 2,0 2,1 Adam Ries: Rechenung auff der linihen und federn. 1522 (Siehe Matroids Matheplanet: Die regula falsi – Adam Ries’ wichtigste Rechenregel ).

Kategorien: Algorithmus | Numerische Mathematik

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Regula falsi (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.