Funktion aus Messwerten generieren

OP (Firma: Student) #4169410
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
#4169454
Lesenswert?
• ▲
▼
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).
Gast #4169461
Lesenswert?
• ▲
▼
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 ...
OP (Firma: Student) #4169502
Lesenswert?
• ▲
▼
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
#4169507
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.