Mathematiker vor: sqrt() mit Hilfe von sin() und atan2() "emulieren"

Gast #4446635
Lesenswert?

Danke, so weit war ich auch schon. ;)

Ich brauche das Ganze, um Platz zu sparen. asin() habe ich z.B. schon 
ersetzt, es hat gleich mal 100 Bytes gebracht...

...mein Gefühl sagt mir auch, dass ich gewisse Grundfunktionen brauche 
und sqrt() dazu gehört und es sich nicht ersetzen lässt. Daher die 
Frage, ob noch einer eine Idee hat. Könnte ja sein...
(es sind wirklich nur mathematische Umformungen gesucht, keine 
Näherungen)
Gast #4446643
Lesenswert?

Karl Kurzschluss schrieb:
> ...mein Gefühl sagt mir auch, dass ich gewisse Grundfunktionen brauche
> und sqrt() dazu gehört und es sich nicht ersetzen lässt.

Man sollte nie seinem Gefühl vertrauen.

Mein Wissen sagt mir, dass es auch allein mit den Operationen + - * / 
geht.

Oder noch einfacher, du brauchst nichts außer der NAND-Funktion!
Persönliche Seite #4446762
Lesenswert?

Karl Kurzschluss schrieb:
> Danke, so weit war ich auch schon. ;)
>
> Ich brauche das Ganze, um Platz zu sparen. asin() habe ich z.B. schon
> ersetzt, es hat gleich mal 100 Bytes gebracht...

...also quasi nix gebracht.

Quadratwurzel ist nicht sooo schwer zu berechnen, und daher würd ich 
eher auf sqrt aufbauen anstatt auf asin.  Beispiel:
  

wobei a(x) analytisch ist mit Konvergenzradius 2 um 0, d.h. du behommst 
damit asin(z) für alle komplexeb z mit |1-z| < 2.

Der Konvergenzradius von a ist zwar 2, aber dennoch würd ich das nicht 
ausreizen weil Potenzreihen am Rand ihres Konvergenzradius schlecht 
konvergieren (hier z.B. für asin(-1)).  Stattdessen würd ich die 
Symmetrie von asin verwenden und den Fehler in der Entwicklung von a 
durch asin(0) nach obiger Formel verwenden.

Eine explizite Darstellung der Taylor-Koeffizienten von a ist mir nicht 
beklannt.
#4446775
Lesenswert?

Karl Kurzschluss schrieb:
> Danke, so weit war ich auch schon. ;)
>
> Ich brauche das Ganze, um Platz zu sparen. asin() habe ich z.B. schon
> ersetzt, es hat gleich mal 100 Bytes gebracht...

Wenn es in Deinem Projekt möglich ist, dann nimm doch einen größeren 
Mikrocontroller mit mehr Speicher.

Ich sag ja nicht dass man Speicherplatz verschwenden soll. Aber diverse 
Stunden Arbeit investieren um ein paar Euro Kosten zu vermeiden - da 
kommt man schnell an den Punkt wo man eher draufzahlt, als das man was 
spart.
Gast #4446814
Lesenswert?

Genau eben weil die C-Lib Näherungen benutzt, will ich keine selbst 
implementieren. Wenn es keine Umformung gibt, dann nehme ich auch 
einfach die Standard-Funktionen, weil ich davon ausgehe, dass die schon 
optimiert sind.
Dass mit asin() 100 Bytes frei wurden, hat mich schon erstaunt. Die kann 
ich gut gebrauchen. Es soll eine weitere Displaysprache in ein 
bestehendes Projekt hinein, das braucht einfach Platz und es müssen die 
vorhandenen Controller weiterverwendet werden.
Gast #4456047
Lesenswert?

>...wie gesagt, keine Näherungen...

Schon anno Tobak haben wir gelernt, dass die Si-Nuss, die Kokkus-Nuss 
und die Erd-Nuss auf unendlichen Reihen basieren.
Da ist nichts mit: "ist gleich" sondern nur mit: "wie genau hätten's 
denn gerne".

