Gelöste Aufgaben/GYRQ: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 29: | Zeile 29: | ||
{{MyCodeBlock|title=Header| | {{MyCodeBlock|title=Header| | ||
text=Wir lösen hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten | text=Für die Beschreibung von Drehungen werden oft [[Sources/Lexikon/Quaternionen für Drehungen|Quaternionen]] genutzt. Dabei wird eine Drehung durch die neue Lage der ''x<sub>3</sub>''-Achse sowie eine Drehung um diese Achse beschreiben. Für die Ermittlung von Bewegungsgleichungen - z.B. eines Kreisels - eignen sich Quaternionen aber nicht gut: für die Abbildung muss man dafür sorgen, dass die Euler-Achse ein Einheits-Vektor ist. | ||
Mit einer kleinen Änderungen können wir diese Idee trotzdem weiter verfolgen. Wir nutzen Kugelkoordinaten, um ein Kippen um die Winkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' zu erfassen, genau wie bei der Beschreibung von Länge- und Breitengraden auf der Erde. | |||
Die Transformationsmatrix zu diesem Ansatz ist | |||
::<math> | |||
\underline{\underline{D}}_{12}}\left( \varphi_1(t),\varphi_2(t) \right) | |||
= | |||
\begin{pmatrix}\cos{\left( {{\phi }_1}(t)\right) } \cos{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_1}(t)\right) } \sin{\left( {{\phi }_2}(t)\right) } & -\sin{\left( {{\phi }_1}(t)\right) }\\ | |||
-\sin{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_2}(t)\right) } & 0\\ | |||
\sin{\left( {{\phi }_1}(t)\right) } \cos{\left( {{\phi }_2}(t)\right) } & \sin{\left( {{\phi }_1}(t)\right) } \sin{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_1}(t)\right) }\end{pmatrix} | |||
</math> | |||
Wir lösen hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten | |||
::<math>\underline{\varphi} = \left( \begin{array}{c}\varphi_1(t)\\ \varphi_2(t)\\ \varphi_3(t)\end{array}\right)</math>, | ::<math>\underline{\varphi} = \left( \begin{array}{c}\varphi_1(t)\\ \varphi_2(t)\\ \varphi_3(t)\end{array}\right)</math>, |
Version vom 3. April 2022, 16:01 Uhr
Aufgabenstellung
Die Bewegung eines Kreisels kann man auch anderes als in Aufgabe GYRO mit Euler-Drehwinkeln abbilden, die nicht immer leicht zu interpretieren sind. Natürlich könnten wir dafür in der Ergebnisdarstellung die Euler-Winkel z.B. in Quaternionen umrechnen. Aber hier wollen wir ausprobieren, wie die Bewegungsgleichungen selbst in anderen Koordinaten (vgl. Drehgruppe) aussehen. Und ob wir dadurch numerische Vorteile erwarten können.
Alles andere ist so wie in GYRO.
Gesucht ist die Präzessions-Bahn eines Kreisels mit Quaternionen / Kugelkoordinanten. Unser Kreisel ist ein Kegel der Höhe H und Radius R. Die Bewegungsgleichungen sollen mit dem Prinzip der virtuellen Verrückungen aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel.
Lösung mit Maxima und Matlab®
Wir arbeiten mit Maxima und Matlab.
Maxima brauchen wir zum Aufstellen der Bewegungsgleichungen, die zunächst mal recht komplex aussehen. Dabei nehmen wir die Bewegungsgleichungen wie sie aus den Gleichgewichtsbedingungen kommen und lösen sie als Anfangswertproblem.
Header
Für die Beschreibung von Drehungen werden oft Quaternionen genutzt. Dabei wird eine Drehung durch die neue Lage der x3-Achse sowie eine Drehung um diese Achse beschreiben. Für die Ermittlung von Bewegungsgleichungen - z.B. eines Kreisels - eignen sich Quaternionen aber nicht gut: für die Abbildung muss man dafür sorgen, dass die Euler-Achse ein Einheits-Vektor ist.
Mit einer kleinen Änderungen können wir diese Idee trotzdem weiter verfolgen. Wir nutzen Kugelkoordinaten, um ein Kippen um die Winkel φ1, φ2 zu erfassen, genau wie bei der Beschreibung von Länge- und Breitengraden auf der Erde. Die Transformationsmatrix zu diesem Ansatz ist
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \underline{\underline{D}}_{12}}\left( \varphi_1(t),\varphi_2(t) \right) = \begin{pmatrix}\cos{\left( {{\phi }_1}(t)\right) } \cos{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_1}(t)\right) } \sin{\left( {{\phi }_2}(t)\right) } & -\sin{\left( {{\phi }_1}(t)\right) }\\ -\sin{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_2}(t)\right) } & 0\\ \sin{\left( {{\phi }_1}(t)\right) } \cos{\left( {{\phi }_2}(t)\right) } & \sin{\left( {{\phi }_1}(t)\right) } \sin{\left( {{\phi }_2}(t)\right) } & \cos{\left( {{\phi }_1}(t)\right) }\end{pmatrix} }
Wir lösen hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten
- ,
wobei φ1, φ2 Kippwinkel bezüglich der x1- und x2-Achsen sind, φ3 ist der Rotationswinkel um die Kreisel-Symmetrieachse.
Die Kippwinkel φ1, φ2 sind im nebenstehenden Bild eingetragen, die aus einer Transformation hervorgehenden Koordinatensysteme erhalten jeweils einen >'< zur Kennzeichnung. Dabei steht am Anfang das blue Koordinatensystem, das durch Kippung um φ2 in das grüne und dann durch Kippung um φ1 in das rote überführt wird. Nicht dargestellt ist die folgende Drehung um den Rotationwinkel φ3.
Die Gleichgewichtsbedingungen kommen aus dem Prinzip der virtuellen Verrückungen. Für diese Gleichungen brauchen wir die virtuelle Arbeit der D'Alembert'schen Trägheitskräfte und die virtuelle Arbeit der Gewichtskraft des Kreisels.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 21.05.2 */
/* author: Andreas Baumgart */
/* last updated: 2022-03-27 */
/* ref: gyroscopic precession */
/* description: solve using principle of virt. work */
/*******************************************************/
Declarations
Wir brauchen zunächst die Transformationsmatrizen der Euler-Rotation, also die Drehmatrizen, die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen zunächst um die x2-Achse, dann um die resultierende x'1-Achse und schließlich um die Rotationsachse x"2. Die Koordinatentransformation ist dann
- .
Und wir führen noch Abkürzungen für die Systemparameter
und die Zustandsgrößen
ein.
/* Euler-Drehmatrizen */
D[1](φ) := matrix([1,0,0],[0,cos(φ),-sin(φ)],[0,sin(φ),cos(φ)]);
D[2](φ) := matrix([cos(φ),0,sin(φ)],[0,1,0],[-sin(φ),0,cos(φ)]);
D[3](φ) := matrix([cos(φ),-sin(φ),0],[sin(φ),cos(φ),0],[0,0,1]);
coord: [[ φ[1](t), φ[2](t), φ[3](t)],
[δφ[1] ,δφ[2] ,δφ[3] ]];
q: funmake('matrix,makelist([coord[1][i]],i,1,3));
abbr: makelist(diff(φ[i](t),t)=ω[i](t),i,1,3);
params: [
I[y] = m * 3/20*( R^2+4*H^2),
I[z] = m * 3/10* R^2,
m = ρ*%pi*R^2*H/3 ];
params: append(subst(params[3], [params[1], params[2]]),[params[3]]);
params: [params, makelist(solve(params[i], [H^3,R^4,R^2][i])[1],i,1,3)];
Equations of Motion
Die Gleichgewichtsbedingungen für den starren Kreisel (die virtuelle Formänderungenergie ist Null) kommen aus
- ,
wobei wir nur eine Kraft F - die Gewichtskraft - haben und V das Kreisel-Volumen ist.
Mit dem Ortsvektor zu einem Punkt des Kreisels
können wir nun die virtuelle Gesamtarbeit des Systems ausrechnen. Die Parameter mit R und H ersetzen wir durch die oben definierten Abkürzungen und erhalten die gekoppelten Bewegungsgleichungen
Dieses System von gewöhnlichen Differentialgleichung müssen wir nach den Winkelbeschleunigungen lösen - und das geht nur, wenn die Massenmatrix regulär ist. Wir prüfen das anhand der Systemdeterminante
Für den Kippwinkel muss also cos(φ1)≠0 oder 0 < φ1 < 90° gelten. Das können wir für unsere Problemstellung gut einhalten.
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* virtual work of d'Alembert forces */
δW[a] :-ρ*diff(r[p],t,2).δr[p]$
/* integrate over body */
δW[a] : integrate(integrate(integrate(r*δW[a], α,0,2*%pi), r,0,R*(z/H)), z,0,H)$
δW[a] : expand(expand(expand(expand(expand(expand(expand(δW[a])))))))$
δW[a] : expand(subst(params[2],δW[a]));
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* virtual work of external (gravitational) force */
r[m] : subst([r=0, z=2*H/3], r[p]);
δr[m] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[m]),ε)),i,1,3);
δW[g] : m*matrix([0,0,-g]).δr[m];
δW[g] : expand(δW[g]);
Solving
Mit der Spaltenmatrix der Zustandsgrößen
lösen wir die gewöhnlichen Differentialgleichungen
Dazu formulieren wir die Bewegungsgleichungen zunächst in Maxima und übertragen sie dann in ein Matlab©-Script. Die Bewegungsgleichungen machen wir mit der Zeit
dimensionslos (die Winkel selbst sind ja bereits dimensionslos). Die dimensionslose Zeit .
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* equations of motion */
eom: makelist(coeff(-δW[a],coord[2][row]),row,1,3);
/* mass matrix */
M: makelist(makelist(coeff(eom[row],diff(coord[1][col],t,2)),col,1,3),row,1,3);
M: trigsimp(funmake('matrix,M));
/* M^(-1) */
Mi : trigsimp(invert(M));
/* the rest ... */
gyr: trigsimp(expand(eom - M.diff(q,t,2)));
P: makelist(coeff(-δW[g],coord[2][row]),row,1,3);
Matlab©-files
Die Datei-Struktur zeit das Skript GYRQ.m. Classes und Functions sind in den jeweiligen Ordnern. Die Excel-Datei hält alle System-Parameter.
Den komplette Quellcode zu diesem Programm können Sie über dieses ZIP-File rechts herunterladen.
download compressed archive →
Postprocessing
Die Ergebnisse der numerischen Integration tragen wir für die Winkel φ1(t), φ2(t) sowie für die Winkelgeschwindigkeiten ω1(t), ω2(t) auf. Es folgen noch die Trajektorie des Mittellinien-Endpunkts des Kreisels und die Phasendiagramme.
... in Matlab (vgl. zip-Datei)
Nachtrag
Meist linearisiert man die Bewegungsgleichungen, indem man von kleinen Kippwinkeln ausgeht (φ1<<1, φ2<<1). Für den Kreisel gilt außerdem ω1<<ω3, ω2<<ω3 so dass man außerdem ω3 = constant setzten darf. Damit erhalten wir die "übliche" vereinfachte Bewegungsgleichung
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* simplify */
MS: subst([cos(φ[1](t))=1, sin(φ[1](t))=0], M);
gyrS: subst([ε^2=0, ε=1],expand(subst([cos(φ[1](t))=1, sin(φ[1](t))=φ[1](t), ω[1](t)=ε*ω[1](t), ω[2](t)=ε*ω[2](t)],subst(abbr,gyr))));
PS: subst([cos(φ[1](t))=1, cos(φ[2](t))=1, sin(φ[1](t))=φ[1](t), sin(φ[2](t))=φ[2](t)], P);
Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren.
Links
- ...
Literature
- ...