WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

MatLab fittet falsch

 

Manu1707

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2014, 15:29     Titel: MatLab fittet falsch
  Antworten mit Zitat      
Hey Leute,

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.

Könnt ihr mir vielleicht helfen?


Manu1707

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2014, 17:08     Titel:
  Antworten mit Zitat      
Hier noch das Bild dazu Wink

drff.PNG
 Beschreibung:

Download
 Dateiname:  drff.PNG
 Dateigröße:  125.43 KB
 Heruntergeladen:  320 mal
drff.PNG
 Beschreibung:

Download
 Dateiname:  drff.PNG
 Dateigröße:  125.43 KB
 Heruntergeladen:  311 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2014, 18:24     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Manu1707

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2014, 19:18     Titel:
  Antworten mit Zitat      
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:

Funktion: f(x) = a*exp(b*(x-c)) + d
1.:
Code:
lambda1  = [6.907E-07, 6.234E-07, 5.791E-07, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.047E-07];
winkel1 = [38.4, 38.45, 38.7, 38.85, 39.15, 39.15, 39.55, 39.9];


2.:
Code:
lambda2  = [6.907E-07, 6.234E-07, 5.791E-07, 0.000000577, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.078E-07, 4.047E-07];
winkel2  = [47.6, 48.1, 48.35, 48.4, 48.75, 49.35, 49.45, 50.45, 51.35, 51.5];


3.:
Code:
lambda3  = [6.907E-07, 6.234E-07, 5.791E-07, 0.000000577, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.078E-07, 4.047E-07];
winkel3 = [58.45, 59.15, 59.7, 59.8, 60.3, 61.5, 61.65, 63.15, 65.3, 65.6];



1.1
Code:
lambda1  = [6.907E-07, 6.234E-07, 5.791E-07, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.047E-07];
index1  = [1.513990111, 1.514560184, 1.517406221, 1.519110378, 1.522510879, 1.522510879, 1.527028644, 1.530966427];


2.1:
Code:
lambda2  = [6.907E-07, 6.234E-07, 5.791E-07, 0.000000577, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.078E-07, 4.047E-07];
index2  = [1.613920624, 1.619059251, 1.621617012, 1.622127638, 1.625693369, 1.631770749, 1.632779301, 1.642796303, 1.651704662, 1.653179498];


3.1:
Code:
lambda3  = [6.907E-07, 6.234E-07, 5.791E-07, 0.000000577, 5.461E-07, 4.992E-07, 4.916E-07, 4.358E-07, 4.078E-07, 4.047E-07];
index3 = [1.718366472, 1.724585576, 1.729426881, 1.730302841, 1.734662863, 1.744992014, 1.746269726, 1.758881918, 1.776433294, 1.778832747];
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2014, 20:39     Titel:
  Antworten mit Zitat      
Hallo,

bei dem ersten Wertepaar
Code:
cftool(winkel1, lambda1)

--> 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
Private Nachricht senden Benutzer-Profile anzeigen
 
Manu1707

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2014, 22:11     Titel:
  Antworten mit Zitat      
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
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2014, 22:26     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Manu1707

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2014, 22:31     Titel:
  Antworten mit Zitat      
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! Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2014, 23:02     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.