Forum: PC Hard- und Software Aus Stützstellen eine Funktion berechnen lassen?


von Borislav B. (boris_b)


Lesenswert?

Hallo,
gibt es eine Software/Webseite, die aus ein paar gegebenen Stützstellen 
eine Funktion berechnet, die durch diese Punkte verläuft?

Das wäre doch sehr praktisch ;-)



Hintergrund:
Zurzeit messe ich verschiedene physikalische Vorgänge aus. Diese möchte 
ich anschließend am PC modellieren. Dazu brauche ich jeweils für alle 
aufgezeichneten Messpunkte eine Funktion, die sich möglichst gut mit den 
Messpunkten deckt. Das geht zwar auch von Hand, ist aber doch ziemlich 
mühselig...

von Max (Gast)


Lesenswert?

Ich nehem dazu Matlab, Curve Fitting Toolbox. Ist zwar alles andere als 
kostenlos, liegt aber an jeder Uni irgendwo rum.

von rs_osp (Gast)


Lesenswert?

Mit Excel lassen sich mMn Interpolationen recht schnell und 
unkompliziert machen. Excel unterstützt lineare, logarithmische und 
exponentielle Interpolation von Haus aus und mit dem Solver Add-In 
(standardmäßig dabei) kann man noch viel mehr machen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn man einen Raspberry Pi hat: Für den gibt es Mathematica kostenlos.

http://www.wolfram.com/raspberry-pi/

von jz (Gast)


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Boris P. schrieb:
> die aus ein paar gegebenen Stützstellen eine Funktion berechnet

Exakte Interpolation:

http://de.wikipedia.org/wiki/Polynominterpolation

Lagrange und Newton sind die Klassiker; Auswertung des Polynoms danach
mit dem Horner-Schema.


Approximation:

Methode der kleinsten Quadrate:

http://de.wikipedia.org/wiki/Methode_der_kleinsten_Quadrate

Hat den Vorteil, dass man den Grad des Polynoms selbst festlegen kann.

(Lang, lang sind die Mathevorlesungen her. ;-)


Klar kann man sowas wie Mathematica benutzen, aber zuweilen ist es ja
auch ganz nützlich, die zugrunde liegenden Ideen selbst zu kennen.
Dann kann man sowas auch mal in eigene Programme einbauen.

: Bearbeitet durch Moderator
von Rolf M. (rmagnus)


Lesenswert?

Wenn man eine Ahnung hat, welche Art von Funktion sich am ehesten 
"fitten" läßt, kann man auch gnuplot nehmen, um die Parameter ausrechnen 
zu lassen. Das hab ich letztens für sowas verwendet.

von Stefan (Gast)


Lesenswert?

Das kannst Du auch auf dem Handy mit der kostenlosen Android-App FreeGeo 
machen.
Unter Funktionen -> "Polynom durch Punkte".

Die resultierede Funktionsgleichung läßt sich anzeigen, indem Du oben 
die Hand selektierst und dann die Funktionsgraphik anklickst.

Gruß, Stefan

von Matthias L. (limbachnet)


Lesenswert?

Google mal nach dem Stichwort "Regressionsanalyse Tool".

Da bekommst du einige Links zu entsprechenden Lösungen, u.a. auch mit 
Excel.
Hier: http://www.xuru.org/rt/TOC.asp kannst du mal ausprobieren, ob du 
mit ein paar Beispiel-Messreihen sinnvolle Ergebnisse bekommst.

von Paul B. (Gast)


Lesenswert?

Rekursive B-Splines sind noch vor einem Polynom n-ten Grades die beste 
Option, Punkte exakt zu fitten, wenn es auf die Genauigkeit und den 
Erhalt der Steigung angeht. Physikalische Werte sind aber mit Fehlern 
behaftet und daher muss der Freiheitsgrad eingeschränkt werden, 
Idealerweise legt man dabei die Funktion zugrunde, welche physikalisch 
auch bestimmend ist und das sind in den seltensten Fällen Polynome oder 
Splines. Lineare Verläufe müssen daher auch linear gefittet werden etc.

Ich hätte jetzt auch zu Excel geraten, weil das jeder hat. Komplexere 
Fits auf X3 z.B. kann man auch rasch selber hinprogrammieren.

von Purzel H. (hacky)


Lesenswert?

> .. Rekursive B-Splines sind noch vor einem Polynom n-ten Grades die beste
Option, Punkte exakt zu fitten, wenn es auf die Genauigkeit und den
Erhalt der Steigung angeht.

Tatsaechlich ? Exakt fitten ? Wie genau sind denn die Punkte ? Man 
sollte schon eine Idee haben was dahinter steckt, und nicht einfach 
einen Fit machen damit gefittet ist. Und dabei sind die Stuetzunkte 
gewuerfelt, resp mit einem Rauschen und einer Ungenauigkeit behaftet.

