Gelöste Aufgaben/Kv52: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 12: Zeile 12:


==Aufgabenstellung==
==Aufgabenstellung==
SOME TEXT
<onlyinclude>
[[Datei:Kv52-01.png|alternativtext=|links|mini|175x175px|Lageplan]]
Ein starrer Stab ''AB'' (Massenmoment ''J<sub>A</sub>'', Länge ''ℓ<sub>1</sub>'') wird aus dem Winkel ''φ<sub>0</sub>'' im Erdschwerefeld losgelassen und stößt in ''C'' auf einen Anschlag. Der Stoß zwischen Stab und Oberfläche sei ideal-elastisch.


<onlyinclude>
Gesucht ist die nichtlineare Bewegungsgleichung und die numerische Lösung als Anfangswertproblem.</onlyinclude>
[[Datei:Screenshot 20210111-063733~2.png|100px|left|mini|Caption]]
Dabei denken wir uns den Anschlag als elastische Feder, die nur für ''φ<-π/2'' Kontakt zum Stab hat. Die Federkraft ist also Null, solange der Stab die Oberfläche in ''C'' nicht berührt und sie ist proportional zur Federkompression ''w'', wenn sich Kugel und Oberfläche berühren.
Gesucht ist "SOME EXPLANATION"
</onlyinclude>


== Lösung mit Maxima ==
== Lösung mit Maxima ==
Lorem Ipsum ....
<!-------------------------------------------------------------------------------->


==tmp==
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Header
{{MyCodeBlock|title=Header
|text=Wir stellen die Bewegungsgleichungen des Systems als System con Differentialgleichungen erster Ordnung auf. Die Nichtlinearität kommt aus den großen Winkeln ''φ(t)'' und dem Kontakt mit der Wand.


|text=Text
Mit unterschiedlichen Steifigkeiten für den Kontakt testen wir die Möglichkeiten der numerischen Integration aus.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/*********************************************************/
/* MAXIMA script                                        */
/* version: wxMaxima 15.08.2                            */
/* author: Andreas Baumgart                              */
/* last updated: 2018-05-14                              */
/* ref: Kv52 (TM-C, Labor 5)                            */
/* description: finds the solution for                  */
/*              the nonlinear IVP                        */
/*********************************************************/
</syntaxhighlight>
</syntaxhighlight>
}}
}}
==tmp==
 
<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Declarations
{{MyCodeBlock|title=Declarations
|text=Text
|text=Die System-Parameter sind
 
::<math>\begin{array}{l}\ell_2 = \frac{3}{4}\ell_1\\J_A = \frac{1}{3}m\;\ell_1^2\end{array}</math>.
 
Zum Dimensionslos-Machen der Bewegungsgleichungen brauchen wir später eine Bezugszeit ''t<sub>B</sub>'', die wir mit Hilfe der Eigenfrequenz der zugeordneten linearen Systems so wählen:
 
::<math>t_B = 1/\omega_0</math>
::(Achtung: das macht ''2π''-periodische Lösungen)
 
Die Eigenkreisfrequenz bei Schwingungen um ''φ =-'' ''π/2'' herum ist
 
::<math>\displaystyle \omega_0^2 = \frac{m\,g\,\ell}{2\,J_A}</math>
 
Außerdem wählen wir eine dimensionslose Federsteifigkeit ''κ'', so dass
 
::<math>\displaystyle k = \kappa\cdot \frac{m\,g}{\ell_2}</math>[[Datei:Kv52-02.png|mini|Kennlinie]]Für den nichtlinearen Kontakt wählen wir eine Kennlinie wie in [[Gelöste Aufgaben/Kw23|Kw23]] zu
 
::<math>C(\tilde{u},\varepsilon) = \left\{\begin{array}{ll}0&\text{ wenn } \tilde{u}<-\varepsilon\\\frac{1}{2}(\tilde{u}+\varepsilon)^2& \text{ wenn } -\varepsilon<\tilde{u}<\varepsilon \text{ und }\\\tilde{u}&\text{ sonst }\end{array}\right.</math>
 
Und so wie rechts im Bild sieht sie dann aus:
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/* declarations */
assume(g>0, l[1]>0, l[2]>0, m>0);
 
/* parameter */
params: [k    = kappa*m*g/l[2],  /*spring stiffness*/
        l[2] = 3/4*l[1],
        t[B] = 1/omega[0]    ,  /*reference time*/
        omega[0] = sqrt((m*g*l[1]/2)/J[A]),
        J[A] = m*l[1]^2/3,
        kappa= 1000];            /*dim'less spring stiffness*/
 
/**** define nonlinear spring characteristic ***/
C(u,epsilon) := if u <- epsilon then
                  0
                elseif u< epsilon then
                  1/2*(u+epsilon)^2
                else
                u;       
plot2d(K(u,0.5),[u,-1,1],
          [ylabel,"K/1->"], [xlabel,"u/1->"],
          [legend, "contact characteristic, ε=0.5"]);
</syntaxhighlight>
</syntaxhighlight>
}}
}}
==tmp==


