mikrocontroller.net

Forum: Projekte & Code PolynomMaker - Funktion für nichtlineare Bauelemente finden


Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir heute noch ein Tool erstellt und möchte es euch nicht 
vorenthalten, vieleicht kann es der ein oder andere gebrauchen bei 
Basteleien oder der Arbeit.

Anwendung: Für nichtlineare Bauteile wie NTC's usw. oder sonstige 
allgemeine Kurvenverläufe (auch z.B. Motorkennlinien) ist es meist 
schwierig eine passende mathematische Funktion für die Implementation in 
Microprozessoren zu finden. Meist behilft man sich mit Wertetabellen, 
was aber oft umständlich ist.
Mein Tool erstellt aus mehr oder weniger Stützstellen (die man gemessen 
hat oder kennt) eine passende Funktion mit korrekten Koeffizienten. 
Diese lässt sich nun anstelle der Wertetabellen in das MC-Programm 
übertragen.
Es kann aus 6 Funktionsmöglichkeiten ausgewählt werden, wobei die meist 
am besten passende die Polynom-Funktion mit wählbarer Ordnung ist.
Die Grafik ist mit der Maus verschiebbar (Achsen laufen mit).
Das Programm ist portabel und benötigt keine Installationsroutinen.

Viel Spass damit.

: Verschoben durch Moderator
Autor: Karl H. (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit dieses Tool nicht in den Tiefen des Forums verschwindet, 
verschiebe ich das mal in die Codesammlung

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr schönes Tool, Danke!
Mit online-access kann man mal http://zunzun.com/ ausprobieren; dabei 
werden die Daten gegen eine riesige Liste von Funktionen gefittet und 
die besten angezeigt.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geniales Tool, es nimmt einem gut Arbeit ab beim "nachbauen" von 
Kennlinien.

@Albert: Vielen Dank dafür!

Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dennis

Freut mich, dass Dir mein Tool nützlich ist :)

: Bearbeitet durch User
Autor: ... (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Eine Spline-Funktion oder ein Polynom n-ter Ordnung konnte man
schon mit den Matrixfunktionen eines Sharp PC1403H im letzten
Jahrtausend ausrechnen.

Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
... schrieb:
> Eine Spline-Funktion oder ein Polynom n-ter Ordnung konnte man
> schon mit den Matrixfunktionen eines Sharp PC1403H im letzten
> Jahrtausend ausrechnen.

Du bist ja ein ganz Pfiffiger!
Ob das dann auch ein Hobbybastler könnte bleibt eher dahin gestellt.
Und genau für diese Klientel ist die Software gedacht.
So Schlaumeier wie Du packen da natürlich ihre teuer erworbenen Mathe 
Kenntnisse und den alten Sharp Rechner oder MatLab aus.

: Bearbeitet durch User
Autor: Gibts N. (schneeblau)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du die Ordnung der möglichen Polynome erhöhen?

Vielleicht in den Optionen, ich würde gerne auch mal extreme Grenzen 
austesten und meinen Rechner ordentlich quälen;) Am besten nach oben 
keine Grenze und nach der Berechnung gleich noch die Bearbeitungszeit 
einblenden..:)

Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts Ne schrieb:
> Kannst du die Ordnung der möglichen Polynome erhöhen?

Ja, das geht alles.
Allerdings nur um des Interesses an Rechenzeiten wegen eher nicht. Das 
Mehr an Kommastellen im Ergebnis bringt in der Praxis mit MC's wohl 
wenig und lohnt den Aufwand für mich nicht.

Und zur Zeit bin ich mit meinem anderen Projekt hier beschäftigt: 
Beitrag "Projekt: Virtuelle Instrumente an serielle Schnittstelle"

