Gelöste Aufgaben/GYRQ: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Category:Gelöste Aufgaben Category:Dimensionslose Schreibweise Category:Kreisel Category:Numerische Lösung Category:Anfangswertproblem …“) |
Keine Bearbeitungszusammenfassung |
||
(26 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 10: | Zeile 10: | ||
==Aufgabenstellung== | ==Aufgabenstellung== | ||
Die Bewegung eines Kreisels kann man auch anderes als in Aufgabe [[Gelöste Aufgaben/GYRO|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 [https://de.wikipedia.org/wiki/Quaternion Quaternionen] umrechnen. Aber hier wollen wir ausprobieren, wie die Bewegungsgleichungen selbst in anderen Koordinaten (vgl. [https://de.wikipedia.org/wiki/Drehgruppe Drehgruppe]) aussehen. Und ob wir dadurch numerische Vorteile erwarten können. | |||
Alles andere ist so wie in [[Gelöste Aufgaben/GYRO|GYRO]]. | |||
<onlyinclude> | <onlyinclude> | ||
[[Datei:GYRO-01.png|150px|left|mini|Kreisel mit gelenkiger Fußpunktlagerung.]] | [[Datei:GYRO-01.png|150px|left|mini|Kreisel mit gelenkiger Fußpunktlagerung.]] | ||
Gesucht ist die Präzessions-Bahn eines Kreisels mit | Gesucht ist die Präzessions-Bahn eines Kreisels mit Quaternionen / [[Sources/Lexikon/Kugelkoordinaten|Kugelkoordinaten]]. | ||
Unser Kreisel ist ein Kegel der Höhe ''H'' und Radius ''R''. | Unser Kreisel ist ein Kegel der Höhe ''H'' und Radius ''R''. | ||
Die Bewegungsgleichungen sollen mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel. | Die Bewegungsgleichungen sollen mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel. | ||
Zeile 24: | Zeile 26: | ||
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 [[Anfangswertprobleme|Anfangswertproblem]]. | 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 [[Anfangswertprobleme|Anfangswertproblem]]. | ||
[[Datei: | [[Datei:GYRQ-03.png|160px|right|Geomertrie des Kreisels]] | ||
{{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. | ||
[[Datei:GYRQ-04.png|160px|left|Euler-Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'']] 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( {{\varphi }_1}(t)\right) } \cos{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_1}(t)\right) } \sin{\left( {{\varphi }_2}(t)\right) } & -\sin{\left( {{\varphi }_1}(t)\right) }\\ | |||
-\sin{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_2}(t)\right) } & 0\\ | |||
\sin{\left( {{\varphi }_1}(t)\right) } \cos{\left( {{\varphi }_2}(t)\right) } & \sin{\left( {{\varphi }_1}(t)\right) } \sin{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_1}(t)\right) }\end{pmatrix} | |||
</math> | |||
Mit einer weiteren Drehung ''φ<sub>3</sub>'' um die Rotationsachse lösen also auch 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>, | ||
Dabei sind die Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' nicht mehr die Winkel aus den Euler'schen Drehmatrizen für sukzessive Drehungen bezüglich der ''x<sub>1</sub>''- und ''x<sub>2</sub>''-Achsen sind, sondern die Winkel von Kugelkoordinaten. | |||
Wie zuvor kommen nun die Gleichgewichtsbedingungen aus dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]]. | |||
| | | | ||
code= | code= | ||
Zeile 45: | Zeile 54: | ||
/* version: wxMaxima 21.05.2 */ | /* version: wxMaxima 21.05.2 */ | ||
/* author: Andreas Baumgart */ | /* author: Andreas Baumgart */ | ||
/* last updated: 2022- | /* last updated: 2022-04-01 */ | ||
/* ref: gyroscopic precession */ | /* ref: gyroscopic precession */ | ||
/* description: solve using principle of virt. work */ | /* description: solve using principle of virt. work */ | ||
Zeile 54: | Zeile 63: | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Declarations | {{MyCodeBlock|title=Declarations | ||
|text=Wir brauchen zunächst die Transformationsmatrizen der [[Sources/Lexikon/Euler-Rotation|Euler-Rotation]], also die [[Sources/Lexikon/Drehmatrix|Drehmatrizen]], die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen zunächst um die ''x<sub> | |text=Wir brauchen zunächst die Transformationsmatrizen aus <math>\underline{\underline{D}}_{12}\left( \varphi_1,\varphi_2\right)</math> sowie die bekannten Transformationsmatrizen der [[Sources/Lexikon/Euler-Rotation|Euler-Rotation]], also die [[Sources/Lexikon/Drehmatrix|Drehmatrizen]], die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen also zunächst um die ''x<sub>1</sub>'' und ''x'<sub>3</sub>''-Achse und schließlich um die resultierende Rotationsachse ''x'<sub>3</sub>''. Die Koordinatentransformation ist dann | ||
::<math>\underline{\underline{D}}_{0\to K} = \underline{\underline{D}}_3(\varphi_3(t))\cdot\underline{\underline{D}} | ::<math>\underline{\underline{D}}_{0\to K} = \underline{\underline{D}}_3(\varphi_3(t))\cdot\underline{\underline{D}}_{12}(\varphi_1(t)),\varphi_2(t))</math>. | ||
Und wir führen | Und wir führen wiederum die folgenden Abkürzungen für die Systemparameter | ||
::<math>{I_y}=\frac{\displaystyle 3 \left( {{R}^{2}}+4 {{H}^{2}}\right) m}{20}, {I_z}=\frac{\displaystyle 3 {{R}^{2}} m}{10}, m=\frac{\displaystyle {\pi} H {{R}^{2}} \rho }{3}</math> | ::<math>{I_y}=\frac{\displaystyle 3 \left( {{R}^{2}}+4 {{H}^{2}}\right) m}{20}, {I_z}=\frac{\displaystyle 3 {{R}^{2}} m}{10}, m=\frac{\displaystyle {\pi} H {{R}^{2}} \rho }{3}</math> | ||
Zeile 66: | Zeile 75: | ||
ein. | ein. | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start= | <syntaxhighlight lang="lisp" line start=21> | ||
/*Declarations */ | |||
/* Euler-Drehmatrizen */ | /* Euler-Drehmatrizen */ | ||
D[1](φ) := matrix([1,0,0],[0,cos(φ), | D[1](φ) := matrix([1,0,0],[0,cos(φ),sin(φ)],[0,-sin(φ),cos(φ)]); | ||
D[2](φ) := matrix([cos(φ),0,sin(φ)],[0,1,0],[ | D[2](φ) := matrix([cos(φ),0,-sin(φ)],[0,1,0],[sin(φ),0,cos(φ)]); | ||
D[3](φ) := matrix([cos(φ), | D[3](φ) := matrix([cos(φ),sin(φ),0],[-sin(φ),cos(φ),0],[0,0,1]); | ||
/* Kugelkoordinanten */ | |||
D[12](θ,φ):= matrix([ cos(θ)*cos(φ), cos(θ)*sin(φ), -sin(θ)], | |||
[ -sin(φ), cos(φ), 0 ], | |||
[ sin(θ)*cos(φ), sin(θ)*sin(φ), cos(θ)]); | |||
coord: [[ φ[1](t), φ[2](t), φ[3](t)], | coord: [[ φ[1](t), φ[2](t), φ[3](t)], | ||
Zeile 100: | Zeile 115: | ||
::<math> | ::<math> | ||
\begin{pmatrix}{I_y} & 0 & 0\\ | \begin{pmatrix}{I_y} & 0 & 0\\ | ||
0 & \left( 1-{{\ | 0 & \left( 1-{{\sin{\left( {{\phi }_1}(t)\right) }}^{2}}\right) {I_z}+{{\sin{\left( {{\phi }_1}(t)\right) }}^{2}} {I_y} & \cos{\left( {{\phi }_1}(t)\right) } {I_z}\\ | ||
0 & -\sin{\left( {{\ | 0 & \cos{\left( {{\phi }_1}(t)\right) } {I_z} & {I_z}\end{pmatrix} | ||
\cdot | |||
\ddot{\underline{\varphi}} | |||
+ | |||
\begin{pmatrix}\left( {{{{\omega }_2}}^{2}} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) }+{{\omega }_2} {{\omega }_3} \sin{\left( {{\phi }_1}\right) }\right) {I_z}-{{{{\omega }_2}}^{2}} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) } {I_y}\\ | |||
\left( -2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) }-{{\omega }_1} {{\omega }_3} \sin{\left( {{\phi }_1}\right) }\right) {I_z}+2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) } {I_y}\\ | |||
-{{\omega }_1} {{\omega }_2} \sin{\left( {{\phi }_1}\right) } {I_z}\end{pmatrix} | |||
\cdot | \cdot | ||
\ | \dot{\underline{\varphi}} | ||
= | = | ||
\frac{\displaystyle 2}{ | \begin{pmatrix} | ||
\sin{\left( | -\frac{\displaystyle 2}{3} H g m \sin{\left( \phi_1\right)}\\ | ||
0\\ | |||
0\end{pmatrix} | |||
</math> | </math> | ||
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 | 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 | ||
::<math> | ::<math> | ||
\det{\underline{\underline{M}}} = \ | \det{\underline{\underline{M}}} = \sin{\left(\varphi_1(t)\right)^2 I_y^2 I_z}. | ||
</math> | </math> | ||
Für den Kippwinkel muss also '' | Für den Kippwinkel muss also ''sin(φ<sub>1</sub>)≠0'' bzw. ''φ<sub>1</sub> ≠ 0°'' gelten. Diese Bedingung kann bei Kreiselsimulationen auf jeden Fall zu Singularitäten führen! Das Problem kommt aus der zweifachen Rotation um die "3"-Achse mit ''φ<sub>2</sub>'' und ''φ<sub>3</sub>''. Unser Ansatz zur Nutzung der Kugelkoordinaten ist also im Allgemeinen kaum geeignet. Trotzdem - wir machen erst mal weiter. | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | |||
/* local vector to some material point with coordinates φ[i](t), i=1,2,3 */ | |||
/* trafo, order of rotations: y, x', z'' */ | |||
r[p] : matrix([r,0,z]).D[3](α).D[3](φ[3](t)).D[12](φ[1](t),φ[2](t)); | |||
δr[p] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[p]),ε)),i,1,3); | |||
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | ||
/* virtual work of d'Alembert forces */ | /* virtual work of d'Alembert forces */ | ||
Zeile 188: | Zeile 212: | ||
<tr><td>[[Datei:GYRQ-13.png|300px|right|Trajektorie]]</td><td>[[Datei:GYRQ-14.png|300px|right|Phasendiagramme]]</td></tr> | <tr><td>[[Datei:GYRQ-13.png|300px|right|Trajektorie]]</td><td>[[Datei:GYRQ-14.png|300px|right|Phasendiagramme]]</td></tr> | ||
</table> | </table> | ||
Unsere Kugelkoordinaten haben also für die gewählten Anfangsbedingungen keine Probleme gemacht. Man erkennt, dass während der gesamten numerischen Integration der Kippwinkel ''φ<sub>1</sub> > 1'' bleibt. Spannend ist auch, dass der Lagewinkel ''φ<sub>2</sub>'' nun keine periodische Lösung mehr hat - die Rotationsachse läuft kontinuierlich um die Senkrechte um und der Winkel wird immer größer. Das kann man auch gut im Phasendiagramm erkennen. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
Zeile 195: | Zeile 220: | ||
{{MyCodeBlock|title=Nachtrag | {{MyCodeBlock|title=Nachtrag | ||
|text= | |text=Wieder linearisieren wir die Bewegungsgleichungen, indem wir von kleinen Kippwinkeln ausgehen (''φ<sub>1</sub><<1'', ''φ<sub>2</sub><<1''). Für den Kreisel gilt wiederum ''ω<sub>1</sub><<ω<sub>3</sub>'', ''ω<sub>2</sub><<ω<sub>3</sub>'' so dass man außerdem ''ω<sub>3</sub> = constant'' setzten darf. | ||
Damit erhalten wir die | Damit erhalten wir die vereinfachten Bewegungsgleichung | ||
::<math> | ::<math> | ||
\begin{pmatrix}{I_y} & 0 & 0\\ | \begin{pmatrix}{I_y} & 0 & 0\\ | ||
0 & {I_y} & 0\\ | 0 & {I_y} & 0\\ | ||
0 & 0 & {I_z}\end{pmatrix}\cdot \ddot{\underline{\varphi}} | 0 & 0 & {I_z}\end{pmatrix}\cdot \ddot{\underline{\varphi}} | ||
+ | + | ||
\omega_3\cdot \begin{pmatrix}0 & | \omega_3\cdot \begin{pmatrix}0 & \varphi_1\cdot I_z& 0\\ | ||
-\varphi_1\cdot I_z& 0 & 0\\ | |||
0 & 0 & 0\end{pmatrix}\cdot \dot{\underline{\varphi}} | 0 & 0 & 0\end{pmatrix}\cdot \dot{\underline{\varphi}} | ||
= | = | ||
\frac{\displaystyle 2}{\displaystyle 3} H m g \begin{pmatrix}1 | \frac{\displaystyle 2}{\displaystyle 3} H m g \begin{pmatrix}1\\0\\0\end{pmatrix} | ||
</math> | </math> | ||
Zeile 214: | Zeile 239: | ||
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ | ||
/* simplify */ | /* simplify */ | ||
gyrs: trigsimp(subst(abbr,gyr)); | |||
smalls: [ω[1](t)=ε*ω[1](t),ω[2](t)=ε*ω[2](t)]; | |||
gyrs: subst([ε^2=0,ε=1],expand(subst(smalls,gyrs))); | |||
G: makelist(makelist(coeff(expand(gyrs[row][1]/ω[3](t)),ω[col](t)),col,1,3),row,1,3); | |||
G: trigsimp(funmake('matrix,G)); | |||
}} | }} | ||
Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren. | Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren. | ||
Zeile 223: | Zeile 250: | ||
'''Links''' | '''Links''' | ||
* | * [[Sources/Lexikon/Kugelkoordinaten|Kugelkoordinaten]] | ||
* [[Sources/Lexikon/Quaternionen für Drehungen|Quaternionen für Drehungen]] | |||
'''Literature''' | '''Literature''' | ||
* ... | * ... |
Aktuelle Version vom 4. April 2022, 11:54 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 / Kugelkoordinaten. 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
Mit einer weiteren Drehung φ3 um die Rotationsachse lösen also auch hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten
- ,
Dabei sind die Kippwinkel φ1, φ2 nicht mehr die Winkel aus den Euler'schen Drehmatrizen für sukzessive Drehungen bezüglich der x1- und x2-Achsen sind, sondern die Winkel von Kugelkoordinaten.
Wie zuvor kommen nun die Gleichgewichtsbedingungen aus dem Prinzip der virtuellen Verrückungen.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 21.05.2 */
/* author: Andreas Baumgart */
/* last updated: 2022-04-01 */
/* ref: gyroscopic precession */
/* description: solve using principle of virt. work */
/*******************************************************/
Declarations
Wir brauchen zunächst die Transformationsmatrizen aus sowie die bekannten Transformationsmatrizen der Euler-Rotation, also die Drehmatrizen, die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen also zunächst um die x1 und x'3-Achse und schließlich um die resultierende Rotationsachse x'3. Die Koordinatentransformation ist dann
- .
Und wir führen wiederum die folgenden Abkürzungen für die Systemparameter
und die Zustandsgrößen
ein.
/*Declarations */
/* 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]);
/* Kugelkoordinanten */
D[12](θ,φ):= matrix([ cos(θ)*cos(φ), cos(θ)*sin(φ), -sin(θ)],
[ -sin(φ), cos(φ), 0 ],
[ sin(θ)*cos(φ), sin(θ)*sin(φ), cos(θ)]);
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 sin(φ1)≠0 bzw. φ1 ≠ 0° gelten. Diese Bedingung kann bei Kreiselsimulationen auf jeden Fall zu Singularitäten führen! Das Problem kommt aus der zweifachen Rotation um die "3"-Achse mit φ2 und φ3. Unser Ansatz zur Nutzung der Kugelkoordinaten ist also im Allgemeinen kaum geeignet. Trotzdem - wir machen erst mal weiter.
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* local vector to some material point with coordinates φ[i](t), i=1,2,3 */
/* trafo, order of rotations: y, x', z'' */
r[p] : matrix([r,0,z]).D[3](α).D[3](φ[3](t)).D[12](φ[1](t),φ[2](t));
δr[p] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[p]),ε)),i,1,3);
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* 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.
Unsere Kugelkoordinaten haben also für die gewählten Anfangsbedingungen keine Probleme gemacht. Man erkennt, dass während der gesamten numerischen Integration der Kippwinkel φ1 > 1 bleibt. Spannend ist auch, dass der Lagewinkel φ2 nun keine periodische Lösung mehr hat - die Rotationsachse läuft kontinuierlich um die Senkrechte um und der Winkel wird immer größer. Das kann man auch gut im Phasendiagramm erkennen.
... in Matlab (vgl. zip-Datei)
Nachtrag
Wieder linearisieren wir die Bewegungsgleichungen, indem wir von kleinen Kippwinkeln ausgehen (φ1<<1, φ2<<1). Für den Kreisel gilt wiederum ω1<<ω3, ω2<<ω3 so dass man außerdem ω3 = constant setzten darf. Damit erhalten wir die vereinfachten Bewegungsgleichung
<syntaxhighlight lang="lisp" line start=1>
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* simplify */
gyrs: trigsimp(subst(abbr,gyr));
smalls: [ω[1](t)=ε*ω[1](t),ω[2](t)=ε*ω[2](t)];
gyrs: subst([ε^2=0,ε=1],expand(subst(smalls,gyrs)));
G: makelist(makelist(coeff(expand(gyrs[row][1]/ω[3](t)),ω[col](t)),col,1,3),row,1,3); G: trigsimp(funmake('matrix,G));
Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren.
Links
Literature
- ...