Hallo Leute, Ich habe einen Satz an Messwerten, welche ich benutzen will um eine Funktion daraus zu erstellen. Zuerst wollte ich die Lagrange Interpolation zur Funktionsgenerierung benutzen und das hat im Mathematikprogramm Matlab auch zur richtigen Funktion geführt. Als ich dann den Code nach C übersetzt hatte und ich mit dem Simulator "durchgestept" bin hab ich gemerkt das die Variablen zur generierung immer ungenauer wurden (wahrscheinlich Rundungsfehler). Und da bei einem Polynom 7. Grades schon einiges an Rechenoperationen mit teilweise recht großen (und sehr kleinen) Werten zusammenkommen, ist das berechnete Polynom dann eher nutzlos für meine Anwendung. Ich schätze einmal das die µC generell nicht so gut im umgehen mit double Variablen sind oder? Wie würdet ihr an die Sache herangehen? Ich wollte eigentlich keine Lookuptabelle verwenden... Ich habe einmal die Grafik angehängt in der man die zwei Graphen sieht.
Wozu braucht es hier ein Polynom 7.Grades? 2.Grad reicht doch, so wie das aussieht. Gruß Andreas
Deine Graphik zeigt ganz klar, dass der Grad des Polynoms viel zu hoch ist. > Ich schätze einmal das die µC generell nicht so gut im umgehen mit double Variablen sind oder? Da du AVR Studio angesprochen hast: Im GCC hast du keine double. Es gibt dort nur float mit 5-6 signifikanten Stellen (AChtung: signifikant(!), nicht Nachkommastellen).
Gib mir drei Punkte und ich fitte dir einen Elefanten ... Vielleicht kann man ja was über den physikalischen Prozess aussagen, der den Daten zu Grunde liegt? Dann könnte man nämlich vielleicht mit dem potentiell recht einfachen adäquaten Modell fitten und braucht nicht einfach ein Polynom draufschmeißen ...
Gefühlt 2-3 ordnung sollte reichen und dann bei der Bereichnung nicht y=ax³+bx²+cx+d sondern y= ((ax+b)x+c)x+d programmieren
:
Bearbeitet durch User
Danke für das schnelle antworten c: Ich hab mir zuerst gedacht je höher der grad desto genauer... Aber jetzt wo ihr es mir vor Augen führt ist es natürlich offensichtlich das ich dadurch viel weniger Rechnungen und Rundungsfehler aufsammle Karl Heinz schrieb: > Im GCC hast du keine double. haben µC generell nur float? Ich werd mal überprüfen ob mit niedrigeren Graden auch passende Graphen rauskommen John schrieb: > Vielleicht kann man ja was über den physikalischen Prozess aussagen, der > den Daten zu Grunde liegt? Ich bestimme die Windgeschwindigkeit anhand einer gemessenen Spannung. Mit der Zeit wird allerdings das ganze in einen anderen Bereich driften und dann soll es möglich sein das ganze zu eichen, dafür sollte die Funktion verändert werden können
David Firehill schrieb: > Danke für das schnelle antworten c: > > Ich hab mir zuerst gedacht je höher der grad desto genauer... Je höher der Grad, desto mehr Kurven (= Wechsel der Krümmung) kann ein Polynom haben. Dein im AVR errechnetes Polynom zeigt das sehr deutlich. Nichts als 'Richtungsänderungen' wo im Original mit ein bischen Phantasie einfach nur ein Abschnitt einer Parabel zu erkennen ist. > Karl Heinz schrieb: >> Im GCC hast du keine double. > > haben µC generell nur float? Nein. Nicht generell. Beim GCC hat man es nur vor langer Zeit als nicht sehr wichtig erachtet, 8 Byte double einzuführen, weil das meiste sowieso nur mit Integern (also ganzen Zahlen) gemacht wird. > Mit der Zeit wird allerdings das ganze in einen anderen Bereich driften > und dann soll es möglich sein das ganze zu eichen, dafür sollte die > Funktion verändert werden können Nitpicking (daher nicht falsch verstehen). Du darfst nicht 'eichen'. Das darf nur das Eichamt. Du darfst kalibrieren. > dafür sollte die Funktion verändert werden können Dafür gibts dann auch noch das Werkzeug der Abschnittweisen Interpolation. D.h. anstatt einer einzigen Kurve für alles gibt es mehrere Kurven. Wenn von deinem Sensor zb Spannungen zwischen 0 und 10V kommen können, dann gibt es eine Kurve, die den Zusammenhang beschreibt, wenn die Spannung zwischen 0 und 1V liegt, eine für 1V bis 2V, usw. Der Clou an der Sache: diese Kurven können sehr oft einfach nur Geraden sein, ohne dass man einen groben Fehler ins System einführt. Und sie sind simpel zu berechnen und zu kalibrieren.
:
Bearbeitet durch User
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.