Das Heron-Verfahren

Das Heron-Verfahren ist ein iteratives Verfahren zur näherungsweisen Bestimmung der Quadratwurzel einer Zahl.

Erklärung des Heron-Verfahrens

Die Wurzel von 25 ist 5, weil 5*5=25. Geometrisch kann die Wurzel als Kantenlänge eines Quadrats gedeutet werden, da der Flächeninhalt des Quadrats (also das Produkt der beiden Seiten) eben dem Quadrat der Wurzel entspricht.

Hier nun das Heron-Verfahren (vergleiche auch den Wikipedia-Artikel) für die Quadratwurzel von 25 (die ja 5 ist, wie wir schon wissen).

Wir starten mit einem beliebigen Rechteck, zum Beispiel einem mit einer Seitenlänge x0 von 10. Die andere Seitenlänge y0 muss entsprechend 2,5 sein, damit der Flächeninhalt des Quadrats 25 ergibt:

heron1

Hier entspricht die Seitenlänge aber (noch) nicht der Quadratwurzel, da wir (noch) ein Rechteck haben, und kein Quadrat. Wie gelangen wir nun zu einem Quadrat? Beim Quadrat sind die Seiten gleich lang, und bei obigem Rechteck sind die Seiten unterschiedlich lang. Um näher zur Figur des Quadrats zu gelangen, wählen wir als neue untere Seitenlänge x1 den Mittelwert der beiden Seitenlängen x0 und y0. Die andere Seitenlänge y1 muss wieder so gewählt werden, dass das Produkt der beiden Seitenlängen 25 ergibt.

heron2

Das sieht jetzt schon besser aus. Den letzten Schritt (die Mittelwertbildung) wiederholen wir noch einmal, um die Figur zu optimieren.

heron3

Die untere Seitenlänge (zirka 5,125) ist jetzt schon fast 5 (die andere Seitenlänge y2 auch). Also führen wir das Verfahren, d.h. die Mittelwertbildung, noch ein letztes Mal durch:

heron4

Mit guter Genauigkeit haben wir nun die Quadratwurzel von 25, also 5, bestimmt. Das Rechteck vom Anfang hat sich (zumindest in sehr guter Näherung) in ein Quadrat verwandelt.

Die genauen Werte für die einzelnen Seitenlängen xn sind weiter unten auf der Seite nachzulesen, und zwar bei der ersten Beispielberechnung.

Heron-Verfahren als PHP-Programm

Mit folgendem PHP-Programm kann der Algorithmus nachvollzogen werden:

PHP-Quelltext:

<?
// Heron-Verfahren / Babylonisches Wurzelziehen
// Radikand
$a = 2.0;
// Startwert
$x_alt = 5.0;
// Anzahl der Iterationen
$anzahl = 10;
// Los geht's
$x_neu = $x_alt;
echo "Gesucht ist die Wurzel von a=".$a.":<br>";
for ($i = 0; $i <= $anzahl; $i++)
{
echo "Iteration Nr. ".$i.": ".$x_neu."<br>";
$x_neu = 0.5 * ($x_alt + $a / $x_alt);
$x_alt = $x_neu;
}
?>

Einige Beispiel-Berechnungen:

Gesucht ist die Wurzel von a=25:
Iteration Nr. 0: 10
Iteration Nr. 1: 6.25
Iteration Nr. 2: 5.125
Iteration Nr. 3: 5.0015243902439
Iteration Nr. 4: 5.0000002323057
Iteration Nr. 5: 5
Iteration Nr. 6: 5
Iteration Nr. 7: 5
Iteration Nr. 8: 5
Iteration Nr. 9: 5
Iteration Nr. 10: 5

Gesucht ist die Wurzel von a=2:
Iteration Nr. 0: 5
Iteration Nr. 1: 2.7
Iteration Nr. 2: 1.7203703703704
Iteration Nr. 3: 1.4414553681777
Iteration Nr. 4: 1.4144709813678
Iteration Nr. 5: 1.4142135857969
Iteration Nr. 6: 1.4142135623731
Iteration Nr. 7: 1.4142135623731
Iteration Nr. 8: 1.4142135623731
Iteration Nr. 9: 1.4142135623731
Iteration Nr. 10: 1.4142135623731

Gesucht ist die Wurzel von a=2:
Iteration Nr. 0: 50
Iteration Nr. 1: 25.02
Iteration Nr. 2: 12.54996802558
Iteration Nr. 3: 6.3546654906997
Iteration Nr. 4: 3.334697440858
Iteration Nr. 5: 1.9672260009725
Iteration Nr. 6: 1.4919430040068
Iteration Nr. 7: 1.4162383937777
Iteration Nr. 8: 1.4142150098491
Iteration Nr. 9: 1.4142135623738
Iteration Nr. 10: 1.4142135623731

Gesucht ist die Wurzel von a=17:
Iteration Nr. 0: 17
Iteration Nr. 1: 9
Iteration Nr. 2: 5.4444444444444
Iteration Nr. 3: 4.2834467120181
Iteration Nr. 4: 4.1261066275813
Iteration Nr. 5: 4.1231067169628
Iteration Nr. 6: 4.1231056256178
Iteration Nr. 7: 4.1231056256177
Iteration Nr. 8: 4.1231056256177
Iteration Nr. 9: 4.1231056256177
Iteration Nr. 10: 4.1231056256177

Gesucht ist die Wurzel von a=16:
Iteration Nr. 0: 100
Iteration Nr. 1: 50.08
Iteration Nr. 2: 25.199744408946
Iteration Nr. 3: 12.917335741808
Iteration Nr. 4: 7.0779906290875
Iteration Nr. 5: 4.669259597054
Iteration Nr. 6: 4.047963536717
Iteration Nr. 7: 4.0002841553331
Iteration Nr. 8: 4.0000000100923
Iteration Nr. 9: 4
Iteration Nr. 10: 4

Heron-Verfahren als Java-Programm

heron-verfahren

Programm starten!

Download: Heron.jar