Gelöste Aufgaben/ODE1: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
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|236x236px|Lageplan]]
[[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 ==


bzgl ''A'' ist ''J<sub>A</sub>'', der Schwerpunkt des Stabes liegt in seiner Mitte.<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->


{{MyCodeBlock|title=Header
{{MyCodeBlock|title=Header
|text=Wir nehemn an: das Massenmoment des homogenen Stabes bzgl A ist JA, der Schwerpunkt des Stabes liegt in seiner Mitte.
|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 lang="lisp" line start=1>
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==tmp==


<!-------------------------------------------------------------------------------->
{{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>.
 
{{MyCodeBlock|title=Declarations
|text=Text
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+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>
}}
}}


==tmp==


<!-------------------------------------------------------------------------------->
{{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>[[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> = π'').
::<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!
 
 
 
{{MyCodeBlock|title=Equilibrium Conditions
|text=Text
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
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>
}}
}}


==tmp==


<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Equilibrium Conditions and Stability
{{MyCodeBlock|title=Stability of Equilibrium Positions
|text=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+1
/* stability in proximity of equilib. conditions */
linode : taylor (ode, phi, Phi, 1);
</syntaxhighlight>
</syntaxhighlight>
}}
}}
==tmp==


<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Solving
{{MyCodeBlock|title=Solving
|text=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+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>
}}
}}
==tmp==


<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Post-Processing
{{MyCodeBlock|title=Post-Processing
|text=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>
}}
}}
<table class="wikitable" style="background-color:white; float: left; margin-right:14px;
">
<tr><th></th><th></th></tr>
<tr><td></td><td></td></tr>
</table>
[[Datei:ODE1-24.png|mini|Phasendiagramm]]
[[Datei:ODE1-01.png|mini]]
[[Datei:ODE1-21.png|mini|Lösung im Zeitbereich]]
[[Datei:ODE1-23.png|mini|Lösung im Zeitbereich.]]
[[Datei:ODE1-22.png|mini|Lösung im Zeitbereich]]


<hr/>
<hr/>

Aktuelle Version vom 1. April 2021, 10:52 Uhr


Aufgabenstellung

Hier untersuchen wir systematisch ein System aus einem starren Pendel im Erdschwerefeld.


Lageplan

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

Gleichgewichtslagen

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π ):

Der -Ansatz liefert

,

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:

Lösung im Zeitbereich - die Stange "dreht durch".

/* 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

Phasendiagramm

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

  • ...