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

Probleme beim Kurvenfitting mit lsqnonlin

 

Schunki
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 12:10     Titel: Probleme beim Kurvenfitting mit lsqnonlin
  Antworten mit Zitat      
Hallo zusammen,

ich habe hier ein Problem mit einem Kurvenfitting.
Und zwar habe ich 3 Vektoren. Der erste dient als X-Wert, die beiden anderen sind Y-Werte (eigentlich sind es noch mehr Vektoren, aber ich habe jetzt erst mal nur zwei raus gepickt). Die Y-Werte sind Messergebnisse die jetzt dargestellt werden müssen und an die Funktion

\sum\limits_{i=1}^n A_{i} *(1-e^{-\frac{x}{B_{i} } } )

angefittet werden muss. Wobei hier n=4 ist.

Das Problem ist, dass es bei einigen Kurven perfekt funktioniert und bei anderen absolut daneben liegt (siehe Grafik).

Ich habe die Kurve wie folgt gefittet:

Code:

function diff = fit_simp(x,X,Y)
A=x(1);
B=x(2);
C=x(3);
D=x(4);
E=x(5);
F=x(6);
G=x(7);
H=x(8);
I=x(9);
diff = A + B.*(1-exp(-(X./C))) + D.*(1-exp(-(X./E))) + F.*(1-exp(-(X./G)))+ H.*(1-exp(-(X./I)))-Y;

data=xlsread('daten.xlsx')
ton_tau=data(3:342,2)';
data_06=data(3:342,8)';
data_07=data(3:342,9)';
fit_06=zeros(1,340);
fit_07=zeros(1,340);

% Setzen der Optionen für LSQNONLIN um die Kurve zu fitten
options = optimset('largeScale','off','Algorithm','levenberg-marquardt','Display','none','MaxFunEvals',10000,'TolFun',1e-009,'MaxIter',1000);
 
% Initialisieren der Koeffizienten für die Funktion
X0=[1 1 1 1 1 1 1 1 1];

x=lsqnonlin(@fit_simp,X0,[],[],options,ton_tau,data_06);
fit_06 = x(1) + x(2).*(1-exp(-(ton_tau./x(3)))) + x(4).*(1-exp(-(ton_tau./x(5)))) + x(6).*(1-exp(-(ton_tau./x(7))))+ x(8).*(1-exp(-(ton_tau./x(9))));

x=lsqnonlin(@fit_simp,X0,[],[],options,ton_tau,data_07);
fit_07 = x(1) + x(2).*(1-exp(-(ton_tau./x(3)))) + x(4).*(1-exp(-(ton_tau./x(5)))) + x(6).*(1-exp(-(ton_tau./x(7))))+ x(8).*(1-exp(-(ton_tau./x(9))));

 


Kann mir hier jemand sagen, wo mein Problem her kommt? Warum fittet Matlab die eine Kurve super an die Messdaten an und die andere liegt voll daneben?

Ich sag schon mal vorab vielen Dank für Eure Antworten und Hilfen!


Gruß
Andreas[/code]

Messergebniss_06_07.JPG
 Beschreibung:

Download
 Dateiname:  Messergebniss_06_07.JPG
 Dateigröße:  67.1 KB
 Heruntergeladen:  440 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2013, 14:33     Titel:
  Antworten mit Zitat      
Hallo,

das Problem wird sein, dass lsqnonlin in ein lokales Minimum läuft. Hast du dir mal den dritten Rückgabeparameter (exitflag) angesehen?

Abhilfe kann z.B. durch bessere Startwerte geschaffen werden. Ein Vektor von Einsen ist z.B. sehr ungünstig, da du dann mehrere gleiche Modellteile hast.

Ist es zudem wirklich sinnvoll, hier vier solcher Terme zu nehmen? Erscheint mir ein wenig viel.

Wenn du einen konstanten Term hast, würde ich das "1-" in den anderen Funktionen weglassen. Das Modell ist äquivalent, aber es dürfte für lsqnonlin so wesentlich einfacher sein.

Für fit06 und fit07 kannst du übrigens nochmal fit_simp auswerten statt alles nochmal hinzuschreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Schunki
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 17:27     Titel:
  Antworten mit Zitat      
Danke für Deine Antworten!
Ich hab mich jetzt mal Manuel an die Messdaten angenähert und dann die Parameter meiner amnuellen Kurve als Startwerte für meine Fittingfunktion genommen. Damit hat's dann hingehauen!


Gruß
Andreas
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.