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

Trajektorie erstellen

 

bbird
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2022, 13:50     Titel: Trajektorie erstellen
  Antworten mit Zitat      
Hallo zusammen,

Ich will aus 10 oder mehr Punkten (x,y,z) eine Trajektorie bilden. Dabei würde ich gerne diese 10 Punkte eingeben und dann auswählen wie interpoliert wird zwischen den Punkten (also spline, linear, etc.). Das selbst zu machen stellt mich vor große Schwierigkeiten, da ich noch recht neu in MATLAB bin und mich nicht sehr gut mit den Funktionen auskenne.

Meine Frage: Kennt jemand Funktionen oder Tools mit denen ich das ordentlich strukturieren und aufbauen kann ohne 1000 Zeilen Code zu schreiben? Ich hab jetzt schon mehrere Ansätze abgebrochen, weil ich nicht wirklich sehen konnte, dass das irgendwo hinführt..
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2022, 14:35     Titel:
  Antworten mit Zitat      
Hallo,

ich würde eine Funktion mit Eingabeargumenten x, y, z und Interpolationsmethode sowie dem Gitter und Rückgabeargumenten interpolierte Werte schreiben.
Die Frage ist aber, ob du hier überhaupt eine eigene Funktion schreiben musst und nicht stattdessen z.B. griddata oder interpn verwenden kannst.

Grundsätzlich hilft es, wenn du einen oder mehrere Versuche postest. Auf 1000 Zeilen oder auch nur die Nähe davon sollte man hier wirklich nicht kommen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bbird
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2022, 10:00     Titel:
  Antworten mit Zitat      
Erstmal vielen Dank für die Antwort!

clc
close all
clear all

%Trajektorie erstellen

% Punkte
x = [0,48,52 , 60,70,70,10,0,0];
y = [0,0,2, 5,5,10,10,7,0];
z = [0,0,0,0,0,0,0,0,0];
t = [1,2,3,4,5,6,7,8,9];

% Interpolationsart
tt = linspace(t(1),t(end));
xx = interp1(t,x,tt,'linear');
yy = interp1(t,y,tt,'linear');
zz = interp1(t,z,tt,'makima');


% Plot
figure
scatter3(x,y,z)
hold on
plot3(xx,yy,zz)
axis equal

https://gyazo.com/9028672576e0aae8a13c5e2967ef1b41

Das ist mein Programm jetzt. Was ich jetzt aber einfach nicht hinkriege, ist, dass ich zwischen den Punkten unterschiedliche Interpolationen anwende. Und ich will nicht für jeden Vektor das einzeln runterschreiben, sondern halt entweder variabel halten oder zumindest kompakt, sonst verliert man da viel zu schnell den überblick..
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2022, 08:40     Titel:
  Antworten mit Zitat      
Hallo,

für unterschiedliche Interpolationen sehe ich keine andere Möglichkeit als die Vektoren in die Bereiche aufzuspalten, die Interpolation jeweils darauf anzuwenden, und das dann wieder zusammenzufügen.

Als zweites Argument kannst du bei interp1 auch eine Matrix von Spaltenvektoren angeben und bekommst die interpolierte Matrix zurück
Code:
xxyyzz = interp1(t', [x', y', z'], tt)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bbird
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2022, 08:39     Titel:
  Antworten mit Zitat      
Ok das müsste glaube ich so funktionieren, aber jetzt habe ich Vektoren in meinem Array stehen, wie kann ich die denn dann plotten, bzw. zusammenfügen, weil so wäre es jetzt nicht richtig, da ich jetzt die Vektoren wie Punkte sehe und demensprechend der plot falsch gemacht wird..


Code:
% Punkte
x = [0,10,10,0,0];
y = [0,0,10,10,0];
z = [0,0,0,0,0];
t = [1,2,3,4,5];
tgroesse = size(t);
tgroesse = tgroesse(2);

%Vektoren erstellen
vek = zeros(3, tgroesse);
for nn = t(1):1:t(end-1)
vek(:,1) = 0;
vek(1,nn+1) = x(nn+1) - x(nn);
vek(2,nn+1) = y(nn+1) - y(nn);
vek(3,nn+1) = z(nn+1) - z(nn);
end

xvek = vek(1,:);
yvek = vek(2,:);
zvek = vek(3,:);
disp(yvek);

% Interpolationsart
tt = linspace(t(1),t(end-1));
xx = interp1(t,xvek,tt,'spline');
yy = interp1(t,yvek,tt,'linear');
zz = interp1(t,zvek,tt,'linear');

% Plot
figure
scatter3(x,y,z)
hold on
plot3(xx,yy,zz)
axis equal
%Punkte
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.05.2022, 08:54     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe die Frage nicht.
Ein Problem, das ich sehe: du plottest die Größe an sich und die Differenzen / Ableitungen in ein Bild. Das wird allgemein nicht funktionieren.

Mit dem diff-Befehl kannst du dir die nn-Schleife sparen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bbird
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2022, 09:18     Titel:
  Antworten mit Zitat      
Ich habe jetzt ne Matrix mit Vektoren. Wenn ich die plotte kommt da aber natüricht das raus was ich will, also die Vektoren nacheinander, sondern eben die Vektoren als Punkte.. Das mit dem diff probier ich gleichmal aus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.05.2022, 09:48     Titel:
  Antworten mit Zitat      
Hallo,

was meinst du mit "die Vektoren nacheinander"?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bbird
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2022, 10:33     Titel:
  Antworten mit Zitat      
Die Vektoren werden ja alle vom 0 Punkt aus geplottet, aber bei mir sollten Sie an der Spitze des vorherigen Vektors anfangen. Ich will ja eine Bahn aus Vektoren beschreiben

https://gyazo.com/b15c37eda02131bebd1d0d4206613195
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.05.2022, 10:45     Titel:
  Antworten mit Zitat      
Hallo,

dann solltest du cumsum verwenden, um das aufzuaddieren, und die nun kleinere Schrittweite berücksichtigen.
Damit machst du quasi die Differenzenbildung rückgängig. Mir ist aber nach wie vor nicht klar, warum du überhaupt die Differenzenbildung vornimmst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.