Gelöste Aufgaben/Kw23: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 29: Zeile 29:
Die Federkraft K ist also Null, solange die Kugel die Oberfläche nicht berührt und sie sei hier - eine weitere drastische Vereinfachung - proportional zur Federkompression ''w'', wenn sich Kugel und Oberfläche berühren:
Die Federkraft K ist also Null, solange die Kugel die Oberfläche nicht berührt und sie sei hier - eine weitere drastische Vereinfachung - proportional zur Federkompression ''w'', wenn sich Kugel und Oberfläche berühren:


==tmp==
<!-------------------------------------------------------------------------------->
Wir lösen das Anfangswertproblem zu einer nichtlinearen Bewegungsgleichung. Die Nichtlinearität kommt aus der Kontaktbedingung der Kugel mit der Oberfläche.


Die Bewegungsgleichung ist stückweise linear, hier erfassen wir sie durch eine Kennlinie, die wir zwischen den linearen Bereich ausrunden. Das Ausrunden macht die numerische Integration schneller.<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Wir lösen das Anfangswertproblem zu einer nichtlinearen Bewegungsgleichung. Die Nichtlinearität kommt aus der Kontaktbedingung der Kugel mit der Oberfläche.


{{MyCodeBlock|title=Header
Die Bewegungsgleichung ist stückweise linear, hier erfassen wir sie durch eine Kennlinie, die wir zwischen den linearen Bereich ausrunden. Das Ausrunden macht die numerische Integration schneller.
|text=Text
|text=Text
|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: 2017-09-24                              */
/* ref: Kw23 (TM-C, Labor 5)                            */
/* description: finds the solution for                  */
/*              the nonlinear IVP                        */
/*********************************************************/
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==tmp==
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Declarations
|text=
Wir verwenden die Parameter
Wir verwenden die Parameter


<math>\begin{array}{ll}k &= \displaystyle \kappa \frac{m\;g}{r}\\t_{B} &=\sqrt{\displaystyle\frac{r}{g}}\\\kappa&=100\end{array}</math>
::<math>\begin{array}{ll}k &= \displaystyle \kappa \frac{m\;g}{r}\\t_{B} &=\sqrt{\displaystyle\frac{r}{g}}\\\kappa&=100\end{array}</math>


Die [[Sources/Lexikon/Kontaktkennlinie|Kennlinie für den Kontakt]] definieren wir stückweise zu
Die [[Sources/Lexikon/Kontaktkennlinie|Kennlinie für den Kontakt]] definieren wir stückweise zu


<math>K(w,\epsilon) = \left\{ \begin{array}{ccl}    0 &\text{für}& w < -\epsilon\\ \displaystyle  k\cdot\frac{\epsilon}{4} \left( 1+ \frac{w}{\epsilon} \right)^2 &\text{für}& -\epsilon < w<+\epsilon\\  k\cdot  w &\text{für}& \epsilon < w\\ \end{array} \right.</math>[[Datei:Kw23-11.png|mini|Kontakt-Kennlinie]]Und so sieht sie dann aus:<!-------------------------------------------------------------------------------->
::<math>K(w,\epsilon) = \left\{ \begin{array}{ccl}    0 &\text{für}& w < -\epsilon\\ \displaystyle  k\cdot\frac{\epsilon}{4} \left( 1+ \frac{w}{\epsilon} \right)^2 &\text{für}& -\epsilon < w<+\epsilon\\  k\cdot  w &\text{für}& \epsilon < w\\ \end{array} \right.</math>


{{MyCodeBlock|title=Declarations
[[Datei:Kw23-11.png|mini|Kontakt-Kennlinie]]Und so sieht sie dann aus:
|text=Text
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/*********************************************************/
/* declarations */
assume(g>0, r>0);
 
/* parameter */
params: [k = kappa*m*g/r,  /*spring stiffness*/
        t[B] = sqrt(2*r/g), /*reference time*/
        kappa = 100];    /*dim'less spring stiffness*/
 
/**** define nonlinear spring characteristic ***/
 
K(w,epsilon) := if w <- epsilon then
                  0
                elseif w< epsilon then
                  (w/epsilon+1)^2*epsilon/4
                else
                w;       
plot2d(K(w,0.5),[w,-1,1],
          [ylabel,"K/(k*W)->"], [xlabel,"w/W->"],
          [legend, "restoring force, ε=0.5"]);
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==tmp==
<!-------------------------------------------------------------------------------->
 
{{MyCodeBlock|title=Equilibrium Conditions
|text=
[[Datei:Kw53-12.png|mini|Freikörperbild|alternativtext=|links|119x119px]]Die Gleichgewichtsbedingung lesen wir mit dem [[Sources/Lexikon/D'Alembert'sche Trägheitskraft|Prinzip von d'Alembert]] aus dem Freikörperbild ab:
[[Datei:Kw53-12.png|mini|Freikörperbild|alternativtext=|links|119x119px]]Die Gleichgewichtsbedingung lesen wir mit dem [[Sources/Lexikon/D'Alembert'sche Trägheitskraft|Prinzip von d'Alembert]] aus dem Freikörperbild ab:


<math>- m\cdot\ddot{h} - m\cdot g + K(w) = 0</math>
::<math>- m\cdot\ddot{h} - m\cdot g + K(w) = 0</math>
Mit der dimensionslosen Zeit und Höhe
Mit der dimensionslosen Zeit und Höhe


<math>\tau = t/t_B</math>,
::<math>\tau = t/t_B</math>,


<math>\tilde{h} = h / r </math>
::<math>\tilde{h} = h / r </math>


sowie
sowie


<math>K = k \cdot r \cdot \tilde{K} </math>
::<math>K = k \cdot r \cdot \tilde{K} </math>


wird daraus
wird daraus


<math>\frac{\displaystyle m\cdot r}{\displaystyle {{t}_{B}^{2}}} \left( \displaystyle  \frac{{{d}^{2}}}{d\,{{\tau}^{2}}}\cdot \tilde{h}\right)  - k \cdot r \cdot \tilde{K} \left( -\tilde{h},\frac{1}{100}\right) +g\cdot m=0</math>.
::<math>\frac{\displaystyle m\cdot r}{\displaystyle {{t}_{B}^{2}}} \left( \displaystyle  \frac{{{d}^{2}}}{d\,{{\tau}^{2}}}\cdot \tilde{h}\right)  - k \cdot r \cdot \tilde{K} \left( -\tilde{h},\frac{1}{100}\right) +g\cdot m=0</math>.


Weil wir ab hier mit den dimensionslosen Koordinaten weiterarbeiten, lassen wir die Tilde über dem ''h'' gleich wieder weg - so wird's übersichtlicher.<!-------------------------------------------------------------------------------->
Weil wir ab hier mit den dimensionslosen Koordinaten weiterarbeiten, lassen wir die Tilde über dem ''h'' gleich wieder weg - so wird's übersichtlicher.
 
{{MyCodeBlock|title=Equilibrium Conditions
|text=Text
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
1+1
/********************************/
/* define ODE in dim'less coordinate h */
dgl : m*r/t[B]^2*'diff(h,t,2)-k*r*K(-h,1/100)+m*g = 0;
dgl : expand(solve(dgl, 'diff(h,t,2)))[1];
dgl : expand(subst(params,dgl));
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==tmp==
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Solving
|text=
Die Bewegungsgleichung zweiter Ordnung schrieben wir nun um als zwei Bewegungsgleichungen erster Ordnung zu
Die Bewegungsgleichung zweiter Ordnung schrieben wir nun um als zwei Bewegungsgleichungen erster Ordnung zu


<math>\displaystyle \frac{d}{d\,\tau}\left(\begin{array}{c}h\\v\end{array}\right) = \underline{f}(h)</math>.
::<math>\displaystyle \frac{d}{d\,\tau}\left(\begin{array}{c}h\\v\end{array}\right) = \underline{f}(h)</math>.


Die rechte Seite der gewöhnlichen Differentialgleichung ("Right-hand-side of ODE") lautet damit
Die rechte Seite der gewöhnlichen Differentialgleichung ("Right-hand-side of ODE") lautet damit


<math>\begin{pmatrix}v\\ 100.0\cdot \left( \text{ if } -1.0\cdot h<-0.01 \text{ then } 0.0 \text{ elseif } -1.0\cdot h<0.01 \text{ then } 0.5\cdot {{h}^{2}}-0.01\cdot h+5.0\cdot {{10}^{-5}} \mathrm{else} -1.0\cdot h\right) -1.0\end{pmatrix}</math>
::<math>\begin{pmatrix}v\\ 100.0\cdot \left( \text{ if } -1.0\cdot h<-0.01 \text{ then } 0.0 \text{ elseif } -1.0\cdot h<0.01 \text{ then } 0.5\cdot {{h}^{2}}-0.01\cdot h+5.0\cdot {{10}^{-5}} \mathrm{else} -1.0\cdot h\right) -1.0\end{pmatrix}</math>


Und diese können wir - hier mit dem [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Runge-Kutta-Verfahren 4.ter Ordnung|Runge-Kutta-Verfahren 4.ter Ordnung]] - lösen.
Und diese können wir - hier mit dem [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Runge-Kutta-Verfahren 4.ter Ordnung|Runge-Kutta-Verfahren 4.ter Ordnung]] - lösen.
<!-------------------------------------------------------------------------------->
|code=
<syntaxhighlight lang="lisp" line start=1>


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


{{MyCodeBlock|title=Solving
ivs : rk(dgl1stOrder, stateVabs, initiVals, times)$
|text=Text
|code=
<syntaxhighlight lang="lisp" line start=1>
1+1
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==tmp==
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Post-Processing
|text=
Wir tragen die Höhe ''h'' über der Zeit und ''h'' über ''v'' im [[Sources/Lexikon/Phasendiagramme|Phasendiagramm]] auf:
Wir tragen die Höhe ''h'' über der Zeit und ''h'' über ''v'' im [[Sources/Lexikon/Phasendiagramme|Phasendiagramm]] auf:


Height ''h'':[[Datei:Kw53-13.png|mini|Lösung im Zeitbereich|alternativtext=|ohne]]Phase Diagram:[[Datei:Kw53-14.png|mini|Lösung im Phasenraum|alternativtext=|ohne]]
Height ''h'':[[Datei:Kw53-13.png|mini|Lösung im Zeitbereich|alternativtext=|ohne]]Phase Diagram:[[Datei:Kw53-14.png|mini|Lösung im Phasenraum|alternativtext=|ohne]]
<!-------------------------------------------------------------------------------->
{{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))$
H : makelist(ivs[j][2],j,1,length(ivs))$
V : makelist(ivs[j][3],j,1,length(ivs))$
plot2d([discrete, T, H],
    [title, sconcat("start @: ",string(initiVals))],
                  [xlabel,"τ/1->"], [ylabel,"h/1->"]);
 
/* phase plot */
plot2d([discrete,H,V], [legend, false], [x,-1,10],
                  [ylabel,"V/1->"], [xlabel,"H/1->"]);
</syntaxhighlight>
</syntaxhighlight>
}}
}}

Version vom 27. März 2021, 07:41 Uhr


Aufgabenstellung

Eine Kugel (Masse m, Radius r) wird aus der Höhe H im Erdschwerefeld losgelassen, kommt auf den Boden auf und „springt“ dann wie ein Flummi auf und ab. Der Stoß zwischen Kugel und Oberfläche sei ideal-elastisch. Gefragt ist eine numerische Lösung des Problems als Anfangswertproblem.

Dabei modellieren Sie die Kugel als elastisch, die Unterlage als starr. Die Kugel können Sie sich so wie unten skizziert im unteren Teil durch eine Feder ersetzt denken.

Lageplan

Eine elastische Kugel wird im Erdschwerefeld losgelassen und „springt“ wie ein Flummi auf und ab. Gesucht ist die numerische Lösung als Anfangswertproblem.


Lösung mit Maxima

Die Schwierigkeit kommt aus der Modellierung der Kontaktkraft zwischen Boden und Kugel. Oft reicht es, ein phänomenologisches Modell zu implementieren - also die Kontaktkraft als reine "Federkraft" zu interpretieren.

Kugel-Modell: elastischer Kontakt
mit Einfederung w.



Die Federkraft K ist also Null, solange die Kugel die Oberfläche nicht berührt und sie sei hier - eine weitere drastische Vereinfachung - proportional zur Federkompression w, wenn sich Kugel und Oberfläche berühren:


===Wir lösen das Anfangswertproblem zu einer nichtlinearen Bewegungsgleichung. Die Nichtlinearität kommt aus der Kontaktbedingung der Kugel mit der Oberfläche.

Die Bewegungsgleichung ist stückweise linear, hier erfassen wir sie durch eine Kennlinie, die wir zwischen den linearen Bereich ausrunden. Das Ausrunden macht die numerische Integration schneller.=== Text


/*********************************************************/
/* MAXIMA script                                         */
/* version: wxMaxima 15.08.2                             */
/* author: Andreas Baumgart                              */
/* last updated: 2017-09-24                              */
/* ref: Kw23 (TM-C, Labor 5)                             */
/* description: finds the solution for                   */
/*              the nonlinear IVP                        */
/*********************************************************/




Declarations

Wir verwenden die Parameter

Die Kennlinie für den Kontakt definieren wir stückweise zu

Kontakt-Kennlinie

Und so sieht sie dann aus:


/*********************************************************/
/* declarations */
assume(g>0, r>0);

/* parameter */
params: [k = kappa*m*g/r,  /*spring stiffness*/
         t[B] = sqrt(2*r/g), /*reference time*/
         kappa = 100];     /*dim'less spring stiffness*/

/**** define nonlinear spring characteristic ***/

K(w,epsilon) := if w <- epsilon then
                   0
                elseif w< epsilon then
                   (w/epsilon+1)^2*epsilon/4
                else
                w;         
plot2d(K(w,0.5),[w,-1,1], 
          [ylabel,"K/(k*W)->"], [xlabel,"w/W->"],
          [legend, "restoring force, ε=0.5"]);




Equilibrium Conditions

Freikörperbild

Die Gleichgewichtsbedingung lesen wir mit dem Prinzip von d'Alembert aus dem Freikörperbild ab:

Mit der dimensionslosen Zeit und Höhe

,

sowie

wird daraus

.

Weil wir ab hier mit den dimensionslosen Koordinaten weiterarbeiten, lassen wir die Tilde über dem h gleich wieder weg - so wird's übersichtlicher.


/********************************/
/* define ODE in dim'less coordinate h */
dgl : m*r/t[B]^2*'diff(h,t,2)-k*r*K(-h,1/100)+m*g = 0;
dgl : expand(solve(dgl, 'diff(h,t,2)))[1];
dgl : expand(subst(params,dgl));




Solving

Die Bewegungsgleichung zweiter Ordnung schrieben wir nun um als zwei Bewegungsgleichungen erster Ordnung zu

.

Die rechte Seite der gewöhnlichen Differentialgleichung ("Right-hand-side of ODE") lautet damit

Und diese können wir - hier mit dem Runge-Kutta-Verfahren 4.ter Ordnung - lösen.


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

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




Post-Processing

Wir tragen die Höhe h über der Zeit und h über v im Phasendiagramm auf:

Height h:

Lösung im Zeitbereich

Phase Diagram:

Lösung im Phasenraum

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

/* phase plot */
plot2d([discrete,H,V], [legend, false], [x,-1,10],
                   [ylabel,"V/1->"], [xlabel,"H/1->"]);





Links

  • ...

Literature

  • ...