|
|
Matlab Doppelpendel mit Lagrange |
|
rmc90 |

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2014, 19:06
Titel: Matlab Doppelpendel mit Lagrange
|
 |
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
Beschreibung: |
Das sind die Gleichungen. |
|
 Download |
Dateiname: |
Bildschirmfoto 2014-08-11 um 18.58.54.png |
Dateigröße: |
106.92 KB |
Heruntergeladen: |
412 mal |
|
|
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 14:53
Titel:
|
 |
Mittlerweile bin ich auch schon darauf gekommen:
Beschreibung: |
|
 Download |
Dateiname: |
4DGL 1Ord.png |
Dateigröße: |
50.75 KB |
Heruntergeladen: |
410 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 15:37
Titel:
|
 |
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
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 15:54
Titel:
|
 |
Ich habe es einfach mal so Versucht.
Aber wenn ich Ode verwende funktioniert es leider nicht.
Beschreibung: |
|
 Download |
Dateiname: |
Bildschirmfoto 2014-08-12 um 15.55.12.png |
Dateigröße: |
15.48 KB |
Heruntergeladen: |
386 mal |
Beschreibung: |
|
 Download |
Dateiname: |
Bildschirmfoto 2014-08-12 um 15.53.37.png |
Dateigröße: |
41.25 KB |
Heruntergeladen: |
392 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 16:12
Titel:
|
 |
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
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 16:42
Titel:
|
 |
|
 |
|
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]);
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 18:22
Titel:
|
 |
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 18:31
Titel:
|
 |
Es muss leider mit Matlab gemacht werden
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 18:38
Titel:
|
 |
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
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 18:41
Titel:
|
 |
Danke sehr, werde ich machen. Ich poste dann den überarbeiteten code
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 20:13
Titel:
|
 |
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
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 21:44
Titel:
|
 |
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
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 21:54
Titel:
|
 |
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.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 22:23
Titel:
|
 |
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
|
|
|
rmc90 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 21
|
 |
|
 |
Anmeldedatum: 11.08.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2014, 22:59
Titel:
|
 |
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?
Beschreibung: |
|
 Download |
Dateiname: |
Bildschirmfoto 2014-08-12 um 22.58.08.png |
Dateigröße: |
14.39 KB |
Heruntergeladen: |
387 mal |
|
|
|
|
Gehe zu Seite 1, 2, 3 Weiter
|
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 - 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.
|
|