: Bearbeitet durch User
Autor: Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das Programm eben mal ausprobiert, halte aber die Ergebnisse 
nicht für plausibel. Für meine Testdaten sind bei der 
Polynom-Approximation immer die höchsten 1-2 Koeffizienten Null. 
Angeblich erreiche ich mit einem Polynom 5. Ordnung eine Anpassung von 
1.0000. Wenn ich damit in Excel auf die Ausgangsdaten zurück rechnen 
will läuft die Funktion aber deutlich weg.

Hier mal meine Testdaten:
X     Y
 0    0
 0,4  0,72
 1    1,74
 4    5,68
10   11,78
20   21,07
30   30,0
40   38,93
50   48,22
56   54,32
59   58,26
59,6 59,28
60   60,0

Mit freundlichen Grüßen
Thorsten Ostermann

Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thorsten,
das liegt wahrscheinlich daran, dass ich die Nachkommastellen der 
Koeffizienten auf 3 Stellen begrenzt habe, damit die Anzeige nicht so 
viel Platz einnimmt. Das war wohl ein Fehler und schadet offensihtlich 
der Genauigkeit :)
Ich werde mir das mal in den nächsten Tagen in Ruhe anschauen.
Gruss
Ulrich Albert

P.S.
Ich habe gesehen, dass Du dich hier auch oft mit Schrittmotoren befasst. 
Ich bastele da auch gerade rum und würde gerne Deine Meinung hierzu 
hören:
Beitrag "Stepper Motor / CNC Windows-Frontend für GRBL mit ATMega 328"
Ist das sinnig oder reichen die verfügbaren Tools aus?

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den csv Imnport noch realisierst wird das tool tauglich..bis 
dahin muss man weiter scilab nutzen.

Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei neue Version PolynomMaker 0.6

Change Log
----------
Koeffizienten werden jetzt mit 6 anstatt 3 Nachkommastellen angezeigt.


ich schrieb:
> Wenn du den csv Imnport noch realisierst wird das tool tauglich..bis
> dahin muss man weiter scilab nutzen.

csv/txt - Import werde ich demnächst bei Gelegenheit hinzufügen.

: Bearbeitet durch User
Autor: Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei neue Version PolynomMaker 0.7

Change Log
----------

csv / txt - File-Import implementiert (Semikolon als Separator).

Koeffizienten jetzt mit 7 anstatt 6 Nachkommastellen.

Homepage:
http://www.serialcominstruments.com/

: Bearbeitet durch User
Autor: M. W. (elektrowagi78) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehtes auch als Fi mit einem höheren Polynomgrad als 8?