<table class="wikitable">
<!-------------------------------------------------------------------------------->
<tr><th></th><th></th></tr>
{{MyCodeBlock|title=Equilibrium Conditions
<tr><td></td><td></td></tr>
|text=
Die Gleichgewichtsbeziehungen erhalten wir aus einem Momentengleichgewicht um den Punkt A.
 
Das Freikörperbild
<table class="wikitable" style="background-color:white;float:left; margin:4px;>
<tr><td><br/><br/>[[Datei:Kv52-11.png|alternativtext=|rahmenlos|82x82px]]
</td><td>[[Datei:Kv52-12.png|alternativtext=|rahmenlos|144x144px]]
</td></tr>
</table>
</table>


<!-------------------------------------------------------------------------------->
liefert die Bewegungsgleichung
{{MyCodeBlock|title=Equilibrium Conditions
 
|text=Text
::<math>\displaystyle J_A\ddot{\varphi}-K(\varphi)\,\ell_2+m g \frac{\ell_1}{2} \cos(\varphi) = 0</math>
 
Die Kontaktkraft konstruieren wir mit Hilfe der nichtlinearen Kennlinie ''C'' und
 
::<math>\displaystyle\tilde{u} = -\frac{\pi}{2} - \varphi</math>
 
zu
 
::<math>K(\varphi) = \ell_2\cdot C(-\pi/2-\varphi,\varepsilon)</math>.
 
Mit der dimensionslosen Zeit
 
::<math>\tau = t/t_B</math>
 
finden wir als Bewegungsgleichung des Systems
 
::<math>\displaystyle \frac{d^2}{d\tau^2} \varphi + \cos(\varphi) - \frac{3}{2}\,\kappa \cdot C(-\pi/2-\varphi,\varepsilon)=0</math>.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/********************************/
/* define ODE in dim'less coordinate h */
dgl : J[A]*'diff(phi,t,2)-k*l[2]^2*C(-%pi/2-phi,1/100)+m*g*l[1]/2*cos(phi) = 0;
dgl : subst(['diff(phi,t,2)='diff(phi,tau,2)/t[B]^2],dgl);
dgl : expand(solve(dgl, 'diff(phi,tau,2)))[1];
dgl : expand(subst(params,dgl));
</syntaxhighlight>
</syntaxhighlight>
}}
}}
==tmp==
 
<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Solving
{{MyCodeBlock|title=Solving
|text=Text
|text=Umschreiben in ein Differentialgleichungssystem erster Ordnung - wie wir es für die numerische Lösung brauchen - liefert
 
::<math>\left(\begin{array}{c}\dot{\varphi}\\\dot{\omega}\end{array}\right) = \left(\begin{array}{c}\omega\\\displaystyle \frac{3}{2}\,\kappa \cdot C(-\pi/2-\varphi,\varepsilon)-\cos(\varphi)\end{array}\right)</math>.
 
Mit den Anfangsbedingungen
 
::<math>\begin{array}{l}\varphi(0) = 0\\\omega(0) = 0\end{array}</math>
 
und einer Lösungsroutine nach dem [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Runge-Kutta-Verfahren 4.ter Ordnung|Runge-Kutta-Verfahren 4.ter Ordnung]] liefert das numerische Ergebnis.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/********************************/
/* numerical solution of IVP */
times : subst([t0 = 0, tmax = 10, dt = 0.01],
                    [t, t0, tmax, dt]);
dgl1stOrder : subst(params,[omega,float(expand(rhs(dgl)))]);
stateVabs : [phi,omega];
initiVals : [0,0];
 
ivs : rk(dgl1stOrder, stateVabs, initiVals, times)$
</syntaxhighlight>
</syntaxhighlight>
}}
}}
==tmp==
<!-------------------------------------------------------------------------------->




