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 TB: Funktion csape - Vorgeben der Potenz

 

rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 08.09.2015, 11:37     Titel: Curve Fitting TB: Funktion csape - Vorgeben der Potenz
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem mit der Funktion csape und hoffe auf eure Hilfe.

Kurz zum Hintergrund:
Ich habe Stützstellen berechnet (Kreise, weiß gefüllt) und möchte diese Daten nun aus bestimmten Gründen mit so wenigen Daten wie möglich vereinfachen. Dazu habe ich aus den Stützstellen drei Datenpunkte (Kreise, blau gefüllt) und deren Gradienten als Randbedingung gewählt.

Nun möchte ich mir aus diesen Informationen Splines berechnen lassen und mir die Abweichung zu den Originaldaten (Kreise bzw. rote Linie) ansehen.

Da ich die Randbedingungen vorgeben möchte komme ich (denke ich bislang) um die Funktion csape nicht herum.

Versuch 1:
Die drei Punkte an die Funktion mit zwei Randbedingungen übergeben. Das ist die einfachste Lösung, leider auch die ungenauste (hellblaue Linie).

Versuch 2:
Beide Segmente separat berechnen. Segment 1 (schwarz) passt dabei schon sehr gut, das zweite Segment (grün) leider absolut nicht.

Ich denke das beides mit dem Grad/Ordnung/Potenz der Funktion (hier von Matlab "4") zu tun hat. Gibt es eine Möglichtkeit diese bei der Berechnung vorzugeben oder gar einen einfacheren bzw. für meinen Fall besseren Lösungsansatz?

Im Netz oder gar in der Matlab-Hilfe bin ich bis dato leider nicht weitergekommen und die Zeit eilt einwenig. Da die Zeit leider einwenig eilt und ich auf die Lösung des Problems angewiesen bin, bin ich euch für eure Hilfe sehr dankbar.


Hier mein Minimalbeispiel:
Code:
clear all
clc

xData = [32.9786; 32.9536; 32.9226; 32.8828; 32.8310; 32.7619; 32.6675; 32.5394; 32.3785; 32.1908; 31.9781;31.7401; 31.4725; 31.1737; 30.8408; 30.4637; 30.0357; 29.5282; 28.9008; 27.9987];
yData = [0.7843; 0.7967; 0.8092; 0.8214; 0.8333; 0.8445; 0.8543; 0.8621; 0.8678; 0.8721; 0.8753; 0.8775; 0.8785; 0.8784; 0.8771; 0.8743; 0.8699; 0.8627; 0.8514; 0.8301];

extrema = [27.9987, 0.8301;
           31.4725, 0.8785;
           32.9786, 0.7843];


% Plot data of yData over xData and fit piecewise polynom to data
plot(xData,yData,'o');
hold on
sRef = csape(xData,yData);
fnplt(sRef);

% Plot extrema as blue filled circles
plot(extrema(:,1),extrema(:,2),'o','Color','b','MarkerFaceColor','b');
hold on

% Calculate gradients for extrema out of first derivate
this.df = fnder(sRef,1);
gradients = fnval(this.df,extrema(:,1));

% Create piecewise polynom for each segment
s0 = csape(extrema(1:2,1),extrema(1:2,2),'clamped',[gradients(1),gradients(2)]);
s1 = csape(extrema(2:3,1),extrema(2:3,2),'clamped',[gradients(2),gradients(3)]);

% Create a whole piecewise polynom with boundary conditions (derivatives)
s2 = csape(extrema(:,1),extrema(:,2),'clamped',[gradients(1),gradients(3)]);


fnplt(s0,2);
hold on
fnplt(s1,2);
hold on
fnplt(s2,2);
hold on



Ganz herzlichen Dank,

Jonas

Fig1.jpg
 Beschreibung:

Download
 Dateiname:  Fig1.jpg
 Dateigröße:  19.18 KB
 Heruntergeladen:  555 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.