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 User
Damit dieses Tool nicht in den Tiefen des Forums verschwindet, verschiebe ich das mal in die Codesammlung
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.
Geniales Tool, es nimmt einem gut Arbeit ab beim "nachbauen" von Kennlinien. @Albert: Vielen Dank dafür!
@Dennis Freut mich, dass Dir mein Tool nützlich ist :)
:
Bearbeitet durch User
Eine Spline-Funktion oder ein Polynom n-ter Ordnung konnte man schon mit den Matrixfunktionen eines Sharp PC1403H im letzten Jahrtausend ausrechnen.
... 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
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..:)
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
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
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?
Wenn du den csv Imnport noch realisierst wird das tool tauglich..bis dahin muss man weiter scilab nutzen.
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
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
Gehtes auch als Fi mit einem höheren Polynomgrad als 8?
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.
Gute Idee. Dann aber bitte mit hohem Zoom und korrigierbaren Punkten.
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!
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.
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?
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.
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
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.
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
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.
Albert M. schrieb: > Ich habe mir heute noch ein Tool erstellt und möchte es euch nicht > vorenthalten klappt das auch mit Lottozahlen?
Oliver K. schrieb: > Die ersten drei bis vier Werte sind annähernd genau, dann läuft das > Ergebnis extrem weg. Vermutlich. Mit Excel muss man aufpassen!
Hier ne Lösung mit python3, numpy und matplotlib Resultat vorweg: Das Polynom: -6.923e-08 x**5 + 8.089e-06 x**4 - 6.632e-05 x**3 - 0.02013 x**2 - 0.1389 x - 0.1301 Die Koeffizienten mit mehr Nachkommastellen: [-6.92307692e-08 8.08857809e-06 -6.63170163e-05 -2.01282051e-02 -1.38876457e-01 -1.30069930e-01]
1 | #!/usr/bin/env python3
|
2 | # Bsp. von hier:
|
3 | # https://scipy-lectures.org/intro/numpy/auto_examples/plot_polyfit.html
|
4 | import numpy as np |
5 | import matplotlib.pyplot as plt |
6 | |
7 | #--------------
|
8 | # "User Input":
|
9 | x=[0,10,20,30,40,50,60,70,80,90] |
10 | y=[0,-4,-10,-19,-29,-37,-44,-53,-70,-102] |
11 | PolyGrad=5 |
12 | |
13 | PlottVon=0 |
14 | PlottBis=100 |
15 | PlottAnzahlPunkte=200 # "Plott-Auflösung" |
16 | #--------------
|
17 | |
18 | p = np.poly1d(np.polyfit(x, y, PolyGrad)) |
19 | print("Das Polynom:\n{}\n".format(p)) |
20 | print("Die Koeffizienten mit mehr Nachkommastellen:\n{}".format(np.polyfit(x, y, PolyGrad))) |
21 | |
22 | t = np.linspace(PlottVon, PlottBis, PlottAnzahlPunkte) |
23 | |
24 | fig, ax = plt.subplots() |
25 | ax.plot(x, y, 'o', t, p(t), '-') |
26 | |
27 | ax.set(xlabel='x', ylabel='f(x)', |
28 | title='numpy.polyfit, Grad={}'.format(PolyGrad)) |
29 | ax.grid() |
30 | |
31 | #fig.savefig("poly.png")
|
32 | plt.show() |
Interessant wird es, wenn die Polynomgradzahl grösser wird, als die Hälfte der Punktezahl.
Wenn der Grad des Polynoms per default größer ist als die Anzahl der Datenpunkte, hat man entweder etwas falsch gemacht oder nimmt Occam's Razor, um den optimalen Grad des Polynoms zu bestimmen. Näheres dazu z.B. in der Thesis von David MacKay: www.inference.org.uk/mackay/thesis.pdf
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.