Ich verweise mal auf die Fehlerrechnung.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frank Petelka schrieb:
> Ich hätte jetzt auch zu Excel geraten, weil das jeder hat.

„Wenn das einzige Werkzeug, was du hast, ein Hammer ist, sieht jedes
Werkstück wie ein Nagel aus.“

von Micha (Gast)


Lesenswert?

Ich werfe noch mla http://zunzun.com/ in den Ring

von J. A. (gajk)


Lesenswert?

Boris P. schrieb:

> Zurzeit messe ich verschiedene physikalische Vorgänge aus. Diese möchte
> ich anschließend am PC modellieren. Dazu brauche ich jeweils für alle
> aufgezeichneten Messpunkte eine Funktion, die sich möglichst gut mit den
> Messpunkten deckt. Das geht zwar auch von Hand, ist aber doch ziemlich
> mühselig...

Wenn du es modellieren oder simulieren willst wäre es vielleicht 
sinnvoll, wenn du dir zu deinem Modell einen mathematischen Zusammenhang 
überlegen würdest. (quadratisch, potenzfunktion, sinus etc.).

Sonst stehst du mit einem Polynom 82. Grades da, alles passt wunderbar - 
aber der Erkenntnisgewinn ist gleich Null.

von Purzel H. (hacky)


Lesenswert?

Heisst, das richtige Vorgehen ist erst ein Modell zu haben, dann eine 
Approximation zu machen. Dh eine Funktion optimal zu fitten. zB mit 
minmaler quadratischer Abweichung durch alle Punkte.

von Maxima User (Gast)


Lesenswert?

Mathematica, wenn man Wolfram unterstützen möchte oder das freie Maxima 
http://maxima.sourceforge.net/ (bzw. wxmaxima unter Linux mit GUI).

Maxima basiert wie auch Mathematica auf den Ideen des Macsyma Projekts 
und ist sehr ähnlich zu bedienen, nur halt kostenlos.

Fertige Beispiele zu verschiedenen Interpolationsverfahren gibts im 
Manual unter:

http://maxima.sourceforge.net/docs/manual/de/maxima_54.html

