Gelöste Aufgaben/Kw25: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 13: | Zeile 13: | ||
==Aufgabenstellung== | ==Aufgabenstellung== | ||
Ein Körper (Masse ''m'') liegt auf einem Band, das über eine Rolle (Radius ''r'') mit konstanter Drehgeschwindigkeit Ω angetrieben wird. Der Körper ist über eine Feder (Steifigkeit ''k'') mit der Umgebung verbunden. Zwischen Körper und Band wirkt trockene Reibung (''μ, μ<sub>0</sub>''). | |||
<onlyinclude> | <onlyinclude> | ||
[[Datei: | [[Datei:Kw25-01.png|alternativtext=|links|mini|Lageplan|250x250px]] | ||
Gesucht ist | Gesucht ist die numerische Lösung für den Klotz auf dem Band als Anfangswertproblem, untersucht werden selbsterregte Schwingungen. | ||
</onlyinclude> | </onlyinclude> | ||
== Lösung mit Maxima == | == Lösung mit Maxima == | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title= | {{MyCodeBlock|title=Header | ||
|text= | |text= | ||
"Stick-Slip" Schwingungen sind klassische selbsterregte Schwingungen. Selbsterrung heißt: das System lenkt den Energiefluss im System so, dass Schwingungen "aus sich heraus" angeregt werden. Charakteristisch für "Stick-Slip" Schwingungen ist, dass zwei Körper zeitweise aneinander haften, dann auseinander gerissen werden und dann aneinander reiben - bis sie wieder aneinander haften. | |||
|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: 2017-09-24 */ | |||
/* ref: Kw25 (TM-C, Labor 6) */ | |||
/* description: finds the solution for */ | |||
/* the nonlinear IVP */ | |||
/*********************************************************/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
== | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Declarations | |||
|text=Im Zentrum dieser Aufgabe steht die Kennlinie (engl.: Characteristic), die den Zusammenhang zwischen Tangentialkräft (Haftkraft, Reibkraft), Normalkraft und Relativgeschwindigkeit erfasst. | |||
Dafür brauchen wir hier drei Parameter. | |||
< | * ''a=μ / μ<sub>0;</sub>'' | ||
* ''b'' : erfasst, welchen Ausschnitt der Sinus-Funktion wir nutzen; | |||
* ''v<sub>0</sub>'': eine (kleine) Kriechgeschwindigkeit. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /*********************************************************/ | ||
/* declarations */ | |||
assume(a>0,b>0); | |||
/* parameter */ | |||
params: [a=1/2, b = 5/6, v = 1., V0=0.001]; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
== | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Friction Characteristic | |||
|text=Trockene Reibung im Modell beschreibt man mit zwei System-Parametern: | |||
* dem Reibungskoeffizient ''μ'' und | |||
* dem Haftungskoeffizient ''μ<sub>0</sub>''. | |||
Haften Körper und Unterlage aneinander (Relativgeschwindigkeit ''v<sub>r</sub>'' ist "Null"), so ist die Haftkraft | |||
::<math>|H| \le \mu_0 \cdot N</math> | |||
mit der Normalkraft ''N''. Bewegen sich die beiden relativ zueinander, so schreibt man | |||
::<math>|R| = \mu\cdot N</math>. | |||
Die Beträge bedeuten hier: die Kräfte sind gegen die Bewegung orientiert. | |||
Für die numerische Lösung des Anfangswertproblems ist diese Bescheibung eine Katastrophe! | |||
# Wir haben eine Kennlinie mit Sprung zwischen ''μ'' und ''μ<sub>0</sub>''. | |||
# Das Vorzeichen des Funktionswerts für Haftung hängt davon ab, mit welcher Orientierung eine resultierende Kraft auf den Körper wirkt. | |||
Der Sprung ist eine effektive Handbremse für jeden Algorithmus zur numerischen Integration der Bewegungsgleichung, der von einer stetigen und stetig differenzierbaren "Rechten Seite" der Bewegungsgleichung ausgehen (vgl. [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Runge-Kutta-Verfahren 4.ter Ordnung|Runge-Kutta-Verfahren 4.ter Ordnung]]) - also für praktisch alle Algorithmen. Und dass die Haftkraft nicht eindeutig von den [[Sources/Lexikon/Zustandsgröße|Zustandsgrößen]] des Systems abhängt, hebelt jedes Standard-Lösungsverfahren aus. | |||
Kommerzielle Programme führen deshalb "Schaltstellen" ein, in denen der Lösungsalgorithmus an diesen Unstetigkeiten dann "etwas anderes" macht. Oft wird die Lösung des Anfangswertproblems dadurch aber sehr ineffizient. Hier schreiben wir deshalb eine Kennlinie an, bei der die Tangentialkraft (hier nennen wir sie Reibkraft) stetig von der Relativgeschwindigkeit ''v<sub>r</sub>'' zwischen Körper und Band abhängt.[[Datei:Kw25-03.png|mini|Reibkennlinie]]Wir suchen eine Kennlinie wie hier im Bild blau und rot gekennzeichnet. Die klassische Formulierung ist in grau hinterlegt. Die Kennlinie unserer Formulierung nennen wir Reibkennlinie | |||
::<math>R(\mu, \mu_0, v_r)</math>. | |||
Das Haften ist hier nur ein Sonderfall, den die Kennlinine mit abbildet. | |||
Die gesuchte Kennlinie | |||
::<math>R = \mu(v_r)\cdot N</math> | |||
muss punkt-symmetrisch sein (die Reibkraft ändert ihr Vorzeichen mit der Orientierung der Relativgeschwindigkeit). Welche Funktionen wir verwenden ist egal, hier probieren wir Sinus und Exponential-Funktionen aus. Wie diese Funktioen aneinader-gestückelt werden, steht im Lexikon unter "[[Sources/Lexikon/Reibkennlinie|Reibkennlinie]]". | |||
Wir arbeiten mit | |||
< | ::<math>\displaystyle \mu = \left\{ \begin{array}{lllll}\left( a-\sin\left( \pi \cdot {{b}^{2}}\right) \right) \cdot {{e}^{\displaystyle -\frac{\pi \cdot b\cdot \mathrm{cos}\left( \pi \cdot {{b}^{2}}\right) \cdot \left( b+\upsilon\right) }{\mathrm{sin}\left( \pi \cdot {{b}^{2}}\right) -a}}}-a&\text{für}&\upsilon&<-b\\\sin(\pi\;b\;\upsilon)&\text{für}-b<&\upsilon&<+b\\a-\left( a-\sin\left( \pi \cdot {{b}^{2}}\right) \right) \cdot {{e}^{\displaystyle -\frac{\pi \cdot b\cdot \cos\left( \pi \cdot {{b}^{2}}\right) \cdot \left( b-\upsilon\right) }{\sin\left( \pi \cdot {{b}^{2}}\right) -a}}}&\text{für}+b<&\upsilon&\end{array}\right. </math>. | ||
{{ | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1+1 | /*********************************************************/ | ||
/* define friction characteristics (Reib-Kennlinie) */ | |||
ch : [sin(b*%pi*upsilon),0,0]; | |||
ch[2]: E*%e^(kappa*(upsilon+b))-a; | |||
ch[2] : subst(solve([subst([upsilon=-b],ch[2]=ch[1]),subst([upsilon=-b],diff(ch[2]=ch[1],upsilon))],[E,\kappa])[1],ch[2]); | |||
ch[3] : subst([upsilon=-upsilon],-ch[2]); | |||
plot2d([[parametric, t, subst(params,subst(t,upsilon,ch[1])),subst(params,[t,-b, b])], | |||
[parametric, t, subst(params,subst(t,upsilon,ch[2])),subst(params,[t,-3,-b])], | |||
[parametric, t, subst(params,subst(t,upsilon,ch[3])),subst(params,[t,+b,+3])]],[legend,"sec. 0","sec -1","sec +1"], | |||
[y,-1,1], | |||
[style, [lines,3,1], [lines,3,2], [lines,3,2]], [xlabel, "Geschwindigkeit v/V0 →"], [ylabel, "Reib-Koeffizient μ/1 →"])$ | |||
/**** define nonlinear friction characteristic ***/ | |||
fric(upsilon, a,b) := | |||
if upsilon < -b then | |||
(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b+upsilon))/(sin(%pi*b^2)-a))-a /*ch[2]*/ | |||
elseif upsilon > +b then | |||
a-(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b-upsilon))/(sin(%pi*b^2)-a)) /*ch[3]*/ | |||
else | |||
sin(%pi*b*upsilon) /*ch[1]*/ | |||
; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
== | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Equilibrium Conditions | |||
|text= | |||
[[Datei:Kw25-02.png|mini|Freikörperbild|alternativtext=|links|150x150px]]Die Bewegungsgleichungen des Systems bekommen wir direkt aus dem Kräftegleichgewicht am Körper (mit dem [[Sources/Lexikon/Prinzip von d'Alembert|Prinzip von d'Alembert]]) zu | |||
::<math>m \; \ddot{u} + k\; u - R(\mu, \mu_0, v_r) = 0</math>. | |||
Dimensionslos machen wir die Bewegungsgleichung mit | |||
<ul> | |||
<li>der Referenzzeit ''T'' aus<br/> | |||
<math>\begin{array}{ll}\omega_0 &= 2\pi/T \\&= \sqrt{k/m}\end{array}</math><br/> | |||
mit der Eigenkreisfrequenz<br/> | |||
<math>\omega_0</math> | |||
<br/>des frei schwingenden Körpers (''R=0'') und</li> | |||
<li> | |||
der Auslenkung des Körpers an der Feder im Erd-Schwerefeld<br/> | |||
<math>\displaystyle \hat{u} = \frac{m\;g}{k}</math></li> | |||
</ul> | |||
Wir erhalten mit | |||
::<math>u = \hat{u}\cdot U \text{ und } t = T\cdot \tau</math> | |||
als Bewegungsgleichung | |||
< | ::<math>\displaystyle \frac{{{\mu}_{0}}\cdot g\cdot m }{4\cdot {{\pi }^{2}}}\cdot \frac{{{d}^{2}U}}{d\,{{\tau}^{2}}}+{{\mu}_{0}}\cdot g\cdot m\cdot U-g\cdot m\cdot \mu(v_r)=0</math> | ||
{{ | |||
bzw. | |||
::<math>\displaystyle \frac{{{d}^{2}U}}{d\,{{\tau}^{2}}}+4\pi^2 \cdot U-4\pi^2 \cdot \frac{\mu(v_r)}{\mu_0}=0</math> | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /*********************************************************/ | ||
/* define ODE in dim'less coordinate U */ | |||
equil : m*'diff(u,t,2) + k*u - R = 0; | |||
fstOrd : ['diff(U,tau,2)='diff(V,tau,1)]; | |||
ref: [solve((2*%pi/T)^2 = k/m,T)[2]]; | |||
equil : subst([R=m*g*mu[0]*fric((v-V)/V0,a,b), 'diff((mu[0]*m*g/k*U),tau,2)=mu[0]*m*g/k*'diff(U,tau,2)],subst(u=mu[0]*m*g/k*U, subst(ref,subst(['diff(u,t,2)= 'diff(u,tau,2)/T^2],equil)))); | |||
equil : [subst(fstOrd,equil), 'diff(U,tau,1)=V]; | |||
dydt : solve(equil,['diff(V,tau,1),'diff(U,tau,1)])[1]; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
== | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Solving | |||
|text= | |||
Die Differentialgleichung erster Ordnung | |||
::<math>\begin{array}{ll}\displaystyle \frac{d\,U}{d\,\tau}&=V,\\\displaystyle \frac{d\,V}{d\,\tau}&=4\cdot {{\pi }^{2}}\cdot \left( \mu\left( v_r\right) - U\right)\end{array}</math> | |||
lösen wir nun als Anfangswertproblem | |||
::<math>\underline{\dot{q}} = \underline{f}(\underline{q})</math> | |||
mit | |||
::<math>\underline{q} = \left(\begin{array}{c}U\\V\end{array}\right)</math>. | |||
Als Anfangsbedingungen wählen wir diese vier: | |||
< | ::<math>\underline{q}_{0,1} = \left(\begin{array}{l}1\\0\end{array} \right)</math>, | ||
{{ | ::<math>\underline{q}_{0,2} = \left(\begin{array}{l}-1\\+0\end{array} \right)</math>, | ||
::<math>\underline{q}_{0,3} = \left(\begin{array}{l}0.\\0.001\end{array} \right)</math>, | |||
::<math>\underline{q}_{0,4} = \left(\begin{array}{l}0\\3\end{array} \right)</math>. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /********************************/ | ||
/* numerical solution of IVP */ | |||
times : subst([t0 = 0, tmax = 4, dt = 0.001], | |||
[t, t0, tmax, dt]); | |||
dgl1stOrder : [rhs(dydt[2]),float(subst(params,rhs(dydt[1])))]; | |||
stateVabs : [U,V]; | |||
initiVals : [[1,0],[-1,0], | |||
[0,0.001],[0,3]]; | |||
/* solution of IVP (ivs) */ | |||
for i: 1 thru length(initiVals) do | |||
ivs[i] : rk(dgl1stOrder, stateVabs, initiVals[i], times)$ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Post-Processing | ||
{{MyCodeBlock|title= | |text= | ||
|text= | Für die vier Anfangsbedingungen finden wir diese Zeitverläufe der Auslenkung ''U(τ)'': | ||
<table class="wikitable" style="background-color:white | <table class="wikitable" style="background-color:white;"> | ||
<tr><td>a)[[Datei:Kw25-21.png|rahmenlos]] | <tr><td>a)[[Datei:Kw25-21.png|rahmenlos]] | ||
</td><td>b)[[Datei:Kw25-22.png|rahmenlos]] | </td><td>b)[[Datei:Kw25-22.png|rahmenlos]] | ||
</td></tr><tr><td>c)[[Datei:Kw25-23.png|rahmenlos]]</td><td>d)[[Datei:Kw25-24.png|rahmenlos]]</td></tr></table> | </td></tr><tr><td>c)[[Datei:Kw25-23.png|rahmenlos]]</td><td>d)[[Datei:Kw25-24.png|rahmenlos]]</td></tr></table> | ||
Unabhängig von den Anfangsbedingungen läuft das System sofort in die "Stick-Slip" Schwingung hinein. | |||
Phasen Diagramme: | |||
<table class="wikitable" style="background-color:white;"> | |||
<tr> | |||
<td>a)[[Datei:Kw25-31.png|rahmenlos]]</td> | |||
<td>b)[[Datei:Kw25-32.png|rahmenlos]]</td> | |||
</tr> | |||
</table> | |||
Hier erkennt man gut, wie der Körper am Band haften bleibt - für V=1 sind Band und Körper-Geschwindigkeit gleich. | |||
[[ | |code= | ||
[[ | <syntaxhighlight lang="lisp" line start=1> | ||
/********************************/ | |||
/* plot results, time domain */ | |||
for i: 1 thru length(initiVals) do | |||
(T[i] : makelist(ivs[i][j][1],j,1,length(ivs[i])), | |||
uD[i] : makelist(ivs[i][j][2],j,1,length(ivs[i])), | |||
vD[i] : makelist(ivs[i][j][3],j,1,length(ivs[i])), | |||
plot2d([discrete, T[i], uD[i]], | |||
[title, sconcat("start @: ",string(initiVals[i]))], | |||
[xlabel,"τ/1->"], [ylabel,"U/1->"])); | |||
[[ | /* phase plot */ | ||
curves : makelist([discrete,uD[i],vD[i]],i,1,length(initiVals))$ | |||
[[ | plot2d(curves, [legend, false], [x,-1.2,1.2], | ||
[ylabel,"V/1->"], [xlabel,"U/1->"]); | |||
plot2d(curves, [legend, false], [x,-0.1,0.8], [y,-1,2], | |||
[ylabel,"V/1->"], [xlabel,"U/1->"]); | |||
</syntaxhighlight> | |||
}} | |||
<hr/> | <hr/> |
Aktuelle Version vom 29. März 2021, 07:08 Uhr
Aufgabenstellung
Ein Körper (Masse m) liegt auf einem Band, das über eine Rolle (Radius r) mit konstanter Drehgeschwindigkeit Ω angetrieben wird. Der Körper ist über eine Feder (Steifigkeit k) mit der Umgebung verbunden. Zwischen Körper und Band wirkt trockene Reibung (μ, μ0).
Gesucht ist die numerische Lösung für den Klotz auf dem Band als Anfangswertproblem, untersucht werden selbsterregte Schwingungen.
Lösung mit Maxima
Header
"Stick-Slip" Schwingungen sind klassische selbsterregte Schwingungen. Selbsterrung heißt: das System lenkt den Energiefluss im System so, dass Schwingungen "aus sich heraus" angeregt werden. Charakteristisch für "Stick-Slip" Schwingungen ist, dass zwei Körper zeitweise aneinander haften, dann auseinander gerissen werden und dann aneinander reiben - bis sie wieder aneinander haften.
/*********************************************************/
/* MAXIMA script */
/* version: wxMaxima 15.08.2 */
/* author: Andreas Baumgart */
/* last updated: 2017-09-24 */
/* ref: Kw25 (TM-C, Labor 6) */
/* description: finds the solution for */
/* the nonlinear IVP */
/*********************************************************/
Declarations
Im Zentrum dieser Aufgabe steht die Kennlinie (engl.: Characteristic), die den Zusammenhang zwischen Tangentialkräft (Haftkraft, Reibkraft), Normalkraft und Relativgeschwindigkeit erfasst.
Dafür brauchen wir hier drei Parameter.
- a=μ / μ0;
- b : erfasst, welchen Ausschnitt der Sinus-Funktion wir nutzen;
- v0: eine (kleine) Kriechgeschwindigkeit.
/*********************************************************/
/* declarations */
assume(a>0,b>0);
/* parameter */
params: [a=1/2, b = 5/6, v = 1., V0=0.001];
Friction Characteristic
Trockene Reibung im Modell beschreibt man mit zwei System-Parametern:
- dem Reibungskoeffizient μ und
- dem Haftungskoeffizient μ0.
Haften Körper und Unterlage aneinander (Relativgeschwindigkeit vr ist "Null"), so ist die Haftkraft
mit der Normalkraft N. Bewegen sich die beiden relativ zueinander, so schreibt man
- .
Die Beträge bedeuten hier: die Kräfte sind gegen die Bewegung orientiert.
Für die numerische Lösung des Anfangswertproblems ist diese Bescheibung eine Katastrophe!
- Wir haben eine Kennlinie mit Sprung zwischen μ und μ0.
- Das Vorzeichen des Funktionswerts für Haftung hängt davon ab, mit welcher Orientierung eine resultierende Kraft auf den Körper wirkt.
Der Sprung ist eine effektive Handbremse für jeden Algorithmus zur numerischen Integration der Bewegungsgleichung, der von einer stetigen und stetig differenzierbaren "Rechten Seite" der Bewegungsgleichung ausgehen (vgl. Runge-Kutta-Verfahren 4.ter Ordnung) - also für praktisch alle Algorithmen. Und dass die Haftkraft nicht eindeutig von den Zustandsgrößen des Systems abhängt, hebelt jedes Standard-Lösungsverfahren aus.
Kommerzielle Programme führen deshalb "Schaltstellen" ein, in denen der Lösungsalgorithmus an diesen Unstetigkeiten dann "etwas anderes" macht. Oft wird die Lösung des Anfangswertproblems dadurch aber sehr ineffizient. Hier schreiben wir deshalb eine Kennlinie an, bei der die Tangentialkraft (hier nennen wir sie Reibkraft) stetig von der Relativgeschwindigkeit vr zwischen Körper und Band abhängt.
Wir suchen eine Kennlinie wie hier im Bild blau und rot gekennzeichnet. Die klassische Formulierung ist in grau hinterlegt. Die Kennlinie unserer Formulierung nennen wir Reibkennlinie
- .
Das Haften ist hier nur ein Sonderfall, den die Kennlinine mit abbildet.
Die gesuchte Kennlinie
muss punkt-symmetrisch sein (die Reibkraft ändert ihr Vorzeichen mit der Orientierung der Relativgeschwindigkeit). Welche Funktionen wir verwenden ist egal, hier probieren wir Sinus und Exponential-Funktionen aus. Wie diese Funktioen aneinader-gestückelt werden, steht im Lexikon unter "Reibkennlinie".
Wir arbeiten mit
- .
/*********************************************************/
/* define friction characteristics (Reib-Kennlinie) */
ch : [sin(b*%pi*upsilon),0,0];
ch[2]: E*%e^(kappa*(upsilon+b))-a;
ch[2] : subst(solve([subst([upsilon=-b],ch[2]=ch[1]),subst([upsilon=-b],diff(ch[2]=ch[1],upsilon))],[E,\kappa])[1],ch[2]);
ch[3] : subst([upsilon=-upsilon],-ch[2]);
plot2d([[parametric, t, subst(params,subst(t,upsilon,ch[1])),subst(params,[t,-b, b])],
[parametric, t, subst(params,subst(t,upsilon,ch[2])),subst(params,[t,-3,-b])],
[parametric, t, subst(params,subst(t,upsilon,ch[3])),subst(params,[t,+b,+3])]],[legend,"sec. 0","sec -1","sec +1"],
[y,-1,1],
[style, [lines,3,1], [lines,3,2], [lines,3,2]], [xlabel, "Geschwindigkeit v/V0 →"], [ylabel, "Reib-Koeffizient μ/1 →"])$
/**** define nonlinear friction characteristic ***/
fric(upsilon, a,b) :=
if upsilon < -b then
(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b+upsilon))/(sin(%pi*b^2)-a))-a /*ch[2]*/
elseif upsilon > +b then
a-(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b-upsilon))/(sin(%pi*b^2)-a)) /*ch[3]*/
else
sin(%pi*b*upsilon) /*ch[1]*/
;
Equilibrium Conditions
Die Bewegungsgleichungen des Systems bekommen wir direkt aus dem Kräftegleichgewicht am Körper (mit dem Prinzip von d'Alembert) zu
- .
Dimensionslos machen wir die Bewegungsgleichung mit
- der Referenzzeit T aus
mit der Eigenkreisfrequenz
des frei schwingenden Körpers (R=0) und -
der Auslenkung des Körpers an der Feder im Erd-Schwerefeld
Wir erhalten mit
als Bewegungsgleichung
bzw.
/*********************************************************/
/* define ODE in dim'less coordinate U */
equil : m*'diff(u,t,2) + k*u - R = 0;
fstOrd : ['diff(U,tau,2)='diff(V,tau,1)];
ref: [solve((2*%pi/T)^2 = k/m,T)[2]];
equil : subst([R=m*g*mu[0]*fric((v-V)/V0,a,b), 'diff((mu[0]*m*g/k*U),tau,2)=mu[0]*m*g/k*'diff(U,tau,2)],subst(u=mu[0]*m*g/k*U, subst(ref,subst(['diff(u,t,2)= 'diff(u,tau,2)/T^2],equil))));
equil : [subst(fstOrd,equil), 'diff(U,tau,1)=V];
dydt : solve(equil,['diff(V,tau,1),'diff(U,tau,1)])[1];
Solving
Die Differentialgleichung erster Ordnung
lösen wir nun als Anfangswertproblem
mit
- .
Als Anfangsbedingungen wählen wir diese vier:
- ,
- ,
- ,
- .
/********************************/
/* numerical solution of IVP */
times : subst([t0 = 0, tmax = 4, dt = 0.001],
[t, t0, tmax, dt]);
dgl1stOrder : [rhs(dydt[2]),float(subst(params,rhs(dydt[1])))];
stateVabs : [U,V];
initiVals : [[1,0],[-1,0],
[0,0.001],[0,3]];
/* solution of IVP (ivs) */
for i: 1 thru length(initiVals) do
ivs[i] : rk(dgl1stOrder, stateVabs, initiVals[i], times)$
Post-Processing
Für die vier Anfangsbedingungen finden wir diese Zeitverläufe der Auslenkung U(τ):
a) | b) |
c) | d) |
Unabhängig von den Anfangsbedingungen läuft das System sofort in die "Stick-Slip" Schwingung hinein.
Phasen Diagramme:
a) | b) |
Hier erkennt man gut, wie der Körper am Band haften bleibt - für V=1 sind Band und Körper-Geschwindigkeit gleich.
/********************************/
/* plot results, time domain */
for i: 1 thru length(initiVals) do
(T[i] : makelist(ivs[i][j][1],j,1,length(ivs[i])),
uD[i] : makelist(ivs[i][j][2],j,1,length(ivs[i])),
vD[i] : makelist(ivs[i][j][3],j,1,length(ivs[i])),
plot2d([discrete, T[i], uD[i]],
[title, sconcat("start @: ",string(initiVals[i]))],
[xlabel,"τ/1->"], [ylabel,"U/1->"]));
/* phase plot */
curves : makelist([discrete,uD[i],vD[i]],i,1,length(initiVals))$
plot2d(curves, [legend, false], [x,-1.2,1.2],
[ylabel,"V/1->"], [xlabel,"U/1->"]);
plot2d(curves, [legend, false], [x,-0.1,0.8], [y,-1,2],
[ylabel,"V/1->"], [xlabel,"U/1->"]);
Links
- ...
Literature
- ...