Ich soll mit MatLab eine Kurve fitten die die Funktion y(x)=a*exp(b(x-c))+d haben soll. Das entspricht optisch auch recht gut meinen Messwerten.
Wenn ich jetzt aber das cftool mit meiner eigenen Gleichung nutzen will bekomme ich Koeffizienten die überhaupt nicht passen können und eine Funktion die praktisch mit Steigung 0 durch alle Punkte rauscht.
die Fit-Routinen suchen ausgehend von einem Startwert nach einem lokalen Minimum. Wenn das Ergebnis schlecht ist, ist es eben "nur" ein lokales Minimum statt des gewünschten globalen Minimums. Das Problem liegt also in aller Regel weniger bei MATLAB als bei zu schlechten Startwerten.
Also mal auf die Fit Options gehen, vernünftige Startwerte vorgeben, und schon sollte es klappen.
Falls das nicht weiterhilft, bitte mal die Daten zur Verfügung stellen.
Grüße,
Harald
Manu1707
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.05.2014, 19:18
Titel:
Ich habe schon alle Parameter angepasst, wie sie etwa sein sollten, aber komme einfach auf keinen Grünen zweig. Er legt mir immer eine Quasi-Gerade durch, die nicht zu den Messwerten passt.
Theoretisch passt ein Polynom-Fit deutlich besser, aber ich brauche die Koeffizienten des Exp-Fits.
Ich geb dir aber gern mal die Wertepaare und bin weiterhin für jeden Rat dankbar:
--> Exponential Fit auswählen --> ein wunderbarer Fit
Bei deinem Modell ist das Problem, dass es redundant ist.
f(x) = a*exp(b*(x-c)) + d = a*exp(-b*c) * exp(b*x) + d
Für den Vorfaktor a*exp(-b*c) gibt es unendlich viele Kombinationen aus a und c, die denselben Vorfaktor bewirken. Das Modell ist also redundant und somit nicht sinnvoll.
Mit a=1, b=-0.37, c=0, d=0 bekommt man zwar gute Ergebnisse, allerdings bringt das recht wenig, da man aufgrund der Redundanz beispielsweise mit a = 2.72, b=-0.37, c=1, d=0 andere, aber natürlich gleichwertige Ergebnisse bekommt.
Grüße,
Harald
Manu1707
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.05.2014, 22:11
Titel:
Hm danke da hast du natürlich recht, da hab ich mich etwas blind an die "Anleitung" gehalten :/
Aber der Ansatz a*exp(b*x) + c dürfte doch nicht gleichwertig wie der Ansatz a*exp(b*x) sein, oder?
Und der funktioniert ähnlich schlecht
eben ein Freiheitsgrad mehr. Und du bist immer abhängg von Startwerten.
Für ein Beispiel habe ich dir ja gezeigt, wie du mit geeigneten Startwerten zum Ziel kommst. Im Zweifelsfall a*exp(b*x) fitten lassen und die optimalen Parameter davon und zusätzlich c=0 als Startwerte nehmen, dann sollte es gut klappen.
Grüße,
Harald
Manu1707
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.05.2014, 22:31
Titel:
Hey,
super dein Tipp hat wunderbar geklappt!
Könntest du mir noch grob erklären, warum das funktioniert?
Also die Koeffizienten vom a*exp(b*x) Fit und c=0 verwenden als Startparameter für den a*exp(b*x)+c Fit?
Ansonsten schonmal einen schönen Abend und vielen, vielen Dank!
a*exp(b*x) ist ein Standardmodell, d.h. MATLAB weiß, wie es dabei die Startwerte zu wählen hat (bzw. wahrscheinlich wird das intern in ein lineares Modell umgewandelt).
Die optimalen Parameter dieses Fits sind zusammen mit c=0 gute Startwerte für das erweiterte Modell, und somit hat man gute Chancen, ein globales Minimum zu finden.
Auch dir noch einen schönen Abend!
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.