Umkehrfunktion von Sinus

Gast #4481976
Lesenswert?

Hallo zusammen,

für mein Roboterprojekt muss ich in meinem Mikrocontroller eine 
Berechnung durchführen, bei welcher ich die Umkehrfunktion von folgender 
Funktion benötige:

y=0.5*x - 0.5*sin(x)   im Bereich von 0 bis Pi

Leider schaffe ich es nicht die Umkehrfunktion zu finden. Ist das 
überhaupt möglich? Ich habe mich soweit durchgelesen, dass irgendetwas 
mit arcsin rauskommen sollte und dann verstehe ich leider nichts mehr.

Kann mir bitte jemand auf die Sprünge helfen?

Danke!
Gast #4482093
Lesenswert?

Danke schon mal für die ganzen Antworten. An eine Tabelle habe ich auch 
schon gedacht. Aber ich benötige eine große Auflösung, sodass die 
Tabelle sehr groß werden würde und viel Speicher verbraucht. Irgendwie 
muss das doch gehen. Ich versuch es weiter...
Moderator (Firma: Titel) Persönliche Seite #4482103
Lesenswert?

Georg schrieb:
> Aber ich benötige eine große Auflösung
Gibts das "große" auch in Zahlen? Wie genau willst du rechnen? Oder 
besser: wie genau musst du rechnen?

So wie ich das sehe, kann man bei dieser Funktionsehr gut mit 
Stützpunkten und linearer Interpolation rechnen. Dann muss die Tabelle 
nicht 64k Stützpunkte für 16 Bit Genauigkeit haben...
Angehängte Dateien:
Gast #4482105
Lesenswert?

Georg schrieb:

> An eine Tabelle habe ich auch schon gedacht. Aber ich
> benötige eine große Auflösung, sodass die Tabelle sehr
> groß werden würde und viel Speicher verbraucht.

Falsche Taktik.

Nochmal kurz zum Urschleim zurück: Die rein mathematische
Lösung Deines Problems ist ganz sicher über eine Reihen-
entwicklung (Taylor-Reihe) machbar.

Deine Umkehrfunktion käme dort auch in Form einer Potenzreihe
heraus - aber das würde Dir nicht viel nützen, weil es recht
langatmig sein kann, jedesmal x Glieder dieser Potenzreihe
auszurechnen und zu addieren.

Ich würde daher die Hau-Ruck-Lösung für den harmonischen
Grobschmied bevorzugen: (Wenige) Stützstellen tabellieren
und zwischen den Stützstellen interpolieren.
Die Idee läuft - anders formuliert - darauf hinaus, Deine
Umkehrfunktion bereichsweise durch Geraden bzw. durch
Parabeln 3. Grades anzunähern.
Gast #4482111
Lesenswert?

Lothar M. schrieb:

> So wie ich das sehe, kann man bei dieser Funktionsehr
> gut mit Stützpunkten und linearer Interpolation rechnen.

Auf jeden Fall.

Nur vorher dran denken, x und y zu vertauschen - wir reden
ja von der Umkehrfunktion... :)

Eigentlich schreit das nach irgendwas Elegantem mit einer
Wurzel, aber ich bin mathematisch zu blöd, um das irgendwie
zusammenzubasteln... irgendwas der Art "Wurzel (ax+b)" mit
bereichsweise konstantem a und b.
#4482117
Lesenswert?

Possetitjel schrieb:
> Georg schrieb:
> Nochmal kurz zum Urschleim zurück: Die rein mathematische
> Lösung Deines Problems ist ganz sicher über eine Reihen-
> entwicklung (Taylor-Reihe) machbar.
>
> Deine Umkehrfunktion käme dort auch in Form einer Potenzreihe
> heraus - aber das würde Dir nicht viel nützen, weil es recht
> langatmig sein kann, jedesmal x Glieder dieser Potenzreihe
> auszurechnen und zu addieren.
Die Potenzreihe wird aber vermutlich nicht global konvergieren. 
Mindestens mal nicht in 0, da ist die Umkehrfunktion nämlich glaube ich 
nicht stetig. Außerdem konvergieren Potenzreihen typischerweise sehr 
langsam wenn man weit vom Entwicklungspunkt entfernt ist, sodass man 
mindestens mehrere Potenzreihen braucht. Ich halte diese Strategie in 
der gebenen Situation für generell ungeeignet.

> Ich würde daher die Hau-Ruck-Lösung für den harmonischen
> Grobschmied bevorzugen: (Wenige) Stützstellen tabellieren
> und zwischen den Stützstellen interpolieren.
> Die Idee läuft - anders formuliert - darauf hinaus, Deine
> Umkehrfunktion bereichsweise durch Geraden bzw. durch
> Parabeln 3. Grades anzunähern.
Also eine Tabelle.
Gast #4482227
Lesenswert?

