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.
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!
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.
:
Bearbeitet durch User
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...
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)
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.
Die Idee mit Stützstellen und der linearen Interpolation dazwischen finde ich super!!! Vielen Dank dafür. So werde ich es machen!!!
Ein Problem ist dass die Umkehrfunktion für x=y=0 eine Singularität (Verzweigungspunkt) hat:
divergiert für x = 0
:
Bearbeitet durch User
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.
Es gibt keine geschlossene Lösung für diese Gleichung. Weiß ich. ;)
:
Bearbeitet durch User
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.
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 :-)
Welchen Zweck hat denn diese Funktion? Vielleicht gibt es ja eine andere, umkehrbare Funktion, die den gleichen Zweck erfüllt?
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
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.
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:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.