von rs_osp (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> „Wenn das einzige Werkzeug, was du hast, ein Hammer ist, sieht jedes
> Werkstück wie ein Nagel aus.“

Aha?! Was ist jetzt an Excel so schlecht? Wurde ja u.A. auch dafür 
gemacht und ich hatte damit noch nie Probleme. Vorallem die Anbindung an 
externe Programme ist nicht schlecht (beim letzten Projekt wurde ein 
Teil der Berechnungen an ein Python-Programm ausgelagert, das 
Auslesen/Schreiben der Werte in eine xlsx-Datei beträgt wenige 
Codezeilen Overhead).

 Würde mich mal interessen... oder ist das nur MS-Bashing.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

rs_osp schrieb:
> Was ist jetzt an Excel so schlecht?

Was ist an einem Hammer so schlecht?

Nichts.  Er taugt prima zum Einschlagen von Nägeln.

Excel ist eine Tabellenkalkulation.  Klar kann man es mit allerlei
Tricks zu allem Möglichen miss^H^H^H^Hbenutzen, aber es gibt andere
Dinge, die für sowas deutlich besser geeignet sind.  Je nach
Belieben entweder eine der klassischen Compilersprachen, oder eine
Scriptsprache with Python oder was auch immer man bevorzugt.

Außerdem habe ich mir sagen lassen, dass die Kompatibilität zwischen
Excel und Openoffice & Co. ziemlich schnell den Bach runtergeht, wenn
die Berechnungen etwas komplexer werden.  Da Excel Geld kostet, hat
es am Ende doch nicht „jeder“, wie du unterstellt hast, sondern oft
genug ist es „nur“ ein Calc von Openoffice.  Außerdem kann es schon
rein deshalb nicht „jeder“ haben, weil nicht jeder überhaupt MS Windows
hat (und selbst OSX-Nutzer werden wohl eher selten MS Office installiert
haben, auch wenn es das für OSX im Gegensatz zu Linux gibt).

von rs_osp (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Excel ist eine Tabellenkalkulation.  Klar kann man es mit allerlei
> Tricks zu allem Möglichen miss^H^H^H^Hbenutzen, aber es gibt andere
> Dinge, die für sowas deutlich besser geeignet sind.  Je nach
> Belieben entweder eine der klassischen Compilersprachen, oder eine
> Scriptsprache with Python oder was auch immer man bevorzugt.

Tricks? Echte Interpolationen mit Excel sind keine obskuren Tricks, 
sondern die ganz normalen Hausmittel. In diesem Sinne ist Excel sicher 
kein Hammer, sondern genau dafür gemacht. Die Funktionen stellt Excel 
zur Verfügung und sind direkt verwendbar, ohne großen Aufwand (du 
brauchst nur deine x-y-Werte in einem Excel-Worksheet).

Gerade für die gängigen Interpolationen (linear, log usw) geben sich 
meiner Meinung nach Excel und Matlab nicht viel vom Aufwand/Usability 
her.


Jörg Wunsch schrieb:
> Außerdem habe ich mir sagen lassen, dass die Kompatibilität zwischen
> Excel und Openoffice & Co. ziemlich schnell den Bach runtergeht, wenn
> die Berechnungen etwas komplexer werden.  Da Excel Geld kostet, hat
> es am Ende doch nicht „jeder“, wie du unterstellt hast, sondern oft
> genug ist es „nur“ ein Calc von Openoffice.  Außerdem kann es schon
> rein deshalb nicht „jeder“ haben, weil nicht jeder überhaupt MS Windows
> hat (und selbst OSX-Nutzer werden wohl eher selten MS Office installiert
> haben, auch wenn es das für OSX im Gegensatz zu Linux gibt).

Kommt drauf in welchem Umfeld man arbeitet/entwickelt. In relativ 
homogenen Firmennetzwerken ist es natürlich egal (da hat "jeder" Excel) 
und man braucht keine Kompatibilität. Wenn man für die 
OpenSource-Community entwickelt oder für Kunden entwickelt sind deine 
Einwände natürlich berechtigt und wichtig.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

rs_osp schrieb:
> Echte Interpolationen mit Excel sind keine obskuren Tricks, sondern die
> ganz normalen Hausmittel.

OK, akzeptiert.

von Paul B. (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Frank Petelka schrieb:
>> Ich hätte jetzt auch zu Excel geraten, weil das jeder hat.
>
> „Wenn das einzige Werkzeug, was du hast, ein Hammer ist, sieht jedes
> Werkstück wie ein Nagel aus.“
Für solch simple Dinge brauchen wir doch nun wirklich kein Mathematica 
mit Android und Gedöhns :-)

von Daniel F. (df311)


Lesenswert?

rs_osp schrieb:
> Echte Interpolationen mit Excel sind keine obskuren Tricks,
> sondern die ganz normalen Hausmittel. In diesem Sinne ist Excel sicher
> kein Hammer, sondern genau dafür gemacht. Die Funktionen stellt Excel
> zur Verfügung und sind direkt verwendbar, ohne großen Aufwand (du
> brauchst nur deine x-y-Werte in einem Excel-Worksheet).

aber die berechnung funktioniert nur in excel, oder?
mit anderen programmen bekommt man eine funktion (bzw. eine handvoll 
parameter), die man dann in einer (fast) beliebigen programmiersprache 
implementieren kann - ausgenommen vielleicht Java2K, Piet, Taxi, sicher 
nicht in HQ9+

von Possetitjel (Gast)


Lesenswert?

Boris P. schrieb:

> gibt es eine Software/Webseite, die aus ein paar gegebenen
> Stützstellen eine Funktion berechnet, die durch diese Punkte
> verläuft?

Ja, natürlich gibt es das.

> Das wäre doch sehr praktisch ;-)

Hmmm.
Unter Umständen ist das, was Du suchst, gar nicht das, was Du
wirklich haben willst ;-)

> Hintergrund:
> Zurzeit messe ich verschiedene physikalische Vorgänge aus.

Hmm. Okay.

> Diese möchte ich anschließend am PC modellieren.

Was bedeutet das?

> Dazu brauche ich jeweils für alle aufgezeichneten Messpunkte
> eine Funktion, die sich möglichst gut mit den Messpunkten
> deckt.

Parser Error. Mehrdeutige Aussage.

Du kannst mit Polynomen approximieren und interpolieren, was
Dein Herz begehrt. Das Problem dabei ist, dass der physikalische
Gehalt der gewonnenen Funktion unter Umständen exakt Null ist.

Eine aussagekräftige Modellierung besteht aus zwei Schritten:
Zunächst musst Du anhand physikalischer Überlegungen eine
Modellfunktion mit einer gewissen Anzahl freier Parameter finden.
Im zweiten Schritt kannst Du dann aus hinreichen vielen
Messwerten mit geeigneter Software die Parameter bestimmen.

Den zweiten Schritt (das Bestimmen der Parameter) kann der
Computer übernehmen, aber der erste Schritt (das Finden der
Modellfunktion) ist Deine Aufgabe.

von Borislav B. (boris_b)


Lesenswert?

Possetitjel schrieb:
> Den zweiten Schritt (das Bestimmen der Parameter) kann der
> Computer übernehmen, aber der erste Schritt (das Finden der
> Modellfunktion) ist Deine Aufgabe.

Das ist ja so weit auch kein Problem.

Possetitjel schrieb:
> Den zweiten Schritt (das Bestimmen der Parameter) kann der
> Computer übernehmen, aber der erste Schritt (das Finden der
> Modellfunktion) ist Deine Aufgabe.

