Natürlich gibt es in der LotusScript Sprache die Funktion SQR, um die Wurzel aus einer vorgegebenen Zahl zu ziehen. Der nachfolgende Algorithmus ist leicht zu verstehen und erzielt nach wenigen Iterationen eine gute Genauigkeit.
Das Heron-Verfahren (Babylonisches Verfahren)
Dieser Code berechnet die Quadratwurzel einer beliebigen positiven Zahl ohne die eingebaute
Sqr-Funktion. Stattdessen wird das Heron-Verfahren (auch Babylonisches Verfahren) verwendet – ein iterativer Algorithmus, der über 2.000 Jahre alt ist.Der Code
Function MeineWurzel(zahl As Double) As Double ' Quadratwurzel nach dem Heron-Verfahren (Babylonisches Verfahren) ' ohne Verwendung der Sqr-Funktion Dim schaetzung As Double Dim vorher As Double Dim genauigkeit As Double Dim iteration As Integer If zahl < 0 Then Error 5 ' Ungültige Eingabe End If If zahl = 0 Then MeineWurzel = 0 Exit Function End If genauigkeit = 0.0000000001 ' 10 Nachkommastellen schaetzung = zahl / 2 ' Startwert: halbe Eingabezahl iteration = 0 Do vorher = schaetzung ' Heron-Formel: neuer Wert = (alter Wert + zahl / alter Wert) / 2 schaetzung = (schaetzung + zahl / schaetzung) / 2 iteration = iteration + 1 Print "Iteration " & iteration & ": " & Format$(schaetzung, "0.0000000000") Loop Until Abs(schaetzung - vorher) < genauigkeit MeineWurzel = schaetzung End Function
Aufruf-Beispiel
Sub Click(Source As Button) Dim zahl As Double Dim ergebnis As Double zahl = 50 Print "Berechne Wurzel aus " & zahl & " ..." Print "---" ergebnis = MeineWurzel(zahl) Print "---" Print "Ergebnis: " & Format$(ergebnis, "0.0000000000") Print "Kontrolle: " & Format$(ergebnis * ergebnis, "0.0000000000") End Sub
Funktionsweise im Detail
Das Heron-Verfahren basiert auf einer einfachen Idee:
1. Startwert wählen
Wir nehmen
zahl / 2 als erste Schätzung. Der Startwert muss nicht besonders gut sein; das Verfahren konvergiert trotzdem extrem schnell.2. Iterationsformel anwenden
In jeder Runde berechnen wir:
Warum funktioniert das?
- Wenn
x_altzu groß ist, dann istzahl / x_altzu klein – und umgekehrt.
- Der Mittelwert aus beiden liegt daher immer näher an der echten Wurzel.
- Mathematisch handelt es sich um das Newton-Verfahren, angewendet auf die Gleichung $f(x) = x^2 - zahl = 0$.
3. Abbruchbedingung
Sobald sich zwei aufeinanderfolgende Schätzungen um weniger als die gewählte Genauigkeit (
0.0000000001) unterscheiden, wird abgebrochen.Beispiel: Wurzel aus 50
Die echte Wurzel aus 50 ist 7.0710678118…
Iteration | Schätzung | Fehler |
1 | 26.0000000000 | ~18.93 |
2 | 13.9615384615 | ~6.89 |
3 | 8.7731197691 | ~1.70 |
4 | 7.2376726427 | ~0.17 |
5 | 7.0730031544 | ~0.002 |
6 | 7.0710680509 | ~0.0000002 |
7 | 7.0710678119 | ~0.0000000001 |
Nach nur 7 Iterationen hat das Verfahren die Wurzel auf 10 Nachkommastellen genau berechnet.
Wichtige Eigenschaften
- Quadratische Konvergenz – Die Genauigkeit verdoppelt sich pro Schritt. Selbst bei einem schlechten Startwert sind selten mehr als 10 Iterationen nötig.
- Robustheit – Das Verfahren funktioniert für jede positive Zahl, egal wie groß oder klein.
- Historisch – Das Verfahren ist über 2.000 Jahre alt und wurde bereits von den Babyloniern genutzt – daher der Name.