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

Fit einer Funktion an Daten

 

Netorha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2016, 21:27     Titel: Fit einer Funktion an Daten
  Antworten mit Zitat      
Hallo Leute,

ich stehe gerade vor einem (kleinen?) Problem. - Konkret geht es darum, dass ich Messdaten habe, an die ich eine bestehende Funktion dergestalt fitten will. Die Funktion beinhaltet dabei 3 frei wählbare Parameter - diese möchte ich optimal bestimmen.

Hierzu habe ich an die Möglichkeit eines (nichtlinearen) least-square-Fittes gedacht und nutze lsqcurvefit ; das Code-Snippet, das ich hierzu verwende ist folgendes:

Code:

load('teqv.mat','xdata');
load('hdgr.mat','ydata');
fun_jona = @(x,xdata)exp(x(1)*log(1+xdata/x(2)).^x(3));
x0 = [-3.413;2.100;-1.451];
x_fit = lsqcurvefit(fun_jona,x0,xdata,ydata);

% arr_results
for ii=1:size(xdata,1)
 
    if ii~=1                                        
        arr_hydr_fit(ii,1) = exp(x_fit(1)*log(1+xdata(ii,1)/x_fit(2))^x_fit(3));    
    else      
        arr_hydr_fit(ii,1) = 0;        
    end
   
end


% plot
figure(1);
semilogx(xdata,ydata, 'o');
hold on;
semilogx(xdata,arr_hydr_fit, 'color', 'red');
legend('measurement', 'fit', 'Location', 'SouthEast');
xlabel('xData');
ylabel('yData');
title('DataFit (measurement and fit)');
 


... die entsprechenden Daten-Arrays können dem *.zip-File im Anhang entnommen werden. Ebenfalls ist der Plot enthalten, den ich mit dem Snippet erzeuge.

Soweit funktioniert das eigentlich ganz gut - wenn man sich den Fit ansieht, merkt man allerdings, dass vor allem gegen "Ende" (d.h. b höheren x-Werten) die Messdaten und der Fit recht ungeschickt auseinanderlaufen ...

Und das ist das Problem. - Gibt es eine Möglichkeit, den gezeigten Fit 'besser' hinzubekommen? So, dass es keine derartige große Abweichung am Ende gibt?
(Gibt es "bessere" Fitting-Methoden? Mir fiel hierzu nur der LeastSquares-Fit ein.)

Ansonsten habe ich mir gedacht, könnte man die Funktion eventuell abschnittsweise fitten ... also so, dass z.B. eigene Parameter für einen bestimmten Anfangsbereich, eigene für einen Mittenbereich, und wiederum eigene für Endbereich durch den LeastSquares fit gefunden werden und man dann eine gefittete Funktion mit Fallunterscheidung erhält. (so z.B.: von xData1 bis xData10: Parametersatz 1; xData10 bis xData 40: Parametersatz 2; ab xData40: Parametersatz 3 ...).

- Gibt es hierzu schon eine Möglichkeit, einen derartigen "abschnittsweisen Fit" vorzunehmen? Oder wie könnte man das am besten selbst umsetzen? - Die Übergänge sollten möglichst "fließend" erfolgen, d.h. hier sollten jeweils die Tangenten dieselben sein, um keine Sprünge zu erhalten...

Irgendwie sind das lauter Fragen, aber vielleicht hat das jemand von Euch schon einmal gemacht und kann mir hier mit ein paar Tipps weiterhelfen.

Vielen Dank im Voraus,
netorha

gomatlab.zip
 Beschreibung:
Daten für Code-Snippet und Beispielplot

Download
 Dateiname:  gomatlab.zip
 Dateigröße:  17.81 KB
 Heruntergeladen:  229 mal


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.