Forum: Mikrocontroller und Digitale Elektronik Umkehrfunktion von Sinus


von Georg (Gast)


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!

von Sven B. (scummos)


Lesenswert?

Die Umkehrfunktion vom sin ist der asin, aber das hilft dir wegen dem x 
hier nicht viel. Ich glaube nicht dass die Gleichung analytisch lösbar 
ist. Mach eine Tabelle oder verwende ein numerisches Verfahren.

von Helfer (Gast)


Lesenswert?

Stelle die Funktion nach x um. Ist dies nicht möglich so gibt es eine 
Umkehrfunktion.. Du hast y(x) und möchtest x(y) haben. The stage is 
yours!

von Sven B. (scummos)


Lesenswert?

Helfer schrieb:
> Stelle die Funktion nach x um.
Das geht halt nicht.

> Ist dies nicht möglich so gibt es eine
> Umkehrfunktion.. Du hast y(x) und möchtest x(y) haben.
Die gibt es natürlich weil die Funktion injektiv ist aber es gibt keinen 
analytischen Ausdruck für diese Funktion.

von Ralf G. (ralg)


Lesenswert?

Georg schrieb:
> y=0.5*x - 0.5*sin(x)   im Bereich von 0 bis Pi

Wie genau?

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Ich würde mit Excel C-Code für 'ne Lookup-Tabelle generieren. Falls man 
keinen Bock auf Mathe hat, geht vielleicht auch "Zielwertsuche".

PS: Schon mal nach "Umkehrfunktion sin (x) + x" gesucht? Ich habe 
spontan nix fertiges gefunden.

: Bearbeitet durch User
von Georg (Gast)


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...

von Frank (Gast)


Lesenswert?

Schonmal Wolfram Alpha gefragt ? (Für sowas immer gut!)

https://www.wolframalpha.com/input/?i=inverseFunction(0.5*x+-+0.5*sin(x)+)



---nur leider:
 (no result found in terms of standard mathematical functions)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

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...

von Possetitjel (Gast)


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.

von Possetitjel (Gast)


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.

von Sven B. (scummos)


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.

von Georg (Gast)


Lesenswert?

Die Idee mit Stützstellen und der linearen Interpolation dazwischen 
finde ich super!!! Vielen Dank dafür. So werde ich es machen!!!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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

: Bearbeitet durch User
von Wolfgang (Gast)


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.

von Simpel (Gast)


Angehängte Dateien:

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.

von Simpel (Gast)


Angehängte Dateien:

Lesenswert?

.... eigentliche Grafik vergessen... tsts.

von Sven B. (scummos)


Lesenswert?

Es gibt keine geschlossene Lösung für diese Gleichung. Weiß ich. ;)

: Bearbeitet durch User
von 1234567890 (Gast)


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.

von Johann L. (gjlayde) Benutzerseite


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 :-)

von Joe F. (easylife)


Lesenswert?

Welchen Zweck hat denn diese Funktion?
Vielleicht gibt es ja eine andere, umkehrbare Funktion, die den gleichen 
Zweck erfüllt?

von Johann L. (gjlayde) Benutzerseite


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     "

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Georg schrieb:

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

Tabelle plus Interpolation? Und nicht vergessen:
Auflösung ist nicht gleich Genauigkeit.

von Johann L. (gjlayde) Benutzerseite


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:

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Cooles Forum. ;-) Seit dem 24.02.2016 hat man vom TO "Georg (Gast)" nix 
mehr gehört, aber über Google kommt man über "Umkehrfunktion von Sinus" 
trotzdem nicht hierher, obwohl sich Johann L. (danke) so viel Mühe 
gegeben hat.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.