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

Abbruchkriterim bzw. Fitting verfeinern

 

TheFinger
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2012, 11:37     Titel: Abbruchkriterim bzw. Fitting verfeinern
  Antworten mit Zitat      
Hallo Zusammen,

ich suche einen Fitting für eine Kurve aus Messdaten. Ich bekomme zwar eine schöne Approximation, leider ist diese nicht genau genug: Fehler ist etwa bei 10%. Wie kann ich das in Matlab programmieren dass der Code erst aufhören soll einen Fit zu finden wenn der Fehler mindestens bei 2% liegt.
Bzw. wie kann ich meine Fiitingoptionen einstellen, so dass die ermittelte Approximation maximal 2% von den Messdaten abweicht.
Hier ist ein Einblick von meinem Fitting:
Code:

st_ = [0.7215 0.46377 0.98355];
fo_= fitoptions('method','NonlinearLeastSquares','Lower',[0 0 -5],'Upper',[5 10 5],'Startpoint',st_);
ft_= fittype('(1+(b1*exp(b2.*X^b3)*X.^(-0.925)).^6.8171).^(1/6.8171)','dependent',{'y'},'independent',{'X'},'coefficients',{'b1','b2','b3'});
cf_= fit(X(:,1),Y(:,1),ft_,fo_);
cff(:,i)= cf_(X);
Err(:,i)=(Y(:,1)-cff(:,i))./Y(:,1);
 

P.S: Außerdem kommt folgende Meldung: Maximum number of function evaluations exceeded. Increasing
MaxFunEvals (in fit options) may allow for a better fit, or
the current equation may not be a good model for the data.

Vielen Dank für eure Unterstützung
Miriam
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.03.2012, 19:46     Titel:
  Antworten mit Zitat      
Hallo,

das "P.S." ist das entscheidende. MATLAB sagt dir hier ja eben, dass es vorzeitig abgebrochen hat. Und es sagt dir vor allem auch noch genau, was du tun musst, um das Problem zu lösen. Jetzt musst du es eigentlich nur noch tun, und bei fitoptions eine größere Anzahl Iterationen angeben:
Code:

fo_= fitoptions('method','NonlinearLeastSquares','Lower',[0 0 -5],'Upper',[5 10 5],'Startpoint',st_, 'maxfunevals', 3000);


Wenn die Meldung dann immer noch kommt und es zu ungenau ist, maxfunevals weiter erhöhen. Wenn es nicht mehr kommt und es zu ungenau ist, dann liegt es an deinem Modell.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
eRzBeNgEl
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 17.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2012, 21:46     Titel:
  Antworten mit Zitat      
Hi Harald & Co.

Ich hätte ebenfalls eine Frage zur Fitting Toolbox, der Grundcode ist der oben von TheFinger genannte.

Meine Aufgabe ist folgende: Ich habe einen Kurvenverlauf der numerische erfasst wurde. Diesen versuche ich über einen exponentiellen Ansatz mit Wurzel, etc... anzunähern. Der lokale Fehler darf maximal 2% betragen. Eingangswerte sind ein Startwert sowie ein Intervall:c=(X:0,01:Y)

Um die Nährung zu optimieren rechne eich einen gemittelten Fehler aus (Mit der Bedingung dass der Fehler maixmal zwischen 1.9 und 2.1 % liegen darf. Hiermit bekomme ich die Stützstellen heraus an denen der Fehler minimal ist. Diese möchte ich nun als mein neues Intervall definieren. Es folgt:
c = (X_neu:0,01:Y_Neu). Das Iterationsdelta setzte ich nun auf 0,001 -> c_neu = (X_neu,0,001,Y_neu). Nun durchlaufe ich die Schleife mit dem gemittelten Fehler erneut, Mein Problem ist folgendes: Da Fitting reagiert äußerst sensitiv. Änder ich den X-Wert oder Y-Wert im Intervall nur um 1/100 ergeben sich teilweise sehr viel größere Fehler. Mein Wunsch ist dass ich das Intervall allerdings allgemein wählen kann. Also einen Bereich zwischen 1-10 und dass sich über die Iterationen hinweg (bzw. die Optimierungsschleifen hindurch) das Intervall so anpasst, dass es immer genauer wird bzw. der gemittelte Fehler einfach kleiner wird.

Beispiel:
Manuell gewähltes Intervall: c=(0,42;0,01;0,43) -> gemittelten Fehler von 2%
Nun definiere ich 0,42=c_neu 0,43=d
mein neues Intervall lautetr c=(c_neu-0,01;0,001;y_neu+0,01): der gemittelte Fehler liegt bei den gefundenen Werte nun größer als 3%. Warum ist das so?

Momentan erfasst ich das "perfekte" Intervall manuell. Zeit kostete Geld und Nerven -> eine Automatisierung muss her Smile

Vielen Dank für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
TheFinger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2012, 09:16     Titel:
  Antworten mit Zitat      
Also ich habe mittlerweile auch ein ähnliches Problem wie ERZBENGEL.
Ich möchte eine Kurve mit der Fit-Funktion approximieren und den Fit OPTIMIEREN. Leider wird immer eine gute Lösung gegeben aber nicht die aller beste Möglichkeit. Ich habe versucht meinen Fit zu verbessern indem ich eine While Schleife eingebaut habe um das Intervall wo meine Koeffizienten sind zu variiieren und um meinen Fehler unter einem bestimmten Wert zu halten. Es scheint aber nicht optimal zu funktionieren.
Kann mir jemand dabei helfen, die Fit-Funktion so zu optimieren dass die gefundene Approximation nicht mehr als 0.5% von der Originalkurve abweicht.
Was mich auch stört dass ich das Intervall für die Koeffizienten manuell eingeben muss und ständig manuell ändern muss um eine bessere Lösung zu finden. Wie geht es so was zu programmieren??
Wie kann ich die Fit-Funktion dazu zwingen die aller beste Lösung zu finden und nicht die nächst gute Lösung??

Im Anhang sind mein Matlb-Code und die Datei Nusselt, die meine Messdaten beinhaltet die ich mit Fit approximieren möchte.

Es ist dringend und ich bin für jede Hilfe dankbar
Miriam

Nusselt.txt
 Beschreibung:

Download
 Dateiname:  Nusselt.txt
 Dateigröße:  312.67 KB
 Heruntergeladen:  292 mal
IterationAnsatz1_1000_0015.m
 Beschreibung:

Download
 Dateiname:  IterationAnsatz1_1000_0015.m
 Dateigröße:  2.45 KB
 Heruntergeladen:  251 mal
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.