Das dann schon eher. Ich habe ein bisschen mit Excel herumprobiert, aber 
so ganz trivial ist das dann doch nicht. Ich hatte gehofft, man wirft 
einfach die XY Werte rein, gibt vielleicht noch den gewünschten 
Funktionstyp an (wobei das automatisch gehen müsste), und schon werden 
die Parameter ausgespuckt ;-)

Naja, jetzt habe ich es von Hand gemacht, das war dann doch schneller...
Danke trotzdem!

von Rolf M. (rmagnus)


Lesenswert?

Boris P. schrieb:
> Ich habe ein bisschen mit Excel herumprobiert, aber
> so ganz trivial ist das dann doch nicht. Ich hatte gehofft, man wirft
> einfach die XY Werte rein, gibt vielleicht noch den gewünschten
> Funktionstyp an (wobei das automatisch gehen müsste), und schon werden
> die Parameter ausgespuckt ;-)

Ugefähr so geht es bei gnuplot.

von Paul B. (Gast)


Angehängte Dateien:

Lesenswert?

Boris P. schrieb:
> Ich hatte gehofft, man wirft
> einfach die XY Werte rein, gibt vielleicht noch den gewünschten
> Funktionstyp an (wobei das automatisch gehen müsste), und schon werden
> die Parameter ausgespuckt ;-)
Na doch, genau so geht es.
werte rein, Diagramassistent, Linearkurven nehmen, Punkte selektieren, 
"Trendlinie hinzufügen", Polynomgrad auswählen

von Borislav B. (boris_b)


Lesenswert?

Frank Petelka schrieb:
> Polynomgrad auswählen

Und wenn es kein Polynom ist (z.B. Logaritmus, Wurzel, Reziprok etc.)?

von J.-u. G. (juwe)


Lesenswert?

Boris P. schrieb:
> Und wenn es kein Polynom ist (z.B. Logaritmus, Wurzel, Reziprok etc.)?

Dann verwende halt eine andere Funktion. Wie weiter oben bereits 
angemerkt, Du musst die Funktion vorgeben. Woher soll denn die 
Software wissen, aus welchen "physikalischen Vorgängen" Deine Messwerter 
stammen?

von Borislav B. (boris_b)


Lesenswert?

J.-u. G. schrieb:
> Woher soll denn die
> Software wissen, aus welchen "physikalischen Vorgängen" Deine Messwerter
> stammen?

Das kann man den Messdaten ansehen. Zumindest als Mensch ;-)

Eigentlich sollte es auch für eine Software nicht so schwer sein erst 
den Typ der Funktion zu erkennen, und sich dann in einem zweiten Schritt 
den optimalen Parametern anzunähern.

von Borislav B. (boris_b)


Lesenswert?

Rolf Magnus schrieb:
> Ugefähr so geht es bei gnuplot.

Das würde ich ja schon gerne mal ausprobieren. Könntest du mir 
vielleicht ganz kurz erklären, wie ich das in Gnuplot (das ich bisher 
noch nicht kannte) mache? Danke!

von J. A. (gajk)


Lesenswert?

rs_osp schrieb:
> Jörg Wunsch schrieb:
>> „Wenn das einzige Werkzeug, was du hast, ein Hammer ist, sieht jedes
>> Werkstück wie ein Nagel aus.“
>
> Aha?! Was ist jetzt an Excel so schlecht? Wurde ja u.A. auch dafür
> gemacht und ich hatte damit noch nie Probleme. Vorallem die Anbindung an
> externe Programme ist nicht schlecht (beim letzten Projekt wurde ein
> Teil der Berechnungen an ein Python-Programm ausgelagert, das
> Auslesen/Schreiben der Werte in eine xlsx-Datei beträgt wenige
> Codezeilen Overhead).
>
>  Würde mich mal interessen... oder ist das nur MS-Bashing.

Eher wohl ein Nutzer-Bashing. MS hat ja auch Access, also eine 
Datenbank. Da sind natürlich Auswertungen großer Datenmengen 
strukturiert und sauber aufgebaut möglich. Dennoch gibt es auch bei 
solchen Projekten, die mit vielen Daten zu tun haben, die man eigentlich 
in eine strukturierte Datenbank steckt, Leute, die lieber alles in eine 
große Excel-Tabelle klopfen und dann dort herum-auswerten.

Von Doubletten, unterschiedlichen Schreibweisen etc. wollen wir da mal 
gar nicht reden.

von J. A. (gajk)


Lesenswert?

Boris P. schrieb:

> Eigentlich sollte es auch für eine Software nicht so schwer sein erst
> den Typ der Funktion zu erkennen, und sich dann in einem zweiten Schritt
> den optimalen Parametern anzunähern.

Das würde mich wundern, ich lerne aber gerne dazu.

Wenn du Daten zum freien Fall (im Vakuum) gemessen haben solltest, 
würdest du dies dann mit quadratischen Funktionen vergleichen, weil du 
dir den Zusammenhang zwischen Zeit und Strecke überlegt hast.

