Newton-Iteration für Kubikwurzel ohne Division


8

Es ist ein ziemlich bekannter Trick, um eine Division bei der Berechnung von Quadratwurzeln zu vermeiden, um die Newtonsche Methode auf das Finden von anzuwenden1/.x , und wahrscheinlich besser bekannt, wenn man die Newtonsche Methode verwendet, um Kehrwerte ohne Division zu finden .

Bei der Rettung eines StackOverflow-Threads, der die Newton-Iteration für die Kubikwurzel effizient aus der Link-Fäule aussetzt, kam mir der Gedanke, dass auch eine teilungsfreie Iteration für Kubikwurzeln möglich sein sollte.

Zum Beispiel, wenn wir lösen würden:

x- -3=ein2

dann ist und . Die Newton-Iteration für die obige Gleichung lautet einfach:x=ein- -2/.3ein3=einx

xn+1=xn- -xn- -3- -ein2- -3xn- -4=43xn- -13ein2xn4

Auch hier vermeiden wir Divisionsoperationen, zumindest wenn die Bruchkonstanten für FP-Multiplikationen vorab ausgewertet werden.

So etwas ist möglich, aber ich habe bei meiner (zugegebenermaßen flachen) Suche im Web keine spezifische Diskussion über solche Methoden gefunden. Genauer gesagt, ich vermute, dass eine kluge Person bereits eine bessere Idee entdeckt hat und dass einer von Ihnen geschätzten Kollegen sie gesehen oder durchdacht hat.

Antworten:


8

Kubikwurzeln sind bei weitem nicht so wichtig wie Quadratwurzeln (z. B. zum Normalisieren von Vektoren), weshalb sie möglicherweise viel weniger diskutiert werden.

Wenn Sie die Newtonsche Methode auf anwenden, erhalten Sie im Allgemeinen die Iteration ( 1 - α - 1 ) x + βxα- -β Sie müssen also nur die Gleichung so auswählen, dassαeine negative ganze Zahl ist. Es sind nicht nur Würfel und Quadratwurzeln, dies funktioniert auch für andere rationale Kräfte.

(1- -α- -1)x+βαx1- -α,
α

Ihr Schema benötigt nur 7 Iterationen, um im Intervall a [ 1 zur doppelten Genauigkeit zu konvergierenausgehend von der konstanten Anfangsschätzung1:ein[12,1]]1

Geben Sie hier die Bildbeschreibung ein

Eine weitere interessante Sache ist, was vorhandene Bibliotheken implementieren:

  • MPFR erstellt Kubikwurzeln mit ganzzahligen Kubikwurzeln ( http://www.mpfr.org/algo.html , um Seite 36).
  • math/special_functions/cbrt.hpp
    xn+1=xn2b+xn3b+2xn3.
    20div{s,p}{s,d}

ein- -2/.313x3- -ein[12,1]]


[1/.8,1]]

321/.3[12,1]]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.