LotusScript: Wurzelziehen ohne Nutzung der SQR Funktion
madicon.de/Tipps & Tricks/LotusScript: Wurzelziehen ohne Nutzung der SQR Funktion

LotusScript: Wurzelziehen ohne Nutzung der SQR Funktion

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:
xneu=xalt+zahlxalt2x_{neu} = \frac{x_{alt} + \frac{zahl}{x_{alt}}}{2}
Warum funktioniert das?
  • Wenn x_alt zu groß ist, dann ist zahl / x_alt zu 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.