Aus dem Vergleich siehst du dann, wie nahe deine Werte an der Theorie 
liegen oder ob es systemasiche Abweichungen gibt (ggf. doch 
Luftwiderstand). Dann könntest du dein Modell erweitern und 
geschwindigkeitsabhängige Kräfte einbauen und und und.

Doch was nützt es dir, wenn du die freien-Fall-Daten eingibt und dann 
schlägt das Programm (sagen wir wegen der schlechten Datenlage) ein 
s=const*tan(t) vor? (Fängt auch im Nullpunkt an, wird steiler).

Waren deine Messungen dann gut oder nicht gut? Oder machst du dann die 
Theorie dazu?

Grundsätzlich kannst du jeden Kurvenverlauf per Fouriersynthese 
nachbilden, doch ein Modell ist dies nicht.

von Borislav B. (boris_b)


Lesenswert?

J. Ad. schrieb:
> Doch was nützt es dir, wenn du die freien-Fall-Daten eingibt und dann
> schlägt das Programm (sagen wir wegen der schlechten Datenlage) ein
> s=const*tan(t) vor? (Fängt auch im Nullpunkt an, wird steiler).

Ich bin nicht sicher ob ich dich richtig verstehe.

Eigentlich ist die Sache doch ganz einfach ;-)
Ich habe n Messwerte (XY Paare). Nun soll das Programm eine Funktion 
vorschlagen, die so genau wie möglich durch jeden dieser Messpunkte 
verläuft.
Mit dieser Funktion kann ich dann schlussendlich Werte zwischen meinen 
ursprünglichen Messwerten interpolieren.

Zur Bestimmung des Kurventyps könnte man sich z.B. die Steigung zwischen 
den Messwerten anschauen: ist diese konstant, so handelt es sich 
vermutlich um etwas Lineares. Wird er immer größer, so kann man es mit 
einer exponentialfunktion versuchen. Nimmt die Steigung ab, könnte es 
ein Logarithmus oder eine Wurzel sein. Usw. (Achtung: <- gefährliches 
Schuld-Halbwissen)

Wenn Google sogar zuverlässig Gegenstände, Personen und Tiere auf Fotos 
identifizieren kann, sollte das kein Problem sein :-)

: Bearbeitet durch User
von J. A. (gajk)


Lesenswert?

Boris P. schrieb:
> J. Ad. schrieb:
>> Doch was nützt es dir, wenn du die freien-Fall-Daten eingibt und dann
>> schlägt das Programm (sagen wir wegen der schlechten Datenlage) ein
>> s=const*tan(t) vor? (Fängt auch im Nullpunkt an, wird steiler).
>
> Ich bin nicht sicher ob ich dich richtig verstehe.

Wenn es dir darum geht, dass du halt eine irgenwie geartete Linie 
findest, die perfekt durch die Messpunkte geht - bitte! Da kannst du 
aber auch einen Malermeister bestelen.


> Eigentlich ist die Sache doch ganz einfach ;-)
> Ich habe n Messwerte (XY Paare). Nun soll das Programm eine Funktion
> vorschlagen, die so genau wie möglich durch jeden dieser Messpunkte
> verläuft.

Genau wie möglich lässt Messfehler etc. außen vor. Die perfekte Kurve 
ist bei dir dann ein Polynom sehr hohen Grades oder sonst etwas, was 
keinerlei Aussagen über die Zusammenhänge liefert.

Stell dir vor, du bestimmst die Masse von N Glaskugeln auf einer Waage. 
Erst eine, dann zwei etc. Die Messwerte schreibst du auf. Dann kommt der 
Fit und es stellt sich heraus dass gilt: m(gesamt)= const * sin(N)

Wärst du damit einverstanden? Sicherlich nicht, denn du erwartest einen 
lineraren Zusammenhang: m(gesamt) = N * m(einzel).

Nur dann kann dir dämmern, dass die Waage bei zu vielen Kugeln einfach 
in die Knie geht und etwas an dem Messvorgang nicht stimmt.


> Zur Bestimmung des Kurventyps könnte man sich z.B. die Steigung zwischen
> den Messwerten anschauen: ist diese konstant, so handelt es sich
> vermutlich um etwas Lineares.
...oder du hast zu wenig Messpunkte oder zu ungenaue um eine 
quadratische Abhängigkeit festzustellen.

> Wird er immer größer, so kann man es mit
> einer exponentialfunktion versuchen.

...oder einem Polynom oder einer transzendenten Funktion

> Nimmt die Steigung ab, könnte es
> ein Logarithmus oder eine Wurzel sein. Usw. (Achtung: <- gefährliches
> Schuld-Halbwissen)

siehe oben. Mit etwas Mühe kann man alles an alles anfitten. Doch das 
bringt dir nicht viel. Klar, zwischen zwei Messwerten einen 
Interpolationswert auszurechnen, geht natürlich auch immer.

von Borislav B. (boris_b)


Lesenswert?