Bei den trigometrischen Funktionen kannst Du Dir einiges an Platz (Code) 
sparen, indem Du sie voneinander ableitest. Wie das geht, steht schon in 
deinem, alten Mathematikbuch.

Auch beim Wurzeln schlagen gilt: "wie genau hätte's denn gerne" und 
nicht ein "ist gleich". Sonderfälle natürlich ausgenommen.
Moderator #4456131
Lesenswert?

Johann L. schrieb:
> visitor schrieb:
>> Schau Dir das mal an:
>>
>> http://netstorage.iar.com/SuppDB/Public/SUPPORT/000419/AN-G-002.pdf
>
> Das sind 3 Iterationen Newton-Raphson.  Gähn

Pieter schrieb:
> wie FRAU SQRT berechnen kann zeigt der Anhang.

Auch hier wird das Newton-Raphson-Verfahren genutzt, allerdings mit ein
paar kleinen Verbesserungen:

- Die Wurzelberechnung wird auf das Intervall [1/2, 1) reduziert, indem
  das Argument entsprechend normiert wird -> höhere Genauigkeit

- Es wird ein besserer Startwert (k₁·x + k₂) verwendet -> höhere
  Genauigkeit

- Alle Divisionen werden zu einer einzigen zusammengefasst -> weniger
  Rechenaufwand

Wegen der höheren Genauigkeit liefern schon 2 statt 3 Iterationen ein
brauchbares Ergebnis, was zusätzlich Rechenzeit einspart.

@Mark, Eric und Amateur:

Mit "keine Näherungen" meint Karl einen exakten mathematischen
Ausdruck für sqrt(x), der außer den vier Grundrechenarten nur die
Funktionen sin und atan2 enthält. Dass die numerische Berechnung
dieses Ausdrucks nur näherungsweise erfolgen kann, ist ihm schon klar.

Er möchte aber vermeiden, dass zu den Rundungsfehlern, die in den
verwendeten Bibliotheksfunktionen unvermeidbar entstehen, noch ein
zusätzlicher Fehler durch einen mathematisch nicht exakten
Gesamtausdruck hinzukommt.

Ich glaube aber auch nicht, dass der gesuchte Ausdruck existiert (sonst
hätte ihn sicher Johann schon gefunden).

Allerdings heißt Glauben nicht Wissen :)
#4456155
Lesenswert?

Yalu X. schrieb:
> @Mark, Eric und Amateur:
>
> Mit "keine Näherungen" meint Karl einen exakten /mathematischen/
> Ausdruck für sqrt(x), der außer den vier Grundrechenarten nur die
> Funktionen sin und atan2 enthält. Dass die numerische Berechnung
> dieses Ausdrucks nur näherungsweise erfolgen kann, ist ihm schon klar.
>
> Er möchte aber vermeiden, dass zu den Rundungsfehlern, die in den
> verwendeten Bibliotheksfunktionen unvermeidbar entstehen, noch ein
> zusätzlicher Fehler durch einen mathematisch nicht exakten
> Gesamtausdruck hinzukommt.
>
> Ich glaube aber auch nicht, dass der gesuchte Ausdruck existiert (sonst
> hätte ihn sicher Johann schon gefunden).
>
> Allerdings heißt Glauben nicht Wissen :)

Sicher hast Du Recht.

Im Endeffekt ist ja die Aufgabe hier nicht die, die der Themenersteller 
uns beschrieben hat. Er will (Flash-)Speicher sparen um dort mehr Text 
unterbringen zu können. Eventuell kann man dieses Problem auf völlig 
andere Art lösen.

Je nachdem wie die Texte aufgebaut sind, könnte es Speicherplatz sparen 
die Texte in geeignete Bausteine zu zerlegen und aus diesen größere 
Textmeldungen zusammenzusetzen.

Unter Umständen ist das gegebene Problem unter Einhaltung aller 
gegebenen Randbedingungen auch gar nicht lösbar. Um das beurteilen zu 
können, wissen wir aber zu wenig über das System.

Also alles a Schmarrn, wie der Bayer sagt. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren