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

 

rmc90
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2014, 19:06     Titel: Matlab Doppelpendel mit Lagrange
  Antworten mit Zitat      
Hi zusammen,
ich stehe vor dem Problem ein Doppelpendel mit Matlab zu simulieren.
Ich hab die Theorie eigentlich verstanden und kann es nachvollziehen. Die Schwierigkeit für mich liegt nun darin, es in Matlab zu "Übersetzen".
Ich habe die beiden Bewegungsgleichungen und weis ehrlich gesagt nicht was ich mit ihnen anfangen soll.


Ich weiss das ich die jetzt irgendwie mit dem Befehl ode45 lösen muss, jedoch hab ich keine Ahnung wie ich da ran gehen soll.
Ich wäre euch sehr dankbar, wenn ihr mir irgendwie helfen könnt.

Mit freundlichen Grüßen

David

Bildschirmfoto 2014-08-11 um 18.58.54.png
 Beschreibung:
Das sind die Gleichungen.

Download
 Dateiname:  Bildschirmfoto 2014-08-11 um 18.58.54.png
 Dateigröße:  106.92 KB
 Heruntergeladen:  412 mal
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: 12.08.2014, 14:53     Titel:
  Antworten mit Zitat      
Mittlerweile bin ich auch schon darauf gekommen:

4DGL 1Ord.png
 Beschreibung:

Download
 Dateiname:  4DGL 1Ord.png
 Dateigröße:  50.75 KB
 Heruntergeladen:  410 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: 12.08.2014, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

das Überführen in ein System von DGL erster Ordnung war schon mal ein wichtiger Schritt. Jetzt musst du eine Funktion schreiben, die einen 4D-Vektor (enthält beide Winkel und Winkelgeschwindigkeiten) entgegennimmt und die entsprechenden Ableitungen zurückgibt, und das dann als Function Handle an ode45 übergeben - siehe Beispiele in der Dokumentation von ode45.

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: 12.08.2014, 15:54     Titel:
  Antworten mit Zitat      
Ich habe es einfach mal so Versucht.
Aber wenn ich Ode verwende funktioniert es leider nicht.

Bildschirmfoto 2014-08-12 um 15.55.12.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-12 um 15.55.12.png
 Dateigröße:  15.48 KB
 Heruntergeladen:  386 mal
Bildschirmfoto 2014-08-12 um 15.53.37.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-12 um 15.53.37.png
 Dateigröße:  41.25 KB
 Heruntergeladen:  392 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: 12.08.2014, 16:12     Titel:
  Antworten mit Zitat      
Hallo,

- bitte sagen, was nicht funktioniert
- bitte Code als solchen anhängen, damit man die Probleme ggf. reproduzieren kann. Abtippen von Screenshots wäre unnötig mühsam.

In deiner Funktion ist x nicht genutzt, was nicht sinnvoll ist. Du hast vier Größen, also brauchst du auch 4 Anfangsbedingungen (für die Geschwindigkeiten 0, falls anfangs Ruhestellung) und 4 (nicht 9) Rückgabewerte.

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: 12.08.2014, 16:42     Titel:
  Antworten mit Zitat      
Oh alles klar sorry,
hier der Code von meinen ODEs

function xdot = double_pendulum_ODE(t,x)

g=9.81;
l1=2;
l2=2;
m1=3;
m2=3;
om1=3;
om2=2;
te1=2;
te2=3;
f=zeros(9,1);

f(1)=om1;

f(2)=(-g*(2*m1+m2)*sin(te1)-m2*g*sin(te1-2*te2)-2*sind(te1-te2)*m2*...
(om2^2*l2+om1^2*l1*cos(te1-te2)))/(l1*(2*m1+m2-m2*cos(2*te1-2*te2)));

f(3)=om2;

f(4)=(2*sin(te1-te2)*(om1^2*l1*(m1+m2)+g*(m1+m2)*cos(te1)+om2^2*l2*m2*...
cos(te1-te2)))/(l2*(2*m1+m2-m2*cos(2*te1-2*te2)));

und hier um es zu lösen:

clear all;

ic=1;
T=20;
[t1,x1]=ode45(@double_pendulum_ODE,[0 T],[ic 0]);

und es kommen halt diese Fehlermeldungen:

Error using odearguments (line 93)
DOUBLE_PENDULUM_ODE returns a vector of length 9, but the length of initial
conditions vector is 2. The vector returned by DOUBLE_PENDULUM_ODE and the
initial conditions vector must have the same number of elements.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in doppelpendel_ode_loesen (line 5)
[t1,x1]=ode45(@double_pendulum_ODE,[0 T],[ic 0]);
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.08.2014, 18:22     Titel:
  Antworten mit Zitat      
