[HERMITE SPLINE] Interpolation mit bekannten Ableitungen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Z18Aplha
User
Beiträge: 1
Registriert: Dienstag 5. März 2019, 13:07

Hallo liebe Community,

ich arbeite derzeit an einem etwas größerem Projekt. Genauer ist es ein Fahrzeugsimulator in 2D.
Input: Liste mit Wegpunkten (viele), die zu einer bestimmten Zeit passiert werden soll
Output: Animation eines Fahrzeugs (von oben, also ein Rechteck), wie es die Wegpunkte passiert. Am Startpunkt steht es und am letzten Punkt soll es stehen bleiben.
Ansatz: Diverse Verarbeitungsschritte erzeugen für mich 3 Listen. Jeweils eine Liste mit x und y Koordinaten (sortiert nach der Zeit, wann sie duchfahren werden sollen) und eine t-Liste, die die passenden Zeiten meiner Koordinaten enthält. Die Listen sind richtig, das konnte ich mehrfach bestätigen.
Mein derzeitiger Ansatz funktioniert einigermaßen gut (quick and dirty). Ich habe einfach die interp1d-Funktion von scipy genutzt und jeweils x und y mit t interpoliert. Dieses Funktion generiert aus zwei eingegebenen Listen einen B-Spline. [ACHTUNG MATHE!] Das zu erwähnen ist wichtig, weil ein B-Spline die Eigenschaften hat, dass am Start- und Endpunkt die zweite Ableitung auf 0 gesetzt wird (Wendepunkt). Da es sich bei meinen Interpolationen um Weg-Zeit Zusammenhänge handelt, ist die zweite Ableitung meiner Funktion die Beschleunigung. So weit so gut. Allerdings ist die erste Ableitung, also die Geschwindigkeit viel wichtiger. Denn diese ist durch die Bedingung des B-Splines (meistens) am Start- und Endpunkt maximal und das geht gar nicht. Wie oben beschrieben, muss das Auto aus dem Stand losfahren und am Ende wieder anhalten. ein B-Spline erzeugt zwar eine schöne Kurve, jedoch muss ich viel tricksen, um es für meine Anwendung zu verwenden.
Aus diesem Grund habe ich meinen Start und Endpunkt 10 mal wiederholt (mit jeweils sehr kurzen zeitlichen Abständen). Das sorgt dafür, dass zumindest die Animation gut aussieht, die Diagramme der Verläufe (bei näherem hinsehen) allerdings nicht schön sind. Da es sich hierbei um ein wissenschaftliches Programm handeln soll, kann ich das nicht so stehen lassen. Daher...
Mein Problem: Ich möchte gerne eine Funktion finden, die all meine Wünsche beachtet (erste Ableitung am Start-/Endpunkt = 0, glatte Kurven, schnelle Berechnung). In der Mathematik wird sowas häufig als "Hermite Interpolation" bezeichnet. Es gibt auch einige Funktionen, jedoch kann ich keine dieser Funktionen in meinem Programm verwenden.
Ich bin auf scipy.inteprolate.PiecewisePolynomial gestoßen, leider habe ich das Problem, dass die Zeile

Code: Alles auswählen

from scipy.interpolate import PiecewisePolynomial
in PyCharm zu einer Fehlermeldung führt. Vielleicht kennt ja jemand meinen Fehler "Cannot find reference 'PiecewisePolynomial' in '__init__.py'" und kann mir helfen.

Vielen Dank
Z18Aplha
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist vor drei Jahren entfernt worden: https://github.com/scipy/scipy/commit/e ... 48a747aee5
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Weg-Zeit-Zusammenhang ist doch voellig losgeloest von deinen Splines. Die Ableitungen beziehen sich auf die Kurven selbst. Jede Autobahn ist dieser Tage ein Klothoide, aber ob du nun auf der Autobahnauffahrt eine Vollbremsung hinlegst oder nicht hat doch damit nix zu tun.

Du musst doch nur fuer ein gegebenes t bestimmen, in welchem Intervall deiner Wegpunkte du dich befindest, oder nicht? Und da ggf. linear interpolieren. Die in den Daten beschriebene implizite Beschleunigung und Geschwindigkeit wird ja davon nicht beruehrt.
Antworten