Ich möchte das Verhalten eines Doppelpendelsystems simulieren. Das System ist ein Roboter-Manipulator mit 2 Freiheitsgraden, der nicht betätigt wird und sich daher hauptsächlich wie ein durch die Schwerkraft beeinflusstes Doppelpendel verhält. Der einzige Hauptunterschied bei einem Doppelpendel besteht darin, dass es sich aus zwei starren Körpern zusammensetzt, deren Massen- und Trägheitseigenschaften in ihren Massenschwerpunkten liegen.
Grundsätzlich habe ich ode45
unter Matlab programmiert , um ein System von ODEs des folgenden Typs zu lösen:
wobei der Winkel des ersten Körpers zur Horizontalen ist, die Winkelgeschwindigkeit des ersten Körpers ist; ist der Winkel des zweiten Körpers in Bezug auf den ersten Körper und ist die Winkelgeschwindigkeit des zweiten Körpers. Alle Koeffizienten sind im folgenden Code in den von mir erstellten Funktionen rhs
und angegeben fMass
.
clear all
opts= odeset('Mass',@fMass,'MStateDependence','strong','MassSingular','no','OutputFcn',@odeplot);
sol = ode45(@(t,x) rhs(t,x),[0 5],[pi/2 0 0 0],opts);
function F=rhs(t,x)
m=[1 1];
l=0.5;
a=[0.25 0.25];
g=9.81;
c1=cos(x(1));
s2=sin(x(3));
c12=cos(x(1)+x(3));
n1=m(2)*a(2)*l;
V1=-n1*s2*x(4)^2-2*n1*s2*x(2)*x(4);
V2=n1*s2*x(2)^2;
G1=m(1)*a(1)*g*c1+m(2)*g*(l*c1+a(2)*c12);
G2=m(2)*g*a(2)*c12;
F(1)=x(2);
F(2)=-V1-G1;
F(3)=x(4);
F(4)=-V2-G2;
F=F';
end
function M=fMass(t,x)
m=[1 1];
l=0.5;
Izz=[0.11 0.11];
a=[0.25 0.25];
c2=cos(x(3));
n1=m(2)*a(2)*l;
M11=m(1)*a(1)^2+Izz(1)+m(2)*(a(2)^2+l^2)+2*n1*c2+Izz(2);
M12=m(2)*a(2)^2+n1*c2+Izz(2);
M22=m(2)*a(2)^2+Izz(2);
M=[1 0 0 0;0 M11 0 M12;0 0 1 0;0 M12 0 M22];
end
Beachten Sie, wie ich die Anfangsbedingung von (Winkel des ersten Körpers in Bezug auf die Horizontale) so einstelle , dass das System in einer vollständig vertikalen Position startet. Auf diese Weise ist das offensichtliche Ergebnis, dass sich das System von dieser Position aus überhaupt nicht bewegen sollte, da nur die Schwerkraft wirkt.
HINWEIS: In allen folgenden Grafiken habe ich die Lösungen und in Bezug auf die Zeit aufgetragen .
ODE45
Wenn ich die Simulation für 6 Sekunden mit laufe ode45
, erhalte ich die erwartete Lösung ohne Probleme, das System bleibt dort, wo es ist und bewegt sich nicht:
Wenn ich die Simulation jedoch 10 Sekunden lang ausführe, bewegt sich das System unangemessen:
ODE23
Ich habe dann die Simulation mit ausgeführt, ode23
um festzustellen, ob das Problem weiterhin besteht. Am Ende habe ich dasselbe Verhalten, nur diesmal beginnt die Divergenz 1 Sekunde später:
ODE15s
Ich habe dann die Simulation mit ausgeführt, ode15s
um festzustellen, ob das Problem weiterhin besteht, und nein, das System scheint selbst während 100 Sekunden stabil zu sein:
Andererseits ode15s
ist nur erster Ordnung und zu beachten, dass es nur wenige Integrationsschritte gibt. Ich habe also eine weitere Simulation mit einer ode15s
Zeit von 10 Sekunden und einer MaxStep
Größe von , um die Genauigkeit zu erhöhen. Leider führt dies zu dem gleichen Ergebnis wie bei beiden ode45
und ode23
.
Normalerweise würde das offensichtliche Ergebnis dieser Simulationen sein, dass das System an seiner ursprünglichen Position bleibt, da es durch nichts gestört wird. Warum tritt diese Divergenz auf? Hat dies damit zu tun, dass diese Art von Systemen chaotischer Natur ist? Ist dies ein normales Verhalten für ode
Funktionen in Matlab?
x1
und x3
. (Fügen Sie einen trockenen Kommentar zu Diagrammen ohne Legenden oder Beschreibungen ein.) Zeichnen Sie die Logarithmen von (die absoluten Werte von) x2
und x4
.