Autor: gys (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich fände es nicht schlecht, wenn man Grafiken als Hintergrund laden 
kann, also eine Kurve aus einem Datenblatt. Um dann eine neue Kurve 
drüber zu legen.

Autor: M. W. (elektrowagi78) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Idee. Dann aber bitte mit hohem Zoom und korrigierbaren Punkten.

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gys schrieb:
> Ich fände es nicht schlecht, wenn man Grafiken als Hintergrund laden
> kann, also eine Kurve aus einem Datenblatt. Um dann eine neue Kurve
> drüber zu legen.

Fänd ich auch sehr gut!

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> Gehtes auch als Fi mit einem höheren Polynomgrad als 8?

Wenn ein Polynom 8ten Grades nicht reicht, ist ein Polynom als Modell 
für den Zusammenhang nicht geeignet.

Autor: Oliver K. (oliver_k480)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die ersten drei bis vier Werte sind annähernd genau, dann läuft das 
Ergebnis extrem weg. Woran liegt das? An den noch zu geringen 
Nachkommastellen?

Autor: Egon D. (egon_d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver K. schrieb:

> Die ersten drei bis vier Werte sind annähernd genau,
> dann läuft das Ergebnis extrem weg. Woran liegt das?
> An den noch zu geringen Nachkommastellen?

Das ist gut möglich.

Zwar hat k5 sieben Nachkommastellen, aber nur eine
(EINE!) geltende Ziffer. Das ist ziemlich sicher zu
wenig.

Außerdem ist es in der Regel günstig, Polynomen nach
dem HORNER-Schema auszuwerten:

y = ((((k5*x+k4)*x+k3)*x+k2)*x+k1)*x+k0

Man vermeidet damit extreme Zahlen, wie sie z.B. bei
k5*x^5 auftreten können.

Autor: Helmut S. (helmuts)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Polynommaker gibt zu wenig Stellen aus. Du benötigts mindestens 2 
Stellen mehr für die Koeffizienten. Damit ist eine Berechnung mit 
"double" Pflicht.

Mach das einfach mit dem kostenlosen Matheprogramm Octave.

>> format long

>> x=[0,10,20,30,40,50,60,70,80,90]
x =    0   10   20   30   40   50   60   70   80   90

>> y=[0,-4,-10,-19,-29,-37,-44,-53,-70,-102]
y =     0    -4   -10   -19   -29   -37   -44   -53   -70  -102

>> p=polyfit(x,y,5)
p =
 Columns 1 through 4:
  -6.923076923076858e-08   8.088578088577917e-06  -6.631701631700006e-05 
-2.012820512820581e-02
 Columns 5 and 6:
  -1.388764568764448e-01  -1.300699300699920e-01

>> z=polyval(p,x)
z =
 Columns 1 through 4:
  -1.300699300699920e-01  -3.524009324009318e+00  -1.041678321678320e+01 
-1.933286713286713e+01
 Columns 5 through 8:
  -2.851701631701631e+01  -3.676503496503496e+01  -4.425454545454544e+01 
-5.337575757575757e+01
 Columns 9 and 10:
  -6.956223776223779e+01  -1.021216783216783e+02

>> plot(x,y)
>> hold on
>> plot(x,z)
>> grid
>

: Bearbeitet durch User
Autor: Egon D. (egon_d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helmut S. schrieb:

> Der Polynommaker gibt zu wenig Stellen aus. Du
> benötigts mindestens 2 Stellen mehr für die
> Koeffizienten.

Ja.


> Damit ist eine Berechnung mit "double" Pflicht.

Nein. 0.000000123456 ist problemlos mit einfacher
Genauigkeit darstellbar. Das ist ja gerade der Witz
an Fließkommazahlen, dass die Zahl der Nachkommastellen
und die Zahl der geltenden Ziffern in Grenzen
voneinander unabhängig sind.

Autor: Oliver K. (oliver_k480)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für die zahl- und hilfreichen Antworten!
Habe gestern Abend noch eine Alternative im Netz gefunden, die mir 
genauere Ergebnisse lieferte:
https://arachnoid.com/polysolve/

0  0
10  -4
20  -10
30  -19
40  -29
50  -37
60  -44
70  -53
80  -70
90  -102

Mode: normal x,y analysis
Polynomial degree 5, 10 x,y data pairs.
Correlation coefficient (r^2) = 0.9998663304441232
Standard error = 0.3919350119765473
Coefficient output form: simple list:

  -1.3006993007066064e-001
  -1.3887645687550687e-001
  -2.0128205128297362e-002
  -6.6317016314043197e-005
   8.0885780885395550e-006
  -6.9230769230595802e-008

Autor: Mario H. (rf-messkopf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helmut S. schrieb:
> Mach das einfach mit dem kostenlosen Matheprogramm Octave.

Eine weitere und sehr mächtige Alternative ist die fit-Funktion von 
gnuplot. Damit kann man bis zu zwölf Parameter in beliebigen 
Funktionsausdrücken an gegebene Daten fitten. Mit ein paar Workarounds 
kann man damit sogar komplexwertige Funktionen fitten. Die fit-Funktion 
beruht auf dem Marquardt-Levenberg-Algorithmus. Plotten des Ergebnisses 
geht mit gnuplot natürlich auch.

Autor: Oliver Kraus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Albert M. schrieb:
> Ich habe mir heute noch ein Tool erstellt und möchte es euch nicht
> vorenthalten

klappt das auch mit Lottozahlen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.