<table class="wikitable">
<!-------------------------------------------------------------------------------->
<tr><th></th><th></th></tr>
{{MyCodeBlock|title=Post-Processing
<tr><td></td><td></td></tr>
|text=
Wir tragen hier die Ergebnisse zweier Simulationsrechnungen auf:
<table class="wikitable" style="background-color:white;">
<tr><th>... in dieser Spalte den Referenzfall für <math>\kappa = 100.</math></th>
    <th>... und hier für <math>\kappa = 1000.</math></th></tr>
<tr><td>zunächst im Zeitbereich</td><td></td></tr>
<tr><td>[[Datei:Kv52-14.png|alternativtext=|rahmenlos]]</td>
    <td>[[Datei:Kv52-16.png|alternativtext=|rahmenlos]]</td></tr>
<tr><td>und dann im Phasenraum:</td><td></td></tr>
<tr><td>[[Datei:Kv52-15.png|alternativtext=|rahmenlos]]</td>
    <td>[[Datei:Kv52-17.png|alternativtext=|rahmenlos]]</td></tr>
</table>
</table>


 
Im Referenzfall erhalten wir - wie erhofft - eine periodische Lösung: die Phasenkurve ist geschlossen. Schon für eine um den Faktur 10 größere Steifigkeit des Anschlags jedoch weicht die Lösung sichtbar von einer periodischen ab. Das klassische Problem von numerischen Integrationsroutinen wird hier sichtbar.
{{MyCodeBlock|title=Post-Processing
 
|text=Text
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/********************************/
/* plot time functions */
T : makelist(ivs[j][1],j,1,length(ivs))$
P : makelist(ivs[j][2],j,1,length(ivs))$
O : makelist(ivs[j][3],j,1,length(ivs))$
plot2d([discrete, T, P],
[title, sconcat("start @: ",string(initiVals))],
[xlabel,"τ/1->"], [ylabel,"φ/1->"]);
 
/* phase plot */
plot2d([discrete,P,O], [legend, false], /*[x,-1,10],*/
[ylabel,"φ'/1->"], [xlabel,"φ/1->"]);
</syntaxhighlight>
</syntaxhighlight>
}}
}}


<hr/>
<hr/>

Aktuelle Version vom 29. März 2021, 06:26 Uhr


Aufgabenstellung

Lageplan

Ein starrer Stab AB (Massenmoment JA, Länge 1) wird aus dem Winkel φ0 im Erdschwerefeld losgelassen und stößt in C auf einen Anschlag. Der Stoß zwischen Stab und Oberfläche sei ideal-elastisch.

Gesucht ist die nichtlineare Bewegungsgleichung und die numerische Lösung als Anfangswertproblem. Dabei denken wir uns den Anschlag als elastische Feder, die nur für φ<-π/2 Kontakt zum Stab hat. Die Federkraft ist also Null, solange der Stab die Oberfläche in C nicht berührt und sie ist proportional zur Federkompression w, wenn sich Kugel und Oberfläche berühren.

Lösung mit Maxima

Header

Wir stellen die Bewegungsgleichungen des Systems als System con Differentialgleichungen erster Ordnung auf. Die Nichtlinearität kommt aus den großen Winkeln φ(t) und dem Kontakt mit der Wand.

Mit unterschiedlichen Steifigkeiten für den Kontakt testen wir die Möglichkeiten der numerischen Integration aus.


/*********************************************************/
/* MAXIMA script                                         */
/* version: wxMaxima 15.08.2                             */
/* author: Andreas Baumgart                              */
/* last updated: 2018-05-14                              */
/* ref: Kv52 (TM-C, Labor 5)                             */
/* description: finds the solution for                   */
/*              the nonlinear IVP                        */
/*********************************************************/




Declarations

Die System-Parameter sind

.

