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

Matlab Doppelpendel mit Lagrange

 

Harald
Forum-Meister

Forum-Meister


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

Zitat:
sind jetzt die beiden ic meine Thetas und die beiden 0 meine Omegas?

MATLAB weiß nichts von deiner Anwendung, daher nimmt es die Anfangswerte in der Reihenfolge, in der du sie zur Verfügung stellst bzw. verarbeitest.
Anhand deiner Gleichungen würde ich sagen, dass x = [winkel1, winkelgeschw1, winkel2, winkelgeschw2]. Und in der Reihenfolge musst du dann auch die Anfangsbedingungen angeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 00:03     Titel:
  Antworten mit Zitat      
Vielen Dank Harald, du hast mir wirklich sehr geholfen!

Das ist mein Code welches mit den Plot Anzeigt, jedoch muss ich noch herausfinden wie ich ein bewegten Plot erzeugen kann.

x1=l1*sin(x(:,1));
y1=-l1*cos(x(:,1));
x2=l1*sin(x(:,1))+l2*sin(x(:,2));
y2=-l1*cos(x(:,1))-l2*cos(x(:,2));
x=[x1(end) x2(end)];
y=[y1(end) y2(end)];
plot(x1,y1,'r',x2,y2,'g')
axis([-4 4 -4 4])
line([0 x1(end)],[0 y1(end)]);
line(x,y);

Im Anhang ist der Plot

Bildschirmfoto 2014-08-13 um 00.02.50.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-13 um 00.02.50.png
 Dateigröße:  42.87 KB
 Heruntergeladen:  318 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 00:30     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit: comet statt plot.
Ansonsten bitte genauer spezifizieren, was "bewegt" bedeutet.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 09:23     Titel:
  Antworten mit Zitat      
Also ich will das Doppelpendel animieren, mit dem comet Befehl hab ich es noch nicht so ganz hinbekommen. Es wird erst das erste Pendel und dann das zweite Pendel animiert, diese beiden werden auch zu schnell geplottet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann am besten in einer for-Schleife immer nur einen Punkt auf der Bahn plotten. Wenn das zu schnell ist, pause-Befehl einfügen.
Damit die Bewegung zeitlich gleichmäßig verläuft, solltest du ode45 mit einem Zeitvektor aufrufen, also z.B. 0:0.01:T statt [0 T]

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 10:42     Titel:
  Antworten mit Zitat      
Muss ich die Schleife in der Ode Datei machen und jedes x absichern oder kann ich das auch in der Dateien machen in der die Ode gelöst wird?

Ich habe z.B. wenn ich die Ode lösen lasse 629 x1 Werte. wie kann ich denn auf das erste zugreitfen um es polten zu lassen? Wenn ich z.B. x(1) eingebe, zeigt er mir nur den letzten x1 wert an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

nach dem ode45-Aufruf, denn erst da hast du alle Daten.

Zitat:
Ich habe z.B. wenn ich die Ode lösen lasse 629 x1 Werte.

Du solltest 4 Spalten haben. Jede Zeile entspricht einem Zeitschritt.

Zitat:
wie kann ich denn auf das erste zugreitfen

Das erste was?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 10:51     Titel:
  Antworten mit Zitat      
Ich hab keine 4 Spalten, nur eine mit 629 Zeilen und das für x1 x1 y1 und y2

Bildschirmfoto 2014-08-13 um 10.50.11.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-13 um 10.50.11.png
 Dateigröße:  81.63 KB
 Heruntergeladen:  304 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 11:16     Titel:
  Antworten mit Zitat      
Hallo,

gestern, 22:59 hattest du 4 Spalten. Ich kann leider nicht erahnen, was du wann veränderst.
Wo liegt nun das Problem?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 11:40     Titel:
  Antworten mit Zitat      
Stimmt, ich hatte [t1,x1]=ode45(@double_pendulum_ODE,[0 T],[ic ic 0 0]);
wenn ich [t,x]=ode45(@double_pendulum_ODE,[0 T],[ic ic 0 0]); verändere bekomme ich eine Spalte.
Jetzt habe ich wieder 4 Spalten aber warum hat das so einen Unterschied wenn man die 1 vor dem t und dem x weg lässt?
Und wie kann ich nun auf die einzelnen Elemente in x1 zugreifen?
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 12:23     Titel:
  Antworten mit Zitat      
Ich weiss jetzt wie ich auf die einzelnen Elemente zugreifen kann.
x1(628,4)
damit lasse ich mir das Element aus der 628 Zeile und der 4 Spalte anzeigen.
jetzt muss ich die 628 mit z.B. eine i in der Schleife austauschen richtig?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 12:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Jetzt habe ich wieder 4 Spalten aber warum hat das so einen Unterschied wenn man die 1 vor dem t und dem x weg lässt?

Der einzige Unterschied darin ist der Name der Variablen. Du musst noch was anderes abgeändert haben.

Zitat:
jetzt muss ich die 628 mit z.B. eine i in der Schleife austauschen richtig?

genau.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 13:50     Titel:
  Antworten mit Zitat      
Ich habe jetzt zum Polten diesen Code:

for i=2:1:T
x1=l1*sin(x(i,1));
y1=-l1*cos(x(i,1));
x2=l1*sin(x(i,1))+l2*sin(x(i,3));
y2=-l1*cos(x(i,1))-l2*cos(x(i,3));
xn=[x1 x2];
yn=[y1 y2];

plot(x1,y1,'r',x2,y2,'g');
comet(x1,y1);
comet(x2,y2);
axis([-5 5 -5 5]);
line([0 x1(end)],[0 y1(end)]);
line(xn,yn);
pause(0.001);
end

das klappt ganz gut, jedoch weiss ich nicht warum er mir nur einen comet anzeigt und warum er nicht die roten und grünen Punkte plottet.

Bildschirmfoto 2014-08-13 um 13.48.36.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-13 um 13.48.36.png
 Dateigröße:  20.31 KB
 Heruntergeladen:  294 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2014, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

die comet-Befehle würde ich hier weglassen. Du plottest ja in der Zeile davor schon. Die for-Schleife sollte bis zur Anzahl der Zeitschritte gehen, das ist i.d.R. nicht T.

Zitat:
warum er nicht die roten und grünen Punkte plottet.

weil nacheinander ausgeführte Plots einander überschreiben, wenn kein hold on dazwischen ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2014, 15:42     Titel:
  Antworten mit Zitat      
Ich habe das jetzt so abgeändert, jedoch kopiert er jetzt auch jedes Bild der Pendelstangen, kann man das irgendwie verhindern? Ich kann entweder nur die rot und grünen Plots ausgeben oder die Plots mit den X Pendelstangen.
Ich hoffe ich habe das mit dem T richtig verstanden.

for i=2:1SadT/0.01)
x1=l1*sin(x(i,1));
y1=-l1*cos(x(i,1));
x2=l1*sin(x(i,1))+l2*sin(x(i,3));
y2=-l1*cos(x(i,1))-l2*cos(x(i,3));
xn=[x1 x2];
yn=[y1 y2];

plot(x1,y1,'r',x2,y2,'g');
axis([-5 5 -5 5]);
hold on
line(xn,yn);
line([0 x1(end)],[0 y1(end)]);
pause(0.001);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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 - 2025 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.