J. Ad. schrieb:
> Nur dann kann dir dämmern, dass die Waage bei zu vielen Kugeln einfach
> in die Knie geht und etwas an dem Messvorgang nicht stimmt.

J. Ad. schrieb:
> ...oder du hast zu wenig Messpunkte oder zu ungenaue um eine
> quadratische Abhängigkeit festzustellen.

Ich gehe schon davon aus dass meine Messwerte ausreichend genau und auch 
in ausreichender Menge vorhanden sind ;-)

Um es mal ganz konkret zu machen:
Ich habe hier einen Motor, der per PWM von einem Mikrocontroller 
angesteuert wird. Die Geschwindigkeit des Motors wird über ein einziges 
Byte (0-255) gesetzt. Der Motor wiederrum bewegt einen Gegenstand.

Um eine Software zur Ansteuerung zu schreiben, brauche ich nun eine 
Funktion, die mir zu einer gewüsnchten Bewegungsdauer des Gegenstands 
die dafür erforderliche Motorgeschwindigkeit (0-255) ausspuckt.

Dafür muss ich den Zusammenhang zwischen den beiden Größen herausfinden.
Dass dabei kein Sinus herauskommen sollte ist mir schon klar. Es scheint 
eher eine Funktion vom Typ

Dauer(Geschwindigkeit) = a + b / Geschwindigkeit;

zu sein. Nur die genauen Parameter zu berechnen (dann auch für 
verschiedene Motoren) ist etwas nervig.

: Bearbeitet durch User
von Purzel H. (hacky)


Lesenswert?

> .. Der Motor wiederrum bewegt einen Gegenstand

Eine Traegheit hervorgerufen durch Masse benoetigt einen ganz anderen 
Fit, ein anderes Modell. Speziell, wenn die Masse nicht fest ist.
Und kleiner als ein Prozent Genauigkeit wuerd ich sowieso nicht 
erwarten, eher 5%.

von Possetitjel (Gast)


Lesenswert?

Boris P. schrieb:

> Um es mal ganz konkret zu machen:
> Ich habe hier einen Motor, der per PWM von einem Mikrocontroller

...Mikrocontroller. Das merken wir uns mal...

> angesteuert wird. Die Geschwindigkeit des Motors wird über ein
> einziges Byte (0-255) gesetzt. Der Motor wiederrum bewegt einen
> Gegenstand.

Hmm. Okay.

> Um eine Software zur Ansteuerung zu schreiben, brauche ich nun
> eine Funktion, die mir zu einer gewüsnchten Bewegungsdauer des
> Gegenstands die dafür erforderliche Motorgeschwindigkeit (0-255)
> ausspuckt.

Hmm.
Es muss nicht immer eine Formel für den ganzen Bereich sein.

Eine Funktion (z.B. einen Polygonzug oder einen Spline) kann man
auch mittels einer Liste von Stützstellen definieren; zwischen
den Stützstellen wird interpoliert.

> Dafür muss ich den Zusammenhang zwischen den beiden Größen
> herausfinden.

Den kann Dein Mikrocontroller vielleicht mittels zweier
Lichtschranken selbst messen?

> Nur die genauen Parameter zu berechnen (dann auch für
> verschiedene Motoren) ist etwas nervig.

Das kann Dir vielleicht Dein Mikrocontroller abnehmen?
Eine eingebaute Kalibrierfunktion ist doch nichts Ungewöhnliches.

Als Modellfunktion klingt in Deinem Falle "y=1/x" für den Anfang
nicht verkehrt; das Problem ist nur, dass sich leicht aufgebohrte
Varianten (wie z.B. "y=a+b/(x+c)) mathematisch beschissen
behandeln lassen.
Polygonzug bzw. Spline ist da einfacher; mit der Streuung Deiner
Messwerte musst Du so oder so fertigwerden.

von (prx) A. K. (prx)


Lesenswert?

Boris P. schrieb:
> Ich gehe schon davon aus dass meine Messwerte ausreichend genau und auch
> in ausreichender Menge vorhanden sind ;-)

Wenn du aus einem Haufen Messwerte exakt ein entsprechend umfangreiches 
Polynom bestimmst, dann hast du eine nicht geringe Chance, dass zwischen 
den Messwerten allerhand unerwünschte Buckel und Täler auftauchen. Mehr 
Messwerte verbessern das nicht.

In der Mechanik hat man deshalb schon vor der Zeit der numerischen 
Berechnung (=> Straklatte) Splines verwendet, die jeweils stückweise 
interpolieren und mit Polynomen niedrigen Grades auskommen. Das bringt 
zwar nicht weiter bei der Suche nach einer einzelnen formelhaften 
Gesamtdarstellung, liefert aber eine saubere auch in der Ableitung noch 
stetige Kurve.

: Bearbeitet durch User
von Dampfzottel (Gast)


Lesenswert?

