Gelöste Aufgaben/Kv52: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 20: | Zeile 20: | ||
== Lösung mit Maxima == | == Lösung mit Maxima == | ||
<!--------------------------------------------------------------------------------> | |||
{{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. | |||
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> | ||
/*********************************************************/ | |||
/* 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> | ||
}} | }} | ||
<math>\begin{array}{l}\ell_2 = \frac{3}{4}\ell_1\\J_A = \frac{1}{3}m\;\ell_1^2\end{array}</math>. | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Declarations | |||
|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: | 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> | ::<math>t_B = 1/\omega_0</math> | ||
::(Achtung: das macht ''2π''-periodische Lösungen) | |||
(Achtung: das macht ''2π''-periodische Lösungen) | |||
Die Eigenkreisfrequenz bei Schwingungen um ''φ =-'' ''π/2'' herum ist | Die Eigenkreisfrequenz bei Schwingungen um ''φ =-'' ''π/2'' herum ist | ||
<math>\displaystyle \omega_0^2 = \frac{m\,g\,\ell}{2\,J_A}</math> | ::<math>\displaystyle \omega_0^2 = \frac{m\,g\,\ell}{2\,J_A}</math> | ||
Außerdem wählen wir eine dimensionslose Federsteifigkeit ''κ'', so dass | 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>\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> | ::<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: | 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> | ||
}} | }} | ||
= | |||
<!--------------------------------------------------------------------------------> | |||
{{MyCodeBlock|title=Equilibrium Conditions | |||
|text= | |||
Die Gleichgewichtsbeziehungen erhalten wir aus einem Momentengleichgewicht um den Punkt A. | Die Gleichgewichtsbeziehungen erhalten wir aus einem Momentengleichgewicht um den Punkt A. | ||
Das Freikörperbild <table class="wikitable"> | Das Freikörperbild | ||
<tr><td> | <table class="wikitable" style="background-color:white;float:left; margin:4px;> | ||
<tr><td>[[Datei:Kv52-11.png|alternativtext=|rahmenlos|82x82px]] | |||
[[Datei:Kv52-11.png|alternativtext=|rahmenlos|82x82px]] | |||
</td><td>[[Datei:Kv52-12.png|alternativtext=|rahmenlos|144x144px]] | </td><td>[[Datei:Kv52-12.png|alternativtext=|rahmenlos|144x144px]] | ||
</td></tr> | </td></tr> | ||
Zeile 80: | Zeile 102: | ||
liefert die Bewegungsgleichung | liefert die Bewegungsgleichung | ||
<math>\displaystyle J_A\ddot{\varphi}-K(\varphi)\,\ell_2+m g \frac{\ell_1}{2} \cos(\varphi) = 0</math> | ::<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 | Die Kontaktkraft konstruieren wir mit Hilfe der nichtlinearen Kennlinie ''C'' und | ||
<math>\displaystyle\tilde{u} = -\frac{\pi}{2} - \varphi</math> | ::<math>\displaystyle\tilde{u} = -\frac{\pi}{2} - \varphi</math> | ||
zu | zu | ||
<math>K(\varphi) = \ell_2\cdot C(-\pi/2-\varphi,\varepsilon)</math>. | ::<math>K(\varphi) = \ell_2\cdot C(-\pi/2-\varphi,\varepsilon)</math>. | ||
Mit der dimensionslosen Zeit | Mit der dimensionslosen Zeit | ||
<math>\tau = t/t_B</math> | ::<math>\tau = t/t_B</math> | ||
finden wir als Bewegungsgleichung des Systems | 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>. | ::<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> | ||
}} | }} | ||
<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>. | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Solving | |||
|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 | Mit den Anfangsbedingungen | ||
<math>\begin{array}{l}\varphi(0) = 0\\\omega(0) = 0\end{array}</math> | ::<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. | 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> | ||
/********************************/ | |||
/* 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> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Post-Processing | |||
|text= | |||
<table class="wikitable"> | Wir tragen hier die Ergebnisse zweier Simulationsrechnungen auf: | ||
<tr><th>... in dieser Spalte den Referenzfall | <table class="wikitable" style="background-color:white;"> | ||
<tr><th>... in dieser Spalte den Referenzfall für <math>\kappa = 100.</math></th> | |||
für <math>\kappa = 100.</math> | <th>... und hier für <math>\kappa = 1000.</math></th></tr> | ||
</th><th>... und hier | <tr><td>zunächst im Zeitbereich</td><td></td></tr> | ||
<tr><td>[[Datei:Kv52-14.png|alternativtext=|rahmenlos]]</td> | |||
für <math>\kappa = 1000.</math> | <td>[[Datei:Kv52-16.png|alternativtext=|rahmenlos]]</td></tr> | ||
</th></tr> | <tr><td>und dann im Phasenraum:</td><td></td></tr> | ||
<tr><td>zunächst im Zeitbereich | <tr><td>[[Datei:Kv52-15.png|alternativtext=|rahmenlos]]</td> | ||
</td><td></td></tr><tr><td>[[Datei:Kv52-14.png|alternativtext=|rahmenlos]]</td><td></td></tr><tr><td>und dann im Phasenraum:</td><td></td></tr><tr><td>[[Datei:Kv52-15.png|alternativtext=|rahmenlos]]</td><td></td></tr></table> | <td>[[Datei:Kv52-17.png|alternativtext=|rahmenlos]]</td></tr> | ||
</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. | 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. | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=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> | ||
}} | }} |
Version vom 26. März 2021, 11:10 Uhr
Aufgabenstellung
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 2π-periodische Lösungen)
Die Eigenkreisfrequenz bei Schwingungen um φ =- π/2 herum ist
Außerdem wählen wir eine dimensionslose Federsteifigkeit κ, so dass
- 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
- ...