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

Nichtlineare regression

 

Jul
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 08.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2009, 09:17     Titel: Nichtlineare regression
  Antworten mit Zitat      
Hallo,

ich hab versucht mittels Matlab eine Gleichung an einen Datensatz heranzufitten, was mir jedoch nicht so recht gelingen will. Ich kriege zwar Ergebnisse, jedoch sind diese erstens falsch (bzw. alles andere als optimal) und zweitens varieren sie stark mit dem Startwert vom Algorithmus. Aber nun mal zum Code:

Code:

x0=[1;1;1];
[x,resnorm,residual,exitflag] = lsqcurvefit(@NRTL,x0,X,g);
x
 


mit der dazugehörigen Function:
Code:

 function nrtlgl=NTRL(x,X)

 %x sind Parameter, X sind Eingangsdaten
 %und g die Ausgangsdaten Gamma
 
 
 
 T=X(:,1);
 w=X(:,2);
 
 g12=x(1);
 g21=x(2);
 a=x(3);
 
 
T12=g12./(8.314472.*T);
T21=g21./(8.314472.*T);
 
G12=exp(-a.*T12);
G21=exp(-a.*T21);
 
 nrtlgl=exp((1-w).^2.*(T21.*(G21./(w+(1-w).*G21)).^2+T12.*G12./((1-w)+w.*G12).^2));

 


Es gilt a, g12 und g21 herauszufinden. Für einen bestimmten Datensatz kenn ich sogar eine Lösung, diese findet Matlab aber bei weitem nicht:

Und den Datensatz (auch als Exceldatei angehängt): falls er benötigt würde, die optimale Lösung hierfür wäre: g12=11818,04; g21=-6535,34 und a=0,7526
T ; w ; g
327,26 0,977799 0,98
335,12 0,977799 0,982
341,15 0,977799 0,983
346,07 0,977799 0,985
350,31 0,977799 0,985
354,16 0,977799 0,987
357,58 0,977799 0,987
360,99 0,977799 0,987
364,58 0,977799 0,986
367,71 0,977799 0,987
324,01 0,96462 0,959
333,16 0,96462 0,963
340,33 0,96462 0,963
346,16 0,96462 0,963
351,38 0,96462 0,966
355,78 0,96462 0,967
359,65 0,96462 0,968
363,02 0,96462 0,971
366,71 0,96462 0,968
369,8 0,96462 0,969
329,92 0,947212 0,955
337,27 0,947212 0,959
343,22 0,947212 0,957
348,24 0,947212 0,959
352,84 0,947212 0,963
357,17 0,947212 0,966
360,8 0,947212 0,964
364,39 0,947212 0,957
367,58 0,947212 0,957
370,32 0,947212 0,958
334,93 0,862862 0,701
344,1 0,862862 0,695
351,72 0,862862 0,689
357,82 0,862862 0,692
363,23 0,862862 0,694
367,8 0,862862 0,696
371,93 0,862862 0,712
373,26 0,862862 0,783

bsp.xls
 Beschreibung:

Download
 Dateiname:  bsp.xls
 Dateigröße:  16 KB
 Heruntergeladen:  779 mal
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 08.06.2009, 13:38     Titel:
  Antworten mit Zitat      
Hallo,

- die Startwerte sind SEHR weit von den erwarteten Werten weg, d.h., lsqcurvefit muss lange iterieren, bevor es in die nähe kommt.
- daher kommt die Warnung:
"lsqcurvefit stopped because it exceeded the function evaluation limit"
- erlaubt man dem Solver mehr Iterationen
Code:
opt = optimset('MaxFunEvals', 100000, 'MaxIter', 5000);
[x,resnorm,residual,exitflag] = lsqcurvefit(@NTRL,x0,X,g,[],[], opt);
 

bekommt man auch (nach langer Zeit) vernünftige Werte.
- Am besten allerdings ist es, vernünftige Startwerte zu setzen, die in der Größenordnung des erwarteten Ergebnisses liegen, z.B.
x0=[10000;-6000;1];
- die Funktion scheint viele lokale Minima zu haben. Obige Startwerte führen zu einem Ergebnis, das besser als das unten angegebene ist (im Sinne der Fehlerabweichung). Ob es das bessere Ergebnis in Bezug auf das ist, was man haben möchte, kann ich nichts sagen.

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 22.10.2012, 14:16     Titel:
  Antworten mit Zitat      
Da ich selbst die letzten Tage an einer derartigen Problematik gearbeitet habe, hier noch eine Antwort auf die Frage, eher für Leute, die durch die Forensuche darauf stoßen.

lsqcurvefit optimiert lokal, daher hängt die Lösung sehr stark von den Startwerten ab.

Beispielsweise bei komplizierten Modellfunktionen zur Approximation/Regression von Punktwolken ist man natürlich an einem guten Kurvenverlauf interessiert. Das führt unweigerlich zu einer globalen Optimierung mit einem mitunter komplexen Lösungsraum und einer an vielen Stellen nicht diff'baren Zielfunktion. Hier spielt der Genetische Algorithmus seine Stärken aus. Dabei sollte man darauf achten, dass dieser über die Parameter (gaoptimset) gut eingestellt wird. Die Populationsgröße ist entscheidend für die Güte der Lösung.
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 - 2024 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.