|
|
spline toolbox; spap2; 2te Ableitung |
|
curvature |
Forum-Newbie
|
|
Beiträge: 1
|
|
|
|
Anmeldedatum: 03.11.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.11.2008, 16:20
Titel: spline toolbox; spap2; 2te Ableitung
|
|
|
|
|
Hallo, ich habe Probleme mit der Kontinuität der 2ten Ableitung unter Verwendung der 'least square approximation' spap2.
Vielleicht hat ja jemand von euch schon Erfahrung damit. Ich habe einen 2-dimensionalen Datensatz der eine Kurve beschreibt. Ich nutze die chord-legth Parametrisierung, um die Krümmung dieser Kurve bestimmen zu können.
Die zweite Ableitung (komponentenweise) ist aber nicht kontinuierlich. Soweit ich verstehe liegt das daran, dass die Spline in n-Polynome, abhängig von der Knotenzahl, unterteilt ist die seperat abgeleitet werden. An den Berührungspunkten entstehen dadurch Sprungstellen die meine 'echten' Ergebnisse überlagern. Ich habe es auch schon mit sp = spap2(1,k,x,y));, gefolgt von sp1 = spap2(newknt(sp),k,x,y)); versucht, weil dies eigentlich laut Handbuch k-2 kontinuierliche Ableitungen hervorbringen sollte. Dies ruft jedoch eine Fehlermeldung hervor 'at present this only works for univariate scalar-valued fkt'. Demnach funktioniert es nicht mit parametrisierten Daten.
Als Beispiel verwende ich folgende Funktion. sin(x)+(sin(x*0.5)+0.5)+(0.5*sin(x+3)) mit x=0:0.1:4*pi;
Wäre für jeden Vorschlag dankbar
programmcode:
function knots
close all
x = 0:0.1:4*pi;
y = sin(x)+(sin(x*0.5)+0.5)+(0.5*sin(x+3));
aPos = [y;x]';
%---- spap2 ------------------------------
%---- chord-length parametrization --------
df = diff(aPos)';
s = cumsum([0, sqrt([1 1]*(df.*df))]);
%------------------------------------------
%------------------------------------------
k = 4;
knots = 20;
rS = spap2(knots,k,s,flipud(aPos'));
%------------------------------------------
l = length (x)/10;
idx =0:0.1:l;
%~~~ curvature ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dx = fnval(fnder(fncmb(rS,[1 0])),idx);
dy = fnval(fnder(fncmb(rS,[0 1])),idx);
ddx = fnval(fnder(fncmb(rS,[1 0]),2),idx);
ddy = fnval(fnder(fncmb(rS,[0 1]),2),idx);
kappa = abs(ddx.*dy-ddy.*dx)./((dx.^2+dy.^2).^(3/2));
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%---------- plot --------------------------
figure; p_make_fig_full_screen()
subplot(1,2,1);
fnplt(rS); hold on;p_plotpos(aPos, 'xr'); axis ([-1 14 -1 2]);
legend ('spap2 after chord-length-parametrization','data');
subplot(1,2,2)
plot(kappa,'b'); hold on; legend('second derivative')
%-------------------------------------------
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|