Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Interpolation zwischen Punkten
Autor
Beruf J Interpolation zwischen Punkten
Tim80
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 11.05.2015
Mitteilungen: 47
  Themenstart: 2017-06-20

Hallo, ich habe Punkte, bestehend aus x- und y-Koordinaten. Diese Punkte beschreiben die Kurve einer Epizykloide. Nun möchte ich zwischen den bestehenden Punkten interpolieren (kubisch) und anschließend plotten. Die x- und y-Koordinaten der Punkte sind abhängig von einem Drehwinkel t bzw. dessen Schrittweite dt. Mein Quellcode der die Kurve aus den berechneten Punkten plottet ist unten beigefügt. Der auskommentierte Quellcode ist ein Beispiel für eine Spline-Interpolation wie ich sie eigentlich anwenden wollte. Diese Methode funktioniert in meinem Fall allerdings nicht. Ich gehe davon aus, dass dies an der Abhängigkeit der Koordinaten vom Drehwinkel liegt. Kann mir jemand weiterhelfen? Grüße Tim \sourceon Matlab clear all, close all, clc, clf % x=[0:1:6]; % y=[3,0.5,2.5,6,2.5,0.5,0]; % % dt=[0:0.1:6]; % s1=interp1(x,y,dt); % s2=interp1(x,y,dt,'spline'); % % subplot(2,1,1) % title('Lineare Interpolation'); % hold on, grid on; % plot(x,y,'-ro'); % plot(x,y,'o',dt,s1,':.b'); % xlim([0 6]); % % subplot(2,1,2) % title('Spline Interpolation'); % hold on, grid on; % plot(x,y,'-ro'); % plot(x,y,'o',dt,s2,':.b'); % xlim([0 6]); %------------------------------------------------------------------------- ri=20; %Radius innerer Kreis ra=5; %Radius äußerer Kreis u=1; %Anzahl der Umläufe dt=1e-1; %Schrittweite Winkel t=[0:dt:u*2*pi]; %Winkel x=(ri+ra)*cos(t)-ra*cos((ri+ra)/ra*t); %x-Koordinaten y=(ri+ra)*sin(t)-ra*sin((ri+ra)/ra*t); %y-Koordinaten dts=1e-2; %Schrittweite neu (Interpolation) ts=[0:dt:u*2*pi]; %Winkel neu (Interpolation) s=interp1(x,y,ts); %Interpolation grid on, hold on; plot(x,y,':ro'); %Plot Kurve plot(x,y,ts,s,':.b'); %Plot Interpolation \sourceoff


   Profil
Tim80
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 11.05.2015
Mitteilungen: 47
  Beitrag No.1, vom Themenstarter, eingetragen 2017-06-20

Im Prinzip geht es mir darum, dass im Plot die einzelnen Punkte nicht linear mit einer Geraden verbunden werden, sondern dass dazwischen ein Spline liegt. Insbesondere in den Bögen verspreche ich mir bessere Ergebnisse davon. Ich konnte leider noch keine Lösung finden. Ich hoffe es hat von euch jemand eine Idee.


   Profil
majoka
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 25.02.2014
Mitteilungen: 810
  Beitrag No.2, eingetragen 2017-06-21

Das sollte so gehen: \sourceon Matlab clear all clc ri=20; %Radius innerer Kreis ra=5; %Radius äußerer Kreis u=1; %Anzahl der Umläufe dt=1e-1; %Schrittweite Winkel t=[0:dt:u*2*pi]; %Winkel x=(ri+ra)*cos(t)-ra*cos((ri+ra)/ra*t); %x-Koordinaten y=(ri+ra)*sin(t)-ra*sin((ri+ra)/ra*t); %y-Koordinaten dts=1e-2; %Schrittweite neu (Interpolation) ts=[0:dts:u*2*pi]; %Winkel neu (Interpolation) pp = spline(t,[x;y]); yy_spline = ppval(pp,ts); yy_linear = interp1(t,[x;y]',ts); grid on, hold on; plot(x,y,':ro'); %Plot Kurve plot(yy_spline(1,:),yy_spline(2,:),':.b'); %Plot Interpolation plot(yy_linear(:,1),yy_linear(:,2),'r'); %Plot Interpolation \sourceoff


   Profil
Tim80
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 11.05.2015
Mitteilungen: 47
  Beitrag No.3, vom Themenstarter, eingetragen 2017-06-21

Vielen Dank! Das funktioniert genau so wie ich es mir vorgestellt habe. Kurz noch eine Frage zur Funktionsweise der Interpolationen. Mit dt gibt die Schrittweite des Winkels vor und damit indirekt die Anzahl der Stützstelle bzw. den Abstand zwischen den einzelnen Stützstellen vor. dts ist die Schrittweite der Interpolation. Was aber wird damit genau festgelegt? Werden dadurch zwischen zwei Stützstellen im Abstand dts weitere Stützstellen erzeugt und dazwischen interpoliert? Wenn das so stimmt wie ich vermute und oben geschrieben habe, dann ist die Schrittweite dt hauptverantwortlich für den exakten Verlauf einer Kurve. dts hat nur Einfluss auf das was zwischen den durch dt erzeugten Stützstellen passiert. Will ich beispielsweise eine Kurve (durch Interpolation) an eine mathematisch exakt geplottete Kurve (unendlich kleine Schrittweite) anpassen, mit dem Ziel einer möglichst geringen Anzahl an Stützstellen, dann ist insbesondere eine gute Wahl von dt ausschlaggebend. Kann man das so betrachten? Grüße Tim


   Profil
majoka
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 25.02.2014
Mitteilungen: 810
  Beitrag No.4, eingetragen 2017-06-21

\quoteon(2017-06-21 10:33 - Tim80 in Beitrag No. 3) Mit dt gibt die Schrittweite des Winkels vor und damit indirekt die Anzahl der Stützstelle bzw. den Abstand zwischen den einzelnen Stützstellen vor. \quoteoff Die Anzahl der Stützstellen ergibt sich in der Praxis einfach. Möchte man beispielsweise verschiedene Messpunkte interpolieren, hat man häufig gar keine Chance die Anzahl der Messpunkte nachträglich zu erhöhen. \quoteon dts ist die Schrittweite der Interpolation. Was aber wird damit genau festgelegt? Werden dadurch zwischen zwei Stützstellen im Abstand dts weitere Stützstellen erzeugt und dazwischen interpoliert? \quoteoff Aus "dts" wird der Vektor ts bestimmt. Dieser gibt einfach an, für welche Werte man die Spline-Funktion auswerten möchte.


   Profil
Tim80 hat die Antworten auf ihre/seine Frage gesehen.
Tim80 hat selbst das Ok-Häkchen gesetzt.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]