Wurzelapproximation

Neue Frage »

Dopap Auf diesen Beitrag antworten »
Wurzelapproximation
Neulich fand ich in meinem mathe/physik Karton den edlen ledergebundenen simplen solaren
Klapptaschenrehner im Scheckkartenformat aus den 80' Jahren wieder.
Lediglich die Wurzeltaste funktionierte nicht mehr.
Eine memorierbare Funktion sollte jetzt Abhilfe schaffen, wofür aber nur Polynome samt Hornerschema infrage kamen.
Ein Approximatios-Polynom z.B eines 4.grades ist dafür aber ziemlich ungeeignet.
Klar, im entscheidenden Intervall von 1 bis 99 kann man auch mit einem ad hoc Schätzwert samt anschließender
Verbesserung nach Newton arbeiten... Die Funktion sollte aber ohne Schätzwert auskommen und Rechenstabenauigkeit haben!

Idee : Bruch von Polynomen mit ganzzahligen Koeffizienten
zum Beispiel

mit den 5 Koeffizienten { A B C b c}.
Mit der Wahl von 5 Interpolationspunkten Danach ist das GS
zu lösen.

Die so numerisch berechneten Koeffizienten sind unhandlich und auch nicht ganzzahlig.
Mit etwas Runden und "Feilen" konnte ich dann W(y) zu



bestimmen, ohne den Gesamtfehler wesentlich erhöht zu haben.
Die Graphen von in einem Koordinatensystem:



man beachte das wohlwollende Verhalten von W(x) ab x>99 sowie die Asymptoden y=24 und x=-6.1.
Dahingegen kann ein Polynom mit seinen "Wellen" einpacken.
Ein evtl. gewünschter anschließender Newton ist schnell getippt:

mit ca. 5 bis 6 gültigen Ziffern

bleibt noch die Frage :
  • wie könnten die optimalen 5 Stützpunkte mit einem Minimum von aussehen?
HAL 9000 Auf diesen Beitrag antworten »

Statt 1,2,5,7,9 mit dieser zu groß scheinenden Lücke zwischen 2 und 5 scheint mir eine Wahl der -Punkte sinnvoller, wo die Differenzenfolge monoton wächst, also z.B. 1,2,4,6,9, zumal ja Kurvenverlauf der Quadrat- bzw. Wurzelfunktion im hinteren Verlauf weniger gekrümmt ist als vorn, und damit einer geringeren Stützstellendichte bedarf - heuristisch betrachtet.

---------------------------------------------------------------------------

Ich hab mal folgende Alternative ausprobiert:

1) Skalieren der Floating-Point-Zahl auf das Intervall :

Das ist relativ einfach, da im Floating-Point-Format der Exponent direkt vorliegt. Wir setzen nun und betrachten statt den Radikand , dann haben wir das gewünschte . Anzumerken ist, dass bei dieser Operation die Mantisse unverändert bleibt, rechentechnisch beschränkt sich das auf ein paar superschnelle einfache Bitschiebereien.

2) Durchführen von nur zwei Newton-Schritten ausgehend von Startwert 1, d.h. und

3) Wieder hochskalieren (wiederum nur eine Exponentenanpassung mit unveränderter Mantisse von ).

code:
1:
2:
3:
4:
5:
6:
7:
double halsqrt(double x)
{
    int f = (ilogb(x) + 1) >> 1;
    x = ldexp(x, -(f << 1));
    double y = ldexp(1+x, -1);
    return ldexp(y + x/y, f-1);
}
Hab mal nachgerechnet: Ergibt für deine Testwerte , und was Rechenoperationen betrifft sehr sparsam: In Floating-Point zwei Additionen und eine Division - der Rest sind nur Additionen,Subtraktionen und Shiftoperationen von Integer-Zahlen (und zwar der Floatingpoint-Exponenten). Und das Verfahren ist nicht auf beschränkt, sondern für den gesamten positiven Wertebereich der Floating-Point-Zahlen geeignet.


P.S.: Kann natürlich sein, dass du in deinem Museumsstück keinen Zugriff auf die Binärdarstellung der Zahlen hast, womöglich verwenden die auch gar nicht das IEEE754-Floatingpoint-Format.
Dopap Auf diesen Beitrag antworten »

nein, das Museumsstück hat nur Grundrechenarten + Wurzel + 1/x und wurde rein
geschäftlich genutzt.
Bitschiebereien kann nur der HP 50g und dort funktioniert die Wurzel noch.


habe jetzt deine Punktliste ausprobiert, was exakt gerechnet zu
und zu führt.
Im Vergleich zu meiner unüberlegten Liste mit verwirrt

Aber egal, meistens wird eh' noch der schnelle Newton angehängt und optisch nicht zu unterscheiden
HAL 9000 Auf diesen Beitrag antworten »
Sich widersprechende Angaben
Was gilt denn nun für deine Orignialfunktion: Das

Zitat:
Original von Dopap
ohne den Gesamtfehler wesentlich erhöht zu haben.

oder das

Zitat:
Original von Dopap
Im Vergleich zu meiner unüberlegten Liste mit

Erstaunt1

----------------------------------------------------------------------------------

Da Vertrauen in so einem Fall dann nicht mehr angebracht ist, habe ich selbst nachgerechnet:

Für bekomme ich heraus.

Das hingegen

Zitat:
Original von Dopap
und zu führt.

kann ich bestätigen.


EDIT: Für stimmt das . Ein doppeltes Forum Kloppe für den Zahlendreher sowie die initial falsche Quadratsummenberechnung.

[attach]58071[/attach]

Um die Güte der Approximation im Bild bewerten zu können, plottet man besser nicht die Wurzel- und die Approximationsfunktion, sondern die Differenz der beiden: deine Approximation (blau) und meine "Bitschieber"-basierte (orange).
Dopap Auf diesen Beitrag antworten »

tut mir leid. Der Zahlendreher liegt wohl an der deutschen Eigentümlichkeit der Endziffern.
Weiterhin konnte ich feststellen, dass mein Programm in der ersten post
am Ende noch eine Wurzel gezogen hatte also unglücklich
und zudem klemmen nach 8 Jahren manche Tasten am Laptop ...

-----------------------------

Informative Grafik !
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Dopap
Der Zahlendreher liegt wohl an der deutschen Eigentümlichkeit der Endziffern.

Originelle Ausrede - sowas muss einem erstmal einfallen. Chapeau! Teufel
 
 
Neue Frage »
Antworten »



Verwandte Themen