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...
Ich nehem dazu Matlab, Curve Fitting Toolbox. Ist zwar alles andere als kostenlos, liegt aber an jeder Uni irgendwo rum.
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.
Wenn man einen Raspberry Pi hat: Für den gibt es Mathematica kostenlos. http://www.wolfram.com/raspberry-pi/
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
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.
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
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.
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.
> .. 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.
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.“
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.
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.
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
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.
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).
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.
rs_osp schrieb: > Echte Interpolationen mit Excel sind keine obskuren Tricks, sondern die > ganz normalen Hausmittel. OK, akzeptiert.
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 :-)
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+
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.
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!
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.
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
Frank Petelka schrieb: > Polynomgrad auswählen Und wenn es kein Polynom ist (z.B. Logaritmus, Wurzel, Reziprok etc.)?
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?
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.
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!
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.
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.
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
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.
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
> .. 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%.
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.
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
interpolierend = die Kurve geht durch die Punkte, approximierend = die Kurve geht in der Naehe durch. Bei einem ueberbestimmten Problem arbeitet man approximierend.
Bei diesem Thema kann man sich verweilen, es ist eine semestrige Vorlesung mit 2 Wochenstunden bei den Physikern.
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.
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
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.
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
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.
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 :-)
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
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
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.