Abhängig vom Ziel des Projekts (Verständnis vs. zügige Umsetzung), bitte die Umsetzung mit SimMechanics in Erwägung ziehen. Es ist echt einfacher!

http://www.mathworks.com/help/physm.....odcode=MS&language=en

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
rmc90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 11.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2014, 18:31     Titel:
  Antworten mit Zitat      
Es muss leider mit Matlab gemacht werden Sad
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: 12.08.2014, 18:38     Titel:
  Antworten mit Zitat      
Hallo,

bitte die bereits gemachten Vorschläge umsetzen:
Zitat:

In deiner Funktion ist x nicht genutzt, was nicht sinnvoll ist. Du hast vier Größen, also brauchst du auch 4 Anfangsbedingungen (für die Geschwindigkeiten 0, falls anfangs Ruhestellung) und 4 (nicht 9) Rückgabewerte.


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: 12.08.2014, 18:41     Titel:
  Antworten mit Zitat      
Danke sehr, werde ich machen. Ich poste dann den überarbeiteten code Smile
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: 12.08.2014, 20:13     Titel:
  Antworten mit Zitat      
Ich glaube ich verwende das x nicht richtig, da ich jetzt noch mehr Fehlermeldungen erhalte.

function xdot = double_pendulum_ODE(t,x)

g=9.81;
l1=2;
l2=2;
m1=3;
m2=3;

xdot=zeros(4,1);

xdot(1)=x(2);
xdot(2)=(-g*(2*m1+m2)*sin(x(1))-m2*g*sin(x(1)-2*x(4))-2*sin(x(1)-x(3))*m2*...
(x(4)^2*l2+x(2)^2*l1*cos(x(1)-x(3))))/(l1*(2*m1+m2-m2*cos(2*x(1)-2*x(3))));
xdot(3)=x(4);
xdot(4)=(2*sin(x(1)-x(3))*(x(2)^2*l1*(m1+m2)+g*(m1+m2)*cos(x(1))+x(4)^2*l2*m2*...
cos(x(1)-x(3))))/(l2*(2*m1+m2-m2*cos(2*x(1)-2*x(3))));

Diese beiden Fehlermeldungen sind jetzt dazu gekommen:

Attempted to access x(4); index out of bounds because numel(x)=2.

Error in double_pendulum_ODE (line 16)
xdot(2)=(-g*(2*m1+m2)*sin(x(1))-m2*g*sin(x(1)-2*x(4))-2*sin(x(1)-x(3))*m2*…


Kann mir jemand einen kleinen Tipp geben damit ich vom Holzweg herunter komme Very Happy
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: 12.08.2014, 21:44     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kann mir jemand einen kleinen Tipp geben damit ich vom Holzweg herunter komme

Zwei Vorschläge hast du ja nun umgesetzt, den verbleibenden gerne noch ein drittes Mal:
Zitat:
Du hast vier Größen, also brauchst du auch 4 Anfangsbedingungen (für die Geschwindigkeiten 0, falls anfangs Ruhestellung)


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: 12.08.2014, 21:54     Titel:
  Antworten mit Zitat      
Das verstehe ich leider nicht ganz…vielleicht weil meine Rübe mittlerweile qualmt xD
Ich dachte mein g,m1,m2,l1 und l2 sind meine Anfangswerte und meine Ausgabewerte die Omegas und Thetas.
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: 12.08.2014, 22:23     Titel:
  Antworten mit Zitat      
Hallo,

die Anfangswerte sind das, was du beim ode45-Aufruf übergibst.
Du übergibst [ic, 0], also einen Vektor mit 2 Elementen. Du musst aber einen mit 4 Elementen übergeben.

g,m1,m2,l1 und l2 sind Parameter - sie verändern sich ja nicht.

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: 12.08.2014, 22:59     Titel:
  Antworten mit Zitat      
Vielen vielen Dank!!!

hab jetzt

clear all;

ic=1;
T=20;
[t1,x1]=ode45(@double_pendulum_ODE,[0 T],[ic ic 0 0]);

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

Jetzt kommen keine Fehlermeldungen mehr.

Jetzt zeigt er mir (Bild im Anhang) an, das bedeutet das es funktionier oder?
Jetzt muss ich mich Theoretisch um das Polten kümmern richtig? Very Happy

Bildschirmfoto 2014-08-12 um 22.58.08.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2014-08-12 um 22.58.08.png
 Dateigröße:  14.39 KB
 Heruntergeladen:  387 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 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.