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

Polynome hinter Smoothing Spline

 

Tanjawillswissen
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2015, 17:46     Titel: Polynome hinter Smoothing Spline
  Antworten mit Zitat      
Hallo,

ich untersuche gerade experimentelle Daten mit Smoothing Spline.
Das Programm dazu sieht so aus:

Code:

function [fitresult, gof] = createFit(height_m, rho_verlauf_exp_kg_m3)
%CREATEFIT(HEIGHT_M,RHO_VERLAUF_EXP_KG_M3)
%  Create a fit.
%
%  Data for 'untitled fit 1' fit:
%      X Input : height_m
%      Y Output: rho_verlauf_exp_kg_m3
%  Output:
%      fitresult : a fit object representing the fit.
%      gof : structure with goodness-of fit info.
%
%  See also FIT, CFIT, SFIT.

%  Auto-generated by MATLAB on 08-Oct-2015 13:56:12


%% Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( height_m, rho_verlauf_exp_kg_m3 );

% Set up fittype and options.
ft = fittype( 'smoothingspline' );

% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft );

% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'rho_verlauf_exp_kg_m3 vs. height_m', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes
xlabel height_m
ylabel rho_verlauf_exp_kg_m3
grid on

 


mit

Code:

height_m =

   1.0e-03 *

   [0.563440860215053;
   0.475268817204301;
   0.412903225806451;
   0.354838709677419;
   0.305376344086021;
   0.268817204301075;
   0.230107526881720;
   0.197849462365591;
   0.163440860215053;
   0.126881720430107;
   0.098924731182796;
   0.068817204301075;
   0.043010752688172;
   0.017204301075269]
 


und

Code:


rho_verlauf_exp_kg_m3 =

1.0e+03 *

   [0.999509915646601;
   0.999682606681161;
   0.999855297715721;
   1.000027988750281;
   1.000200679784840;
   1.000373370819400;
   1.000537838471362;
   1.000702306123323;
   1.000874997157883;
   1.001055911575041;
   1.001228602609601;
   1.001393070261563;
   1.001565761296122;
   1.001738452330682]

 



Das Ganze sieht auch gut aus. Mit fitresult.p.coefs kann ich mir jetzt die Koeffizienten der Polynome ausgeben lassen, allerdings finde ich nicht heraus, wie diese Polynome dann aussehen...kann mir da jemand helfen? Ich denke, es sind kubische splines, stimmt das?
Also wie muss ich ein Polynom schreiben, um an einer Stelle x (an einem Wert von height_m) den entsprechenden Wert y (also den Wert von rho_verlauf_exp_kg_m3) zu bekommen?

Ich weiß, das ist eigentlich die gleiche Frage wie bei CubaMan:

http://www.gomatlab.de/curve-fittin.....ght,smoothing+spline.html

Ich brauche allerdings die Funktion, die hinter fittedmodel steckt, um auch Ableitungen der Splines zu berechnen.

Vielen Dank schon mal für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 21.12.2015, 13:57     Titel:
  Antworten mit Zitat      
Hallo Tanja,

ich habe mich mal deinem Problem angenommen. Ich habe eine sehr viel elegantere Lösung für dein Problem, leider aber auch eine sehr komplizierte, falls du dich mit den Details auseinandersetzen willst.

In deinem Fall würde ich die Cubic Smoothing Splines benutzen http://de.mathworks.com/help/curvefit/csaps.html
Diese sind von einem Glättungsfaktor (Lambda) abhängig. Diesen kannst du zwischen einschließlich 0 bis 1 wählen, also eine prozentuale Gewichtung einstellen. Für Lambda gegen 1 erhälst du einen Spline der exakt durch alle Messdaten geht (kein Glättungseffekt). Für Lambda gegen 0 erhälst du eine Regressionsgerade (starke Glättung). I.d.R. versucht du also einen Wert zwischen 0 und 1 zu finden, der eine optisch gute Glättung erzielt. FÜr deinen Fall würde ich Lambda gleich 0.9999999999999 wählen. Wie das Lambda zu wählen ist, ist nicht immer ganz klar, z.b. ist der Spline für deine Messdaten schon bei einem Lambda von 0.99999999 ungefähr einen Regressionsgerade.

Der Vorteil dieser Variante ist, um auf deine Frage zurück zu kommen, dass in dem struct "pp" alle Informationen enthalten sind. Mit pp.coefs kannst du z.b. alle koeffizienten der stückweisen Polynome aufrufen.

Viele Grüße,
Friidayy

tanjawillswissen.m
 Beschreibung:

Download
 Dateiname:  tanjawillswissen.m
 Dateigröße:  873 Bytes
 Heruntergeladen:  518 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 - 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.