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

curve fitting problem

 

neuhier

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2008, 20:47     Titel: curve fitting problem
  Antworten mit Zitat      
Hallo, vielleicht hilf ein netter Mensch ? Smile

Habe den unten stehenden Code für mich angepasst.
Möchte die Gleichung, die unter diff steht nutzen, um die darin befindlichen parameter a,b,c,d zu fitten. dazu habe ich zwei datenreihen X und Y zur Verfügung. Diese lese ich aus einer Excel Tabelle ein.

Weiss erstens nicht ob ich die richtige Matlab FUnktion dafür ausgesucht habe (diese gibt anscheinend nur lokal gefittete werte?) und bekomme es nicht zum laufen.

freue mich über jeden hinweis.

der neue
Code:

%%
function diff = curvefit(x,X,Y)
% Diese Funktion wird mit LSQNONLIN aufgerufen.
% x ist ein Vektor welcher die Koeffizienten enthält
% X und Y sind die Daten die zu lsqnonlin übergeben werden
 
A   = x(1);
B   = x(2);
C   = x(3);
D = x(4);

diff = A*X + B*(C-A)*log((1+exp((X-D)/B))) - Y;
 


Code:

% Definition der Daten die ich zum fitten nutzen möchte
X = xlsread(filename,'A2:A57');
Y = xlsread(filename,'B2:B57');

% Initialisierung der Koeffizienten
X0=[1 1 1 1]';
 
% Wofür das ist weiss ich nicht LSQNONLIN
% "medium-scale algorithms"
options = optimset('Largescale','off');
 
% Hier berechnet er die neuen Koeffizienten LSQNONLIN
x=lsqnonlin(@curvefit,X0,[],[],options,X,Y);
 
% Original und gefittetes wird geplottet
Y_new = x(1)*X + x(2)*(x(3)-x(1))*log((1+exp((X-x(4))/x(2)))) - Y;
plot(X,Y,'+r',X,Y_new,'b')
 

Edit: Willkommen bei goMatlab, der neue!
Ich habe in Deinem Posting mal die Code-Umgebung ergänzt. Dadurch wird der Quelltext besser lesbar und es gibt keine Fehler mit Sonderzeichen.
Das kannst Du bei Deinen nächsten Postings auch ganz leicht selbst mit dem Code-Knopf oben in der Mitte machen.
mfg nschlange


der neue

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2008, 13:32     Titel: statt besserung eher verschlimmerung, dadurch ...
  Antworten mit Zitat      
... dass ich mitterweile "herausgefunden" habe, dass der von mir hier verfolgte ansatz auch nur ein lokales minimum ausgeben würde. D.h. ich müsste wohl diesem Code-Ansatz etwas voranstellen (oder anfügen), was globale werte ausspuckt. Oder geht es ganz anders und ich mach erstmal mit dem vorhandenen Code Ansatz eine Art parameter estimation und nutze diese Erkenntniss dann für eine Art verfeinerung an Hand dieser dann ermittelten Anfangswerte ... ganz durcheinander ... Smile

Danke fürs in Code-Form bringen Smile

der neue
 
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.