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!
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.
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.
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.
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...
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...
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.
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.
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.
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.
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.
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.
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 "
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.
> 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:
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.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.