interpolierend = die Kurve geht durch die Punkte,
approximierend = die Kurve geht in der Naehe durch.
Bei einem ueberbestimmten Problem arbeitet man approximierend.

von Halbrechner (Gast)


Lesenswert?

Bei diesem Thema kann man sich verweilen, es ist eine semestrige 
Vorlesung mit 2 Wochenstunden bei den Physikern.

von J. A. (gajk)


Lesenswert?

Dampfzottel schrieb:
> interpolierend = die Kurve geht durch die Punkte,
> approximierend = die Kurve geht in der Naehe durch.
> Bei einem ueberbestimmten Problem arbeitet man approximierend.

interpolierend = ein zuvor nicht beskannter Punkt wird durch Verwendung 
der Daten links und rechts von diesem Punkt berechnet.

Eine Kurve geht in der Regel NIE durch die Punkte, sondern wird durch 
möglichst kleine Abstandsquadrate festgelegt.

von Vlad T. (vlad_tepesch)


Lesenswert?

Boris P. schrieb:
> Mit dieser Funktion kann ich dann schlussendlich Werte zwischen meinen
> ursprünglichen Messwerten interpolieren.

das ist der Knackpunkt.
willst du interpolieren, oder Modelparameter bestimmen?

für eine Interpolation reichen auch Splines, die passen fast immer. Das 
ist auch das, was excel (oder OOo calc) macht, wenn du mit Messpunkten 
einen Liniengraph zeichnest.
Oder willst du aus (relativ) wenigen Datenpunkten vorhersagen treffen 
können, wie das verhalten außerhalb des Wertebereichs deiner Daten ist 
(extrapolation)?

In diesem Fall musst du das zugrunde liegende physikalische Modell 
kennen. denn es hilft dir nix, wenn du mit Daten im Bereich von [x0, xn] 
eine beliebe Funktion fittest, die dann auch genau auf diese Punkte 
passt, aber außerhalb von [x0, xn] zB bei 5*xn sonst wie weit 
wegdriftet. In diesem Fall musst du dir das Modell überlegen und dann 
anhand der Messwerte die Parameter so optimieren, dass mit den bekannten 
Messwerten der Fehler des Modells minimal wird (least squares)

: Bearbeitet durch User
von Borislav B. (boris_b)


Lesenswert?

Vlad Tepesch schrieb:
> Oder willst du aus (relativ) wenigen Datenpunkten vorhersagen treffen
> können, wie das verhalten außerhalb des Wertebereichs deiner Daten ist
> (extrapolation)?

Nein, das nicht. Ich habe am Anfang und am Ende meines Werteberichs 
Messungen durchgeführt. Nun geht es mir nur noch darum, für Werte 
dazwischen INTERpolieren zu können.
Dazu habe ich weitere Messpunkte zwischen meinen beiden Grenzen 
aufgenommen, um den Kurventyp und die richtigen Parameter genauer 
bestimmen zu können.

Am Ende möchte ich diese Interpolation möglichst leicht implementieren 
können. Eine lineare Interpolation zwischen meinen Messwerten wäre da zu 
umständlich (wenn auch u.U. genau genug).
Aber schöner ist es natürlich, wenn ich eine einfach zu programmierende 
Formel wie f(x) = 3960/x habe.

von (prx) A. K. (prx)


Lesenswert?

Boris P. schrieb:
> Aber schöner ist es natürlich, wenn ich eine einfach zu programmierende
> Formel wie f(x) = 3960/x habe.

Das geht nur, wenn du die Grundstruktur der Formel bereits kennst (also 
z.B. a + b/(c*x)), aber die Parameter a,b,c noch genau bestimmen musst. 
Wenn du diese Grundstruktur nicht kennst und anhand eines Messwert-Plots 
nicht erraten kannst, dann nimm abschnittsweise Interpolation.

Ansonsten kriegst du eine übel aussehende Formel, die ausschliesslich an 
den Stützstellen stimmt, aber an allen anderen Stellen kompletten Unsinn 
liefert und stellenweise aussieht wie dein Heimweg bei 4 Promille.

: Bearbeitet durch User
von Matthias L. (limbachnet)


Lesenswert?

Trotzdem bleibt die Frage, ob du nun eine Kurve exakt durch jeden 
einzelnen Messpunkt hindurchführen möchtest (da wäre der von Vlad 
angesprochene Spline geeignet) oder ob du eine stetige Funktion suchst, 
die die Messwert"wolke" am besten mathematisch abbildet - das wäre damm 
eine Regression, deren Funktionsgraph relativ knapp an allen Messwerten 
vorbei geht, aber nur wenige exakt trifft.

von Paul B. (Gast)


Lesenswert?

Boris P. schrieb:
> Frank Petelka schrieb:
>> Polynomgrad auswählen
>
> Und wenn es kein Polynom ist (z.B. Logaritmus, Wurzel, Reziprok etc.)?

Meine Aussage bezog sich selbverständlich auf die, die dort auch 
vorliegen :-)

