Gelöste Aufgaben/ODE1: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 11: | Zeile 11: | ||
==Aufgabenstellung== | ==Aufgabenstellung== | ||
Hier untersuchen wir systematisch ein System aus einem starren Pendel im Erdschwerefeld. | |||
<onlyinclude> | <onlyinclude> | ||
[[Datei: | [[Datei:ODE1-01.png|alternativtext=|links|mini|197x197px|Lageplan]] | ||
Gesucht | Gesucht sind Gleichgewichtslagen, Schwingungen um diese und die numerische Lösung der nichtlinearen Bewegungsgleichung. | ||
</onlyinclude> | </onlyinclude> | ||
== Lösung mit Maxima == | == Lösung mit Maxima == | ||
<!--------------------------------------------------------------------------------> | |||
{{MyCodeBlock|title=Header | {{MyCodeBlock|title=Header | ||
|text= | |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> | <syntaxhighlight lang="lisp" line start=1> | ||
/*******************************************************/ | |||
/* MAXIMA script */ | |||
/* version: wxMaxima 15.08.2 */ | |||
/* author: Andreas Baumgart */ | |||
/* last updated: */ | |||
/* ref: TM-C */ | |||
/* description: solve the IVP, check for stability */ | |||
/*******************************************************/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Declarations | {{MyCodeBlock|title=Declarations | ||
|text= | |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: | |||
::<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 | |||
::<math>\varphi = \varphi(t)</math>. | |||
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> | |||
wird aus der Bewegungsgleichung | |||
::<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 | {{MyCodeBlock|title=Equilibrium Conditions | ||
|text= | |text= | ||
Die Gleichung | |||
::<math>\displaystyle \frac{d^2}{d\tau^2} \varphi = 0</math> | |||
ist erfüllt für | |||
::<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! | |||
|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.
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
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:
/* 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
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
- ...