Fitting von Funktionen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 19:01 So 26.10.2014 | Autor: | snsnsn1 |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Im Rahmen meiner Masterarbeit (grob zum Thema "Verhalten von Schadstoffen im Boden") habe ich Messwerte ermittelt, zu denen ich Funktionen aufstellen möchte. Leider folgen die Messwerte keiner mir bekannten Funktion. Meine Frage ist ob es eine Funktion in Matlab oder einer anderen freien Software gibt, die die Funktionsgleichung zu einem Graphen, den ich durch einzelne (x,y)-Werte vorgebe, ermitteln kann?
Ein Beispiel:
Meine Messwerte geben mir den blauen Graphen vor.
[Dateianhang nicht öffentlich]
Den roten Graphen hab ich geraten: [mm] f(a1,x,b,k,a2,a3)=[a1*(x^b/(e^{k*x}-a2)]*a3
[/mm]
Durch viel rumprobieren und mit dem Solver aus Excel (Methode der kleinsten Quadrate) habe ich versucht ihn an den blauen Graphen anzupassen. Es gibt aber Probleme:
1. Ich bin mit dem Ergebnis immer noch nicht ganz zufrieden.
2. Dieses Vorgehen ist sehr zeitaufwendig und da ich mehrere Graphen auf diese Weise auswerten muss, ist es für mich nicht praktikabel.
3. Was mache ich, wenn ich nicht das Glück habe, alle nötigen Variabeln zu erraten?!
Kann MATLAB eine Funktion/Gleichung von diesem Graphen berechnen und ausgeben? Wenn ja, wie? Oder habt ihr eine ganz andere Idee, wie ich an das Problem "Graph durch Messwerte bekannt, zugehörige Funktionsgleichung unbekannt" (am besten rechnergestützt) rangehen könnte?
Vielen Dank schon mal für eure Hilfe!! :)
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:19 So 26.10.2014 | Autor: | Marcel |
Hallo,
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>
> Im Rahmen meiner Masterarbeit (grob zum Thema "Verhalten
> von Schadstoffen im Boden") habe ich Messwerte ermittelt,
> zu denen ich Funktionen aufstellen möchte. Leider folgen
> die Messwerte keiner mir bekannten Funktion. Meine Frage
> ist ob es eine Funktion in Matlab oder einer anderen freien
> Software gibt, die die Funktionsgleichung zu einem Graphen,
> den ich durch einzelne (x,y)-Werte vorgebe, ermitteln
> kann?
Matlab ist nicht frei. Aber Dir würde vermutlich Octave ausreichen, und
es gibt sicher in Matlab und Octave einen gleichen oder sehr ähnlichen
Befehl bzgl. Deiner Frage.
> Ein Beispiel:
> Meine Messwerte geben mir den blauen Graphen vor.
> [Dateianhang nicht öffentlich]
>
> Den roten Graphen hab ich geraten:
> [mm]f(a1,x,b,k,a2,a3)=[a1*(x^b/(e^{k*x}-a2)]*a3[/mm]
> Durch viel rumprobieren und mit dem Solver aus Excel
> (Methode der kleinsten Quadrate) habe ich versucht ihn an
> den blauen Graphen anzupassen. Es gibt aber Probleme:
> 1. Ich bin mit dem Ergebnis immer noch nicht ganz
> zufrieden.
> 2. Dieses Vorgehen ist sehr zeitaufwendig und da ich
> mehrere Graphen auf diese Weise auswerten muss, ist es für
> mich nicht praktikabel.
> 3. Was mache ich, wenn ich nicht das Glück habe, alle
> nötigen Variabeln zu erraten?!
>
> Kann MATLAB eine Funktion/Gleichung von diesem Graphen
> berechnen und ausgeben? Wenn ja, wie? Oder habt ihr eine
> ganz andere Idee, wie ich an das Problem "Graph durch
> Messwerte bekannt, zugehörige Funktionsgleichung
> unbekannt" (am besten rechnergestützt) rangehen könnte?
Sowas ähnliches habe ich eine Zeit lang mit
Gnuplot
gemacht. Vielleicht hilft Dir ja
meine damalige Antwort hier (anklicken!),
insbesondere mit dem darauffolgenden Minimalbeispiel.
Da man sowas aber sicher auch mit MathCad und was weiß ich alles (vllt.
sogar besser) machen kann, stelle ich die Frage mal nur auf halb beantwortet.
Evtl. kann man ja sogar eine Umfrage draus machen?
Gruß,
Marcel
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:28 So 26.10.2014 | Autor: | Thomas_Aut |
Hallo,
Weil du Matlab angesprochen hast : such mal den Begriff 'polyfit' in Matlab - allerdings musst du dir sozusagen über die numerische Näherung im klaren sein...
Einfach ausgedrückt: Du gibst ein paar Punkte (Messwerte) vor und möchtest dadurch eine Funktion legen ... da gibts jetzt aber verschiedene Ansätze - polyfit arbeitet mit Polynomen(das muss nicht immer der beste Ansatz für eine numerische Approximation sein) .
Gruß Thomas
|
|
|
|
|
> Hallo,
>
> Weil du Matlab angesprochen hast : such mal den Begriff
> 'polyfit' in Matlab - allerdings musst du dir sozusagen
> über die numerische Näherung im klaren sein...
>
> Einfach ausgedrückt: Du gibst ein paar Punkte (Messwerte)
> vor und möchtest dadurch eine Funktion legen ... da gibts
> jetzt aber verschiedene Ansätze - polyfit arbeitet mit
> Polynomen(das muss nicht immer der beste Ansatz für eine
> numerische Approximation sein) .
>
>
> Gruß Thomas
Hallo Thomas,
nur so aus der Ferne "vom Schiff aus" betrachtet:
ich denke, dass im vorliegenden Fall eine Näherung,
die von Polynomfunktionen (ohne jede Modifikation)
ausgeht, dem Problem ziemlich grundsätzlich nicht
angemessen ist. Es fällt doch ins Auge, dass die zu
beschreibenden Funktionen für große x wohl ein ganz
einfaches asymptotisches Verhalten (mit einer waagrechten
Asymptote oder aber einer sehr flachen asymptotischen
Kurve) haben sollten. Ganz genau das kann man aber
eben gerade mittels Polynomen überhaupt nicht
modellieren.
LG , Al-Chw.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:34 So 26.10.2014 | Autor: | Thomas_Aut |
> > Hallo,
> >
> > Weil du Matlab angesprochen hast : such mal den Begriff
> > 'polyfit' in Matlab - allerdings musst du dir sozusagen
> > über die numerische Näherung im klaren sein...
> >
> > Einfach ausgedrückt: Du gibst ein paar Punkte (Messwerte)
> > vor und möchtest dadurch eine Funktion legen ... da gibts
> > jetzt aber verschiedene Ansätze - polyfit arbeitet mit
> > Polynomen(das muss nicht immer der beste Ansatz für eine
> > numerische Approximation sein) .
> >
> >
> > Gruß Thomas
>
>
> Hallo Thomas,
>
> nur so aus der Ferne "vom Schiff aus" betrachtet:
> ich denke, dass im vorliegenden Fall eine Näherung,
> die von Polynomfunktionen (ohne jede Modifikation)
> ausgeht, dem Problem ziemlich grundsätzlich nicht
> angemessen ist. Es fällt doch ins Auge, dass die zu
> beschreibenden Funktionen für große x wohl ein ganz
> einfaches asymptotisches Verhalten (mit einer waagrechten
> Asymptote oder aber einer sehr flachen asymptotischen
> Kurve) haben sollten. Ganz genau das kann man aber
> eben gerade mittels Polynomen überhaupt nicht
> modellieren.
>
> LG , Al-Chw.
Hallo Al,
richtig, selbst wenn du an Land gegangen wärst stimmt was du sagst :)
Ich habe auch angemerkt , dass Polynome nicht immer sinnvoll sind (in diesem Fall sind sie es beispielsweise nicht ) - die Matlab CurveFitting-Toolbox hat allerdings wesentlich mehr drauf.
Aber du hast recht: ich hätte auf die gesamte Toolbox verweisen sollen - ein polynomieller Ansatz wäre hier vermutlich nicht zielführend.
Gruß
Thomas
>
|
|
|
|
|
> Im Rahmen meiner Masterarbeit (grob zum Thema "Verhalten
> von Schadstoffen im Boden") habe ich Messwerte ermittelt,
> zu denen ich Funktionen aufstellen möchte. Leider folgen
> die Messwerte keiner mir bekannten Funktion. Meine Frage
> ist ob es eine Funktion in Matlab oder einer anderen freien
> Software gibt, die die Funktionsgleichung zu einem Graphen,
> den ich durch einzelne (x,y)-Werte vorgebe, ermitteln
> kann?
>
> Ein Beispiel:
> Meine Messwerte geben mir den blauen Graphen vor.
> [Dateianhang nicht öffentlich]
>
> Den roten Graphen hab ich geraten:
> [mm]f(a1,x,b,k,a2,a3)=[a1*(x^b/(e^{k*x}-a2)]*a3[/mm]
> Durch viel rumprobieren und mit dem Solver aus Excel
> (Methode der kleinsten Quadrate) habe ich versucht ihn an
> den blauen Graphen anzupassen. Es gibt aber Probleme:
> 1. Ich bin mit dem Ergebnis immer noch nicht ganz
> zufrieden.
> 2. Dieses Vorgehen ist sehr zeitaufwendig und da ich
> mehrere Graphen auf diese Weise auswerten muss, ist es für
> mich nicht praktikabel.
> 3. Was mache ich, wenn ich nicht das Glück habe, alle
> nötigen Variabeln zu erraten?!
Guten Abend,
ich möchte gar nicht auf Softwarelösungen eingehen, sondern
lieber etwas dazu sagen, wie man auch ohne solche Hilfen
wenigstens einen guten Anfang machen kann.
Wichtig ist vor allem, die wesentlichen Eigenschaften
des gesuchten Graphen zuerst festzuschreiben und auch
über die Art des Kurvenverlaufs möglichst sinnvolle Annahmen
zu treffen und dann erst auf dieser Basis ein bestimmtes
Modell zu entwickeln.
Aus deinem Bild entnehme ich:
1.) Offenbar ist ein Anfangswert f(0)=22 vorgegeben.
Ob diese Annahme zwingend ist oder nur im Rahmen
einer Messtoleranz zu verstehen ist, muss aus einer
inhaltlichen Prüfung hervorgehen.
2.) Bei beiden Kurven erfolgt zuerst ein (allerdings recht
unterschiedlich) starker Anstieg, gefolgt von einem
allmählichen Abstieg (rote Modellkurve), bei der blauen
Kurve haben wir aber zunächst einen steilen Abfall, auf
den wieder ein Anstieg (und wieder ein leichter Abfall ?)
folgt.
Ginge es nun nur darum, für die wenigen vorliegenden
(blauen) Messpunkte eine möglichst gut passende
Funktion zu finden, könnte man dies bestimmt deutlich
besser hinkriegen als mit dem rot dargestellten Modell.
Damit das Ganze aber einen etwas weiter tragenden
Wert bekommt, würde ich zunächst danach fragen, wie
verlässlich die gegebenen Messwerte überhaupt sind
und ob es nicht möglich wäre, eine verlässlichere
Messwertserie (mit mehr Messpunkten) zugrunde zu
legen.
Dann könnte man ein paar charakteristische Werte
festlegen:
Startwert f(0) ?
Lage des ersten Hochpunktes ?
Existenz eines Grenzwertes für große x-Werte ?
In einem weiteren Schritt kann man sich dann aus ein
paar geeigneten Grundfunktionen eine Modellfunktion
mit ein paar (so viele wie nötig, aber nicht zu viele)
Parametern zusammenbauen. Als Grundelemente
können hier etwa in Frage kommen:
[mm] $A*x*e^{-K*x}$ [/mm] (für den Anfangsanstieg und den ersten "Buckel")
[mm] $B*x*e^{-L*x}$ [/mm] (für den zweiten kleinen "Buckel")
konstanter Summand C (für die Festlegung von f(0)
Falls die Funktion für ganz große x nicht mehr zum
Startwert abfallen soll, ist ein weiterer Summand
notwendig, der z.B. von der Form [mm] $\frac{x}{M*x+N}$
[/mm]
sein könnte.
Man sieht aber schon: 6 Messpunkte und 7 Parameter -
das ist eher etwas zuviel des Guten, oder man sollte
sich wirklich zunächst um reichhaltigere Messdaten
kümmern.
LG , Al-Chw.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:32 So 26.10.2014 | Autor: | chrisno |
Hallo,
ich bin der Meinung, dass Du mit Deiner Frage schon einen Schritt zu weit bist.
Bevor Du Details Deiner Messwerte durch Funktionen beschreibst, musst Du erst etwas über die Genauigkeit Deiner Messwerte sagen. Konkret stelle ich hier die Frage:
Ist das kleine Maximum bei etwa 15 ein echtes Signal?
Du musst lang ausholen, um mich davon zu überzeugen.
Als nächstes merke ich an, dass es die absolute Notlösung ist, ohne Theorie nach einer Funktion zu suchen, die die Messwerte beschreibt. Wenn ich die Daten anschaue, dann stelle ich zuerst die Frage:
Was ist für die Zeit vor Null bekannt?
Eine typische Annahme wäre, dass der Wert konstant war. Die andere Annahme ist, dass der Wert Null war, aber die Messung erst verspätet einsetzt.
Die Abbildung sieht für mich nach folgendem Geschehen aus:
Eine Substanz, deren Konzentration gemessen wird, wird dem untersuchen System zugeführt. An der Messstelle macht ich dies durch den Anstieg bis ungefähr 2 bemerkbar. Danach dominiert der Abbau der Substanz oder eine gleichmäßige Verteilung. Für diese bietet sich ein exponentieller Abfall an, der sich etwa 25 annähert.
Eine Faustregel sagt, dass für jeden Parameter, denn Du anpasst, mindestens drei Messwerte vorliegen sollten. Mit sechs Messwerten wären das nur zwei Parameter. Du verwendest aber 5. Allerdings sehe ich wenig Chancen, so einen Verlauf mit weniger Parametern zu beschreiben. Um so wichtiger ist es, eine Theorie für den Vorgang zu haben, aus der sich eine Funktion ergibt.
Wie sehen die anderen Daten aus? Sind das ähnliche Verläufe?
Ich schließe mich der Meinung an, dass Gnuplot für die Auswertung dieser Daten geeignet ist.
|
|
|
|