Possetitjel schrieb:
> Die Idee läuft - anders formuliert - darauf hinaus, Deine
> Umkehrfunktion bereichsweise durch Geraden bzw. durch
> Parabeln 3. Grades anzunähern.

Kubische Splines geben dafür meist hübsche Kurvenverläufe ;-)

Georg schrieb:
> in meinem Mikrocontroller

Bei der Vorgehensweise spielt natürlich auch eine Rolle was "dein 
Mikrocontoller" für ein Kollege ist, insbesondere über welche 
Floatingpoint Fähigkeiten er verfügt, jedenfalls wenn er öfter einen 
Wert bestimmen muss.
Gast #4482269
Lesenswert?

Der Graph y=(x-sin(x))/2 besitzt am Schnittpunkt mit dem sin-Graphen die 
Eigenschaft x=3*sin(x).

Desweiteren liegen o.g. Schnittpunkte:
Graph y=(x-sin(x)) .....>  x=2*sin(x)
Graph y=(x-sin(x))/3 ...>  x=4*sin(x)
Graph y=(x-sin(x))/4 ...>  x=5*sin(x)    etc...
Das nur mal so als Auffälligkeit. Hilft bei der Lösung hier nicht 
weiter.


Der Graph y=(x-sin(x))/2 ähnelt jedoch dem einer rotierten und 
x-verschobenen arccos-Funktion.

Wenn man diese an ihrem Schnittpunkt mit der y-Achse um 90° gegen den 
Uhrezeigersin dreht und dann am x-Nullpunkt ausrichtet... Müsste man mal 
zumindest graphisch vorab auf Deckungsgleichheit prüfen und dann formell 
umstellen und numerisch prüfen.  Vielleicht gibt's ja doch eine Formel.
Angehängte Dateien:
Gast #4482301
Lesenswert?

Sven B. schrieb:
> Es gibt keine geschlossene Lösung für diese Gleichung. Weiß ich. ;)

Full Ack!

Die kann es auc nicht geben. Das sieht man schon auf den ersten Blick, 
wenn man x und y vertauscht (weiter oben schon erwähnt) und sich einfach 
mal das Ergebnis zeichnet.

Nimm doch einfach ein x-beliebiges Näherungsverfahren und nähere deine 
Lösung auf beliebige Genauigkeit an. Dann brauchst du nur noch 
Rechenzeit und keinen Speicher für riesige Tabellen. Mit dem 
Näherungsverfahren werden nur die Werte ausgerechnte, die man 
tatsächlich braucht und das mit beinahe beliebiger Genauigkeit. Es ist 
nur wichtig, dass das Verfahren konvergiert. Dazu ist es manchmal 
notwendig für verschiedene Abschnitte der Funktion verschiedene 
Startwerte zu verwenden.
Persönliche Seite #4482335
Lesenswert?

Johann L. schrieb:
> Ein Problem ist dass die Umkehrfunktion für x=y=0 eine Singularität
> (Verzweigungspunkt) hat:
>
> divergiert für x = 0

...die Singularität in (0,0) kann vermieden werden, wenn stattdessen 
folgende Funktion betrachtet wird:
 
Dieses f stimmt gut mit einer Ursprungsgeraden überein; die 
entsprechende Umkehrfunktion ist also gut katalogisierbar :-)
Persönliche Seite #4482455
Lesenswert?

Möglich ist auch eine Iteration wie z.B:
 
Vorteil:  Einfach auszuwerten
Nachteil: Funktioniert nicht für y=0
          Funktioniert nicht gut für kleine y
          Nur lineare Konvergenz

______________________________________

 
Vorteil:  Quadratische Konvergenz
Nachteil: Funktioniert nicht für y=0
          Funktioniert nicht gut für kleine y
          Komplizierter auszuwerten als 1. Iteration


Mit der 2. Iteration findet man z.B. mit einer Genauigkeit von 1e-8 
dass:

f(1.083692) = 0.1  in 6 Iterationen
f(1.934563) = 0.5  in 5     "
f(2.554196) = 1.0  in 4     "
f(3.070767) = 1.5  in 2     "
Persönliche Seite #4490920
Lesenswert?

Johann L. schrieb:
>
> Vorteil:  Quadratische Konvergenz
> Nachteil: Funktioniert nicht für y=0
>           Funktioniert nicht gut für kleine y

Das Problem für kleine y lässt sich mit einem anderen Startwert lösen:

Damit erhält man ein effektives numerisches Verfahren zur Invertierung 
von f(x) = (x - sin x)/2.  Offenbar erlaubt f eine Darstellung der 
Gestalt
mit einer rationalen Potenzreihe g(x).  Die Koeffizienten von g erhält 
man durch Ensetzung von g in f und Koeffizientenvergleich:
Indem man dann x durch die Kubikwurzel von 12x ersetzt ergibt sich eine 
Entwicklung für die Umkehrfunktion von f:

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