Zum Dimensionslos-Machen der Bewegungsgleichungen brauchen wir später eine Bezugszeit tB, die wir mit Hilfe der Eigenfrequenz der zugeordneten linearen Systems so wählen:

(Achtung: das macht -periodische Lösungen)

Die Eigenkreisfrequenz bei Schwingungen um φ =- π/2 herum ist

Außerdem wählen wir eine dimensionslose Federsteifigkeit κ, so dass

Kennlinie
Für den nichtlinearen Kontakt wählen wir eine Kennlinie wie in Kw23 zu

Und so wie rechts im Bild sieht sie dann aus:


/* declarations */
assume(g>0, l[1]>0, l[2]>0, m>0);

/* parameter */
params: [k    = kappa*m*g/l[2],   /*spring stiffness*/
         l[2] = 3/4*l[1],
         t[B] = 1/omega[0]     ,  /*reference time*/
         omega[0] = sqrt((m*g*l[1]/2)/J[A]),
         J[A] = m*l[1]^2/3,
         kappa= 1000];            /*dim'less spring stiffness*/

/**** define nonlinear spring characteristic ***/
C(u,epsilon) := if u <- epsilon then
                   0
                elseif u< epsilon then
                   1/2*(u+epsilon)^2
                else
                u;         
plot2d(K(u,0.5),[u,-1,1],
          [ylabel,"K/1->"], [xlabel,"u/1->"],
          [legend, "contact characteristic, ε=0.5"]);




Equilibrium Conditions

Die Gleichgewichtsbeziehungen erhalten wir aus einem Momentengleichgewicht um den Punkt A.

Das Freikörperbild



liefert die Bewegungsgleichung

Die Kontaktkraft konstruieren wir mit Hilfe der nichtlinearen Kennlinie C und

zu

.

Mit der dimensionslosen Zeit

finden wir als Bewegungsgleichung des Systems

.

/********************************/
/* define ODE in dim'less coordinate h */
dgl : J[A]*'diff(phi,t,2)-k*l[2]^2*C(-%pi/2-phi,1/100)+m*g*l[1]/2*cos(phi) = 0;
dgl : subst(['diff(phi,t,2)='diff(phi,tau,2)/t[B]^2],dgl);
dgl : expand(solve(dgl, 'diff(phi,tau,2)))[1];
dgl : expand(subst(params,dgl));




Solving

Umschreiben in ein Differentialgleichungssystem erster Ordnung - wie wir es für die numerische Lösung brauchen - liefert

.

Mit den Anfangsbedingungen

und einer Lösungsroutine nach dem Runge-Kutta-Verfahren 4.ter Ordnung liefert das numerische Ergebnis.


/********************************/
/* numerical solution of IVP */
times : subst([t0 = 0, tmax = 10, dt = 0.01],
                    [t, t0, tmax, dt]);
dgl1stOrder : subst(params,[omega,float(expand(rhs(dgl)))]);
stateVabs : [phi,omega];
initiVals : [0,0];

ivs : rk(dgl1stOrder, stateVabs, initiVals, times)$




Post-Processing

Wir tragen hier die Ergebnisse zweier Simulationsrechnungen auf:

... in dieser Spalte den Referenzfall für ... und hier für
zunächst im Zeitbereich
und dann im Phasenraum:

Im Referenzfall erhalten wir - wie erhofft - eine periodische Lösung: die Phasenkurve ist geschlossen. Schon für eine um den Faktur 10 größere Steifigkeit des Anschlags jedoch weicht die Lösung sichtbar von einer periodischen ab. Das klassische Problem von numerischen Integrationsroutinen wird hier sichtbar.


/********************************/
/* plot time functions */
T : makelist(ivs[j][1],j,1,length(ivs))$
P : makelist(ivs[j][2],j,1,length(ivs))$
O : makelist(ivs[j][3],j,1,length(ivs))$
plot2d([discrete, T, P],
[title, sconcat("start @: ",string(initiVals))],
[xlabel,"τ/1->"], [ylabel,"φ/1->"]);

/* phase plot */
plot2d([discrete,P,O], [legend, false], /*[x,-1,10],*/
[ylabel,"φ'/1->"], [xlabel,"φ/1->"]);





Links

  • ...

Literature

  • ...