Gelöste Aufgaben/ODE1: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 14: | Zeile 14: | ||
<onlyinclude> | <onlyinclude> | ||
[[Datei:ODE1-01.png|alternativtext=|links|mini| | [[Datei:ODE1-01.png|alternativtext=|links|mini|197x197px|Lageplan]] | ||
Gesucht sind Gleichgewichtslagen, Schwingungen um diese und die numerische Lösung der nichtlinearen Bewegungsgleichung. | Gesucht sind Gleichgewichtslagen, Schwingungen um diese und die numerische Lösung der nichtlinearen Bewegungsgleichung. | ||
</onlyinclude> | </onlyinclude> | ||
Zeile 20: | Zeile 20: | ||
== Lösung mit Maxima == | == Lösung mit Maxima == | ||
<!--------------------------------------------------------------------------------> | |||
{{MyCodeBlock|title=Header | {{MyCodeBlock|title=Header | ||
|text=Wir nehemn an: das Massenmoment des homogenen Stabes bzgl A ist | |text=Wir nehemn an: das Massenmoment des homogenen Stabes bzgl. ''A'' ist ''J<sub>A</sub>'', der Schwerpunkt des Stabes liegt in seiner Mitte. | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | |||
/*******************************************************/ | /*******************************************************/ | ||
/* MAXIMA script */ | /* MAXIMA script */ | ||
Zeile 34: | Zeile 34: | ||
/* description: solve the IVP, check for stability */ | /* description: solve the IVP, check for stability */ | ||
/*******************************************************/ | /*******************************************************/ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | |||
{{MyCodeBlock|title=Declarations | |||
|text= | |||
Aus dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] kommt die Gleichgewichtsbeziehung für den Stab: | Aus dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] kommt die Gleichgewichtsbeziehung für den Stab: | ||
<math>\delta W = \displaystyle \underbrace{-J_A \cdot \ddot{\varphi}\cdot \delta\varphi - m\cdot g \cdot \frac{\ell}{2} \cdot \sin(\varphi) \cdot \delta\varphi}_{\displaystyle = \delta W^a} - \underbrace{0}_{\displaystyle = \delta \Pi }</math>, | ::<math>\delta W = \displaystyle \underbrace{-J_A \cdot \ddot{\varphi}\cdot \delta\varphi - m\cdot g \cdot \frac{\ell}{2} \cdot \sin(\varphi) \cdot \delta\varphi}_{\displaystyle = \delta W^a} - \underbrace{0}_{\displaystyle = \delta \Pi }</math>, | ||
wobei | wobei | ||
<math>\varphi = \varphi(t)</math> | ::<math>\varphi = \varphi(t)</math>. | ||
Mit der neuen, dimensionslosen Zeit | Mit der neuen, dimensionslosen Zeit | ||
<math>\tau = \displaystyle \frac{t}{ t_{Bez}} \text{ und } t_{Bez}^2 = \frac{J_A}{m\cdot g\cdot \frac{\ell}{2}}</math> | ::<math>\tau = \displaystyle \frac{t}{ t_{Bez}} \text{ und } t_{Bez}^2 = \frac{J_A}{m\cdot g\cdot \frac{\ell}{2}}</math> | ||
wird aus der Bewegungsgleichung | wird aus der Bewegungsgleichung | ||
<math>\displaystyle \frac{d^2}{d\tau^2} (\varphi) + \sin(\varphi) = 0</math> | ::<math>\displaystyle \frac{d^2}{d\tau^2} (\varphi) + \sin(\varphi) = 0</math>. | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
/* parameter */ | |||
params: [t[Bez]^2=J/(m*g*l/2)]; | |||
/* dimensionless equations of motion */ | |||
ode: J*'diff(phi,tau,2)/t[Bez]^2+m*g*l/2*sin(phi)=0; | |||
ode: expand(subst(params,ode*(t[Bez]^2/J))); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | |||
{{MyCodeBlock|title=Equilibrium Conditions | |||
|text= | |||
Die Gleichung | Die Gleichung | ||
<math>\displaystyle \frac{d^2}{d\tau^2} \varphi = 0</math> | ::<math>\displaystyle \frac{d^2}{d\tau^2} \varphi = 0</math> | ||
ist erfüllt für | ist erfüllt für | ||
<math>\sin(\varphi) \stackrel{!}{=} 0 \text{, also } \varphi = 0, \pi, 2\,\pi,\,\ldots</math> | ::<math>\sin(\varphi) \stackrel{!}{=} 0 \text{, also } \varphi = 0, \pi, 2\,\pi,\,\ldots</math> | ||
[[Datei:ODE1-11.png|mini|Gleichgewichtslagen]]Die Funktion der Rückstell'kraft' sin(φ) schneidet die y-Achse dabei mit der Steigung +1 (z.B. bei ''φ<sub>1</sub> = 0, φ<sub>3</sub> = 2π'') und mit der Steigung -1 (z.B. bei ''φ<sub>2</sub> = π''). | |||
Das Vorzeichen der Steigung wird über die Stabilität der Lösung entscheiden! | Das Vorzeichen der Steigung wird über die Stabilität der Lösung entscheiden! | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* static equilibrium conditions ....*/ | ||
plot2d(lhs(subst(['diff(phi,tau,2)=0],ode)), | |||
[phi,-0.2,2*%pi+0.2], [title, "Rückstell'kraft'"], | |||
[y,-1.1,1.1], [xlabel, "φ→"], [ylabel, "sin(φ)→"])$ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Equilibrium | {{MyCodeBlock|title=Stability of Equilibrium Positions | ||
|text= | |text= | ||
Die Stabilität jeder Gleichgewichtsbedingung "im Kleinen" - also in unmittelbarer Umgebung der Gleichgewichtslage - untersuchen wir am linearisierten System. | |||
Die Taylor-Reihenentwicklung um die Gleichgewichtslagen φ<sub>i</sub> herum liefert | |||
::<math>\displaystyle \frac{{{d}^{2}}}{d\,{{\tau}^{2}}}\cdot \varphi_i+\underbrace{\sin\left( \varphi_i\right)}_{\displaystyle =0} +\underbrace{\cos\left( \varphi_i\right)}_{\displaystyle =+1 / -1} \cdot \underbrace{\left( \varphi-\varphi_i\right)}_{\displaystyle := \Delta \varphi_i} +\mbox{...}=0</math> | |||
Dies ist Ausgangspunkt für unsere Stabilitätsanalyse: | |||
==== Für φ<sub>1</sub> = 0 (= 2π ): ==== | |||
Der [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Integration der Differentialbeziehung (IVP)|<math>e^{\lambda\;t}</math>]] -Ansatz liefert | |||
::<math>\lambda_1^2 = -1\text{ also } \lambda_1=\pm j\cdot\omega</math>, | |||
also eine Schwingungslösung. Diese Lösung ist damit nicht instabil (weil wir keine Energiedissipation eingebaut haben, klingt sie aber auch nicht ab). | |||
==== Für φ<sub>3</sub> = π): ==== | |||
Analog ist | |||
::<math>\lambda_2^2 = +1\text{ also } \lambda_2 = \pm 1</math>, | |||
mit einer exponential abklingenden (''λ<sub>2</sub>=-1'') und einer exponential aufklingenden (''λ<sub>2</sub>=+1'') Lösung. Dieser zweite Anteil der Lösung macht sie instabil. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* stability in proximity of equilib. conditions */ | ||
linode : taylor (ode, phi, Phi, 1); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Solving | {{MyCodeBlock|title=Solving | ||
|text= | |text= | ||
Das nichtlineare Anfangswertproblem lösen wir durch numerische Integration. | |||
Dafür müssen wir die Bewegungsgleichung als gewöhnliche Differentialgleichung (ODE) erster Ordnung schreiben, also mit | |||
::<math>\underline{y} = \left(\begin{array}{c}\varphi\\\varphi'\end{array}\right) \text{ und } (.)' := \displaystyle \frac{d}{d\tau}(.)</math> | |||
als | |||
::<math>\underline{y}' = \left(\begin{array}{c}y_1\\-\sin(y_2)\end{array}\right)</math>. | |||
Diese Bewegungsgleichung lösen wir mit den Anfangsbedingungen | |||
::<math>\underline{y}(0) := \left(\begin{array}{c}\varphi'(0)\\0\end{array}\right)</math>. | |||
und das für verschiedene Anfangsgeschwindigkeiten ''y<sub>1</sub>''. | |||
In der Nähe der stabilen Lösung finden wir periodische Lösungen: | |||
<table class="wikitable" style="background-color:white"> | |||
<tr><td>[[Datei:ODE1-21.png|alternativtext=|rahmenlos]]</td><td>[[Datei:ODE1-23.png|alternativtext=|rahmenlos]] | |||
</td></tr> | |||
</table> | |||
Mit mehr "Anschwung" dreht die Stange "durch", die Lösung ist nicht mehr periodisch: | |||
[[Datei:ODE1-22.png|mini|Lösung im Zeitbereich - die Stange "dreht durch".|alternativtext=|ohne]] | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* solve initial value problem */ | ||
dudt : [omega,rhs(solve(dgl,'diff(phi,tau,2))[1])]; | |||
time : [ t, 0, 10, 0.01 ]; | |||
u0: [[0,0.6],[0,1.8],[0,2.2]]; | |||
u : [phi,omega]; | |||
samples : []; | |||
for i:1 thru length(u0) do | |||
(set : rk (dudt, u, u0[i], time ), | |||
set : [makelist(set[j][1],j,1,length(set)), | |||
makelist(set[j][2],j,1,length(set)), | |||
makelist(set[j][3],j,1,length(set))], | |||
samples : append(samples, set), | |||
headline : [title, simplode(["u0 = ",u0[i]])], | |||
plot2d([[discrete,set[1],set[2]], | |||
[discrete,set[1],set[3]]], | |||
headline, [legend, "φ","ω"], | |||
[xlabel, "τ→"],[ylabel, "φ,ω→"]))$ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Post-Processing | {{MyCodeBlock|title=Post-Processing | ||
|text= | |text= | ||
[[Datei:ODE1-24.png|mini|Phasendiagramm]]Diese Ergebnisse können wir im Phasendiagramm (Geschwindigkeit über der Auslenkung) auftragen. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1+1 | |||
/* phase diagram*/ | |||
toPlot : makelist([discrete,samples[3*(i-1)+2], | |||
samples[3*(i-1)+3]],i,1,length(u0))$ | |||
plot2d(toPlot, [x,-%pi,+%pi], [legend, false], | |||
[title, "phase-diagram"], | |||
[xlabel, "φ→"],[ylabel, "ω→"])$ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<hr/> | <hr/> |
Aktuelle Version vom 1. April 2021, 10:52 Uhr
Aufgabenstellung
Hier untersuchen wir systematisch ein System aus einem starren Pendel im Erdschwerefeld.
![](/images/thumb/9/9b/ODE1-01.png/100px-ODE1-01.png)
Gesucht sind Gleichgewichtslagen, Schwingungen um diese und die numerische Lösung der nichtlinearen Bewegungsgleichung.
Lösung mit Maxima
Header
Wir nehemn an: das Massenmoment des homogenen Stabes bzgl. A ist JA, der Schwerpunkt des Stabes liegt in seiner Mitte.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 15.08.2 */
/* author: Andreas Baumgart */
/* last updated: */
/* ref: TM-C */
/* description: solve the IVP, check for stability */
/*******************************************************/
Declarations
Aus dem Prinzip der virtuellen Verrückungen kommt die Gleichgewichtsbeziehung für den Stab:
- ,
wobei
- .
Mit der neuen, dimensionslosen Zeit
wird aus der Bewegungsgleichung
- .
/* parameter */
params: [t[Bez]^2=J/(m*g*l/2)];
/* dimensionless equations of motion */
ode: J*'diff(phi,tau,2)/t[Bez]^2+m*g*l/2*sin(phi)=0;
ode: expand(subst(params,ode*(t[Bez]^2/J)));
Equilibrium Conditions
Die Gleichung
ist erfüllt für
![](/images/thumb/2/26/ODE1-11.png/300px-ODE1-11.png)
Die Funktion der Rückstell'kraft' sin(φ) schneidet die y-Achse dabei mit der Steigung +1 (z.B. bei φ1 = 0, φ3 = 2π) und mit der Steigung -1 (z.B. bei φ2 = π).
Das Vorzeichen der Steigung wird über die Stabilität der Lösung entscheiden!
/* static equilibrium conditions ....*/
plot2d(lhs(subst(['diff(phi,tau,2)=0],ode)),
[phi,-0.2,2*%pi+0.2], [title, "Rückstell'kraft'"],
[y,-1.1,1.1], [xlabel, "φ→"], [ylabel, "sin(φ)→"])$
Stability of Equilibrium Positions
Die Stabilität jeder Gleichgewichtsbedingung "im Kleinen" - also in unmittelbarer Umgebung der Gleichgewichtslage - untersuchen wir am linearisierten System.
Die Taylor-Reihenentwicklung um die Gleichgewichtslagen φi herum liefert
Dies ist Ausgangspunkt für unsere Stabilitätsanalyse:
Für φ1 = 0 (= 2π ):
- ,
also eine Schwingungslösung. Diese Lösung ist damit nicht instabil (weil wir keine Energiedissipation eingebaut haben, klingt sie aber auch nicht ab).
Für φ3 = π):
Analog ist
- ,
mit einer exponential abklingenden (λ2=-1) und einer exponential aufklingenden (λ2=+1) Lösung. Dieser zweite Anteil der Lösung macht sie instabil.
/* stability in proximity of equilib. conditions */
linode : taylor (ode, phi, Phi, 1);
Solving
Das nichtlineare Anfangswertproblem lösen wir durch numerische Integration.
Dafür müssen wir die Bewegungsgleichung als gewöhnliche Differentialgleichung (ODE) erster Ordnung schreiben, also mit
als
- .
Diese Bewegungsgleichung lösen wir mit den Anfangsbedingungen
- .
und das für verschiedene Anfangsgeschwindigkeiten y1.
In der Nähe der stabilen Lösung finden wir periodische Lösungen:
![]() | ![]() |
Mit mehr "Anschwung" dreht die Stange "durch", die Lösung ist nicht mehr periodisch:
![](/images/thumb/1/1d/ODE1-22.png/300px-ODE1-22.png)
/* solve initial value problem */
dudt : [omega,rhs(solve(dgl,'diff(phi,tau,2))[1])];
time : [ t, 0, 10, 0.01 ];
u0: [[0,0.6],[0,1.8],[0,2.2]];
u : [phi,omega];
samples : [];
for i:1 thru length(u0) do
(set : rk (dudt, u, u0[i], time ),
set : [makelist(set[j][1],j,1,length(set)),
makelist(set[j][2],j,1,length(set)),
makelist(set[j][3],j,1,length(set))],
samples : append(samples, set),
headline : [title, simplode(["u0 = ",u0[i]])],
plot2d([[discrete,set[1],set[2]],
[discrete,set[1],set[3]]],
headline, [legend, "φ","ω"],
[xlabel, "τ→"],[ylabel, "φ,ω→"]))$
Post-Processing
![](/images/thumb/8/8c/ODE1-24.png/300px-ODE1-24.png)
Diese Ergebnisse können wir im Phasendiagramm (Geschwindigkeit über der Auslenkung) auftragen.
/* phase diagram*/
toPlot : makelist([discrete,samples[3*(i-1)+2],
samples[3*(i-1)+3]],i,1,length(u0))$
plot2d(toPlot, [x,-%pi,+%pi], [legend, false],
[title, "phase-diagram"],
[xlabel, "φ→"],[ylabel, "ω→"])$
Links
- ...
Literature
- ...