von Purzel H. (hacky)


Lesenswert?

Da werden Begriffe vermischt. Es gibt einen interpolierenden Fit. da 
geht der fit durch die gegebenen Punkte. Und ist dementsprechend 
haesslich.
Bei einem interpolierenden Polynomfit braucht man fuer N Punkte ein 
Polynom von N-1 ter Ordnung. Mehr als 5 ist aeh schwierig. Ein Spline 
ist ein quadratisches oder kubisches Polynom zwischen den Punkten und 
ist in den Punkten stetig, auch in der Ableitung.

Bei einem approximierenden Fit ist das System ueberbestimmt und man geht 
mit einer Kurve durch eine Punktwolke.

Konzentriert euch auf das Approximierende.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Siebzehn Zu Fuenfzehn schrieb:
> Bei einem interpolierenden Polynomfit braucht man fuer N Punkte ein
> Polynom von N-1 ter Ordnung.

Muss nicht sein, einem Programm wie Mathcad kann man beliebige viele 
Stützpunkte vorgeben und ein Formel z.B. 3. Grades, dann kann man sich 
mit Minerr die Parameter für das bestgeeignete Polynom berechnen lassen.

Ziel ist einfach das Polynom, das für alle Stützpunkte die geringsten 
Fehler produziert.

Georg

von Purzel H. (hacky)


Lesenswert?

Sag ich doch. Das nennt sich approximierend...

von J. S. (engineer) Benutzerseite


Lesenswert?

Boris P. schrieb:
> Frank P. schrieb:
>> Polynomgrad auswählen
> Und wenn es kein Polynom ist (z.B. Logaritmus, Wurzel, Reziprok etc.)?
Es gäbe hier die Möglichkeit, die Wurzel an sich als Y einzutragen, also 
eine Art Transformation durchzuführen und dann im transformierten Raum 
die Achse zu linearisieren.

> Bei einem interpolierenden Polynomfit braucht man fuer N Punkte ein
> Polynom von N-1 ter Ordnung.
Ich habe mal ein Programm entwickelt, das eine Fräsmaschine anhand 
solche Stützpunkte steuert. Die Kurve wurde exakt so berechnet und 
danach anhand von Messungen analytisch optimiert. Dabei habe ich 
gefunden, dass die Punktezahl immer so Faktor 2 grösser sein musste, als 
die Ordnungszahl des jeweiligen Polynoms. Damit wurden die Punkte noch 
gut getroffen und gab dazwischen keine unnötigen Schlangen, um es 
bildlich auszudrücken. Bei genauerem Hinsehenm lässt sich das auf das 
Abtasttheorem zurückführen.

>Mehr als 5 wird aehh
Ich habe bis zu 40 Punkte mit Polynom 20 genutzt, allerdings muss man da 
die Auflösung stark beachten und sehr genau rechnen, um die Fehler 
geriung zu halten, was auf dem damligen DX33 mit DOS 6.0  eine 
Herausforderung war :-)

von Sven B. (scummos)


Lesenswert?

Wenn du Messpunkte hast und da eine Kurve durchlegen willst dann ist ein 
reines Ratespiel. Es gibt unendlich viele Funktionen, die dieses 
Kriterium erfüllen, und die sehen völlig unterschiedlich aus.

Sowas macht man i.d.R. so, dass man ein Modell angibt, was aus 
irgendwelchen physikalischen Überlegungen folgt (das heißt im Endeffekt 
einen Term mit n unbekannten Konstanten der außerdem von x abhängt und 
für jedes x den Messwert angibt) und allerhöchtens so viele unbekannte 
Konstanten hat wie man Messpunkte hat (i.d.R. wenn möglich jedoch 
deutlich weniger). Dann fittet man die Kurve an die Werte.

Einfach ein Polynom n-ten Grades durch n Messpunkte legen kannst du 
machen, bringt dir aber normalerweise keinerlei Erkenntnisgewinn. Wie 
gesagt, ich kann dir unendlich viele Funktionen nennen die völlig anders 
aussehen und genau dieselbe Berechtigung haben als Interpolation 
betrachtet zu werden.

20 Unbekannte für 40 Messpunkte ist unendlich viel -- es gibt da dieses 
schöne Paper, wo mit 7 Unbekannten ein Elefant gefittet wird, und mit 8 
wackelt er mit dem Rüssel.

Eine gebräuchliche Möglichkeit die es allerdings noch gibt ist die 
Annahme, dass das Signal quasi "bandbegrenzt" ist: du nimmst an, dass 
die Ableitung der gemessenen Größe in einem gewissen Sinne klein ist 
gegen den Abstand der aufgenommenen Messpunkte. In diesem speziellen 
Fall kannst du aus den Messpunkten das Signal tatsächlich exakt 
rekonstruieren, indem du lauter sinc-Funktionen aufaddierst, für jeden 
Punkt eine.

: 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
Noch kein Account? Hier anmelden.