Sources/Lexikon/Reibkennlinie: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „hghgh“)
 
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
hghgh
[[Datei:Reibkennlinie-01.png|mini|Koordinanten und Schnittkräfte|alternativtext=|200x200px]]Reiben oder haften Körper aneinander, so wird ihre geschwindigkeitsabhängige Kontaktkraft ''K(v)'' in der Tangentialebene oft durch den Reib- und Haftbeiwert ''μ'' bzw. ''μ<sub>0</sub>'' beschreiben:
 
::<math>\begin{array}{ccrl}|K|&<&\mu_0 \cdot N&\text{ für } v=0\\K&=&\mu\cdot N &\text{ für } v>0\\K&=&-\mu\cdot N &\text{ für } v<0\end{array}</math>
 
mit
 
::<math>v = \dot{u}</math>
 
== Erster Ansatz mit Geradenstücken ==
[[Datei:Reibkennlinie-11.png|mini|Kennlinie (erster Anlauf)]]Statt zwischen Haften und Reiben zu unterscheiden, kann man mit folgender Kennlinie arbeiten, die Schaltstellen für v<sub>0</sub> = +/- ε hat.
 
Die stückweise definierte Funktion ist:
 
::<math>K = N \cdot \left\{ \begin{array}{ll} -\mu                   &\text{ für } v<=-2\,\epsilon \\ +\mu                   &\text{ für } v>=+2\,\epsilon \\ -((2\,\mu_0-\mu)\,\epsilon+(\mu_0-\mu)\,v)/\epsilon  &\text{ für } v<=  -\epsilon \\ -((\mu-2\,\mu_0)\,\epsilon+(\mu_0-\mu)\,v)/\epsilon  &\text{ für } v>=  +\epsilon \\ \mu_0\,(v/\epsilon);                              &\text{ sonst}              \end{array}\right.</math>
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Maxima Code
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
|code=
<syntaxhighlight lang="lisp" line start=1>
/* friction characteristic */
/* piecewise linear        */
 
subst(solve([c[0]+c[1]*(+epsilon)=+b,c[0]+c[1]*2*(+epsilon)=+a],[c[0],c[1]])[1],c[0]+c[1]*v)
mu(a,b,epsilon,v) := if    v<=-2*epsilon then -a
                    elseif v>=+2*epsilon then +a
                    elseif v<=  -epsilon then -((2*b-a)*epsilon+(b-a)*v)/epsilon
                    elseif v>=  +epsilon then -((a-2*b)*epsilon+(b-a)*v)/epsilon
                    else                      b*(v/epsilon); 
                   
plot2d(mu(0.5,1,0.01,v),[v,-0.1,0.1], [ylabel,"v/V->"], [xlabel,"μ/1->"], [legend, "friction coefficient"]);
</syntaxhighlight>
}}
 
[[Datei:Reibkennlinie-02.mp4|mini|Erläuterungen zur Reibkennlinie]]
Und so funktionierts:Steigert man die Kraft ''F''  auf den Körper, so "kriecht" der Körper - seine Geschwindigkeit ''v'' bleibt sehr klein. Wählt man also die Schaltstellen v<sub>0</sub> = +/- ε passend klein, dann sieht es so aus, als würde der Körper "haften". Überschreitet ''F'' die maximale Haftkraft, also F > ''μ''<sub>0</sub>''∙N'', dann fällt ''μ(v)'' auf den Reib-Beiwert ab, der Körper wird beschleunigt.
 
Das Problem: diese Kennlinie ist nicht stetig differenzierbar - Löser, die das zur Schrittweiten-Steuerung voraussetzen "fressen" sich an den Schaltstellen fest.
<br clear="all"/>
 
== Verbesserter Ansatz: stückweise mit einem Polynom 5ten Grades ==
[[Datei:Reibkennlinie-12.png|mini|Stetig differenzierbare Reibkennlinie mit einem Polynom 5ter Ordnung (aus [[Gelöste Aufgaben/Kv53|Kv53]])]]Um eine stetig differenzierbare Reibkennlinie zu erhalten, setzten wir stückweise ein Polynom an. Es soll Punkt-symmetrisch sowie an den Übergangsstellen stetig und stetig differenzierbar sein!
 
Hier arbeiten wir mit der dimensionslosen Geschwindigkeit
 
::<math>\displaystyle \nu = \frac{v}{v_0}</math>
 
und setzen für den mittleren Teil ''-v<sub>0</sub> < v < v<sub>0</sub>'' das Polynom
 
::<math>\mu = a_1\cdot \nu^1 + a_3\cdot \nu^3 + a_5\cdot \nu^5</math>.
 
an.
 
Dann ist - hier für ''μ''<sub>0</sub>=1/2 und ''μ=''1/4:
 
::<math>K = N \cdot \left\{ \begin{array}{ll} -\mu                   &\text{ für } \nu<=-1\\ +\mu                   &\text{ für } \nu>=+1\\1.2 \nu^5-2.5 \nu^3+1.5 \nu        &\text{ sonst}              \end{array}\right.</math>
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Maxima Code
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
|code=
<syntaxhighlight lang="lisp" line start=1>
/* parameter */
params: [mu[0]  = 1/2,
        mu[1]  = 1/4]$
 
/**** define nonlinear friction characteristic ***/
/*    choose generic polynom */
p : lsum(a[i]*nu^i,i,[1,3,5]);
mu(nu,charc) := if abs(nu)<1 then subst(charc, lsum(a[i]*nu^i,i,[1,3,5])) else subst(charc, mu[1])*signum(nu);
/*    ... and adapt to these conditions  */
bcs : [subst([nu=  1  ],      p    ) = mu[1],
      subst([nu=  1  ], diff(p,nu)) = 0    ,
      subst([nu=gamma], diff(p,nu)) = 0    ,
      subst([nu=gamma],      p    ) = mu[0]];
coe : [a[1],a[3],a[5],gamma];
sol: solve(subst(params,bcs),coe)$
 
charc : append(params,sol[1]);
plot2d(mu(nu,charc),[nu,-2,2], [xlabel,"ν →"], [xlabel,"μ →"])$
</syntaxhighlight>
}}
 
Die Gleichung für die Kennlinie können wir nicht analytisch explizit angeben - Sie können die Kennlinie also nicht ohne Maxima in ein anderes Programm übertragen.
 
Abhilfe schafft dieser Ansatz:
 
== Verbesserter Ansatz: stückweise mit Polynomen 2ten und 3ten Grades ==
[[Datei:Reibkennlinie-13.png|mini|Skizze: Stetig differenzierbare Reibkennlinie mit angestückelten Polynomen.|alternativtext=|200x200px]]Wir bleiben bei der stetig differenzierbaren Reibkennlinie, suchen nun aber nach einfacheren Polynomen, deren Koeffizienten wir auch explizit in ''μ''<sub>0</sub> und ''μ'' angeben können. Alles hat seinen Preis: wir brauchen nun zwei Polynome (I und II)für den ersten Teil!
 
Wir arbeiten weiter mit
 
::<math>\displaystyle \nu = \frac{v}{v_0}</math>
 
und setzen für den mittleren Teil ''-v<sub>0</sub> < v < v<sub>0</sub>'' nun zwei Polynome
 
::<math>\begin{array}{lllllll} \mu_I  &=&                      &a_{I,2}\cdot\nu^2 &+ a_{I,1} \cdot\nu &\\ \mu_{II}&=& a_{II,3}\cdot \nu^3 + &a_{II,2}\cdot\nu^2&+ a_{II,1}\cdot\nu&+ a_{II,0} \end{array}</math>
 
an.
 
Dann ist
 
::<math>K = N \cdot \left\{  \begin{array}{ll}  +\mu                   &\text{ für } +1<\nu\\  16\cdot \mu_0 \left( 1-\frac{\mu_1}{\mu_0} \right) \cdot \nu^3 -36\cdot \mu_0 \left( 1-\frac{\mu_1}{\mu_0} \right) \cdot \nu^2 +24\cdot \mu_0 \left( 1-\frac{\mu_1}{\mu_0} \right) \cdot \nu + 5\cdot \mu_1 -4\cdot \mu_0 &\text{ für } +\frac{1}{2}<\nu<=+1\\ 4\cdot \mu_{0}\cdot (\nu-\nu^{2})  &\text{ für } \;\;\;\;\;0<\nu<=+\frac{1}{2} \\ \text{und punktsymmetrisch}    &\text{ sonst}              \end{array}\right.</math>[[Datei:Reibkennlinie-14.png|mini|Ein Ausschnitt der Kennlinie mit den Abschnitten ''I, II'' und ''III'']]
 
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Maxima Code
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
|code=
<syntaxhighlight lang="lisp" line start=1>
/* parameter */
params : [mu[0]=1, mu[1] = 0.5];
 
/**** define nonlinear friction characteristic ***/
/*    choose generic polynoms for three sections */
r : [sum(a[i]*nu^i,i,0,2),
    sum(a[i]*nu^i,i,0,3),
    mu[1]];
 
/*    ... and adapt to these conditions  */
sol: [solve([subst([nu=  0    ],    r[1])          =  0,
            subst([nu=1/2],    r[1])          = mu[0],
            subst([nu=1/2],diff(r[1],nu)) = 0], [a[2],a[1],a[0]])[1],
      solve([subst([nu=1/2],    r[2])          = mu[0],
            subst([nu=1  ],    r[2])          = mu[1],
            subst([nu=1/2],diff(r[2],nu)) = 0,
            subst([nu=1  ],diff(r[2],nu)) = 0], [a[3],a[2],a[1],a[0]])[1]];
 
r : ratsimp([subst(sol[1],r[1]),subst(sol[2],r[2]),r[3]]);
print(transpose(r));
 
/*    ... and plot ...                */
r : subst(nu=t,subst(params,r));
plot2d([[parametric, t, r[1], [t,  0 ,1/2]],
        [parametric, t, r[2], [t, 1/2, 1 ]],
        [parametric, t, r[3], [t,  1 , 2 ]]], [legend,"I","II","III"],
        [xlabel,"ν →"], [ylabel,"μ →"])$
</syntaxhighlight>
}}
 
Hier ist die tangentiale Kontaktkraft konstant, wenn der Körper eine relevante Relativgeschwindigkeit gegenüber seiner Unterlage hat. Diese Vorstellung passt oft nicht mit Messungenüberein - außerdem gibt es einen weiteren Nachteil: Die Kennlinie fällt nur in einem ganz kleinen Bereich und es wird schwer, damit im Modell eine Selbsterregung zu erzeugen.
 
Besser geht das mit einer stetig fallenden Kennlinie:
 
== Verbesserter Ansatz: Stetig fallende Reibkennlinie ==
Die gesuchte stetig differenzierbare Kennlinie ''μ(ν)'' mit stetig abnehmendem Reibkoeffizienten setzen wir aus sin- und e-Funktion zusammen.
 
Sie muss punkt-symmetrisch sein (die Reibkraft ändert ihr Vorzeichen mit der Orientierung der Relativgeschwindigkeit). Die Sinus-Funktion verwenden wir für den Mittelteil (Haften) und die Exponential-Funktionen für die Gebiete, in denen die Körper aufeinander reiben.:[[Datei:Kw25-03.png|mini|Reibkennline mit stetig fallender Charakteristik - aus Aufgabe [[Gelöste Aufgaben/Kw25|Kw25]]]]Im Mittelteil (blau) setzen wir für die Sinus-Funktion an
 
::<math>\displaystyle \mu = \left\{ \begin{array}{lllll}\ldots&\text{für}&\nu&<-b\\\sin(\pi\;b\;\nu)&\text{für}-b<&\nu&<+b\\\ldots&\text{für}+b<&\nu&\end{array}\right. </math>
 
mit
 
::<math>\displaystyle \nu = \frac{v_r}{v_0}</math>.
 
Dieses Mittelteil stückeln wir stetig differenzierbar jeweils an eine Exponentialfunktion mit den Parametern ''E'' und ''κ'' an, hier
 
::<math>E\cdot e^{\displaystyle \kappa\cdot (b+\nu)} -a</math>
 
mit
 
::<math>\displaystyle E=a-\mathrm{sin}\left( \pi \cdot {{b}^{2}}\right) ,\kappa=-\frac{\pi \cdot b\cdot \mathrm{cos}\left( \pi \cdot {{b}^{2}}\right) }{\mathrm{sin}\left( \pi \cdot {{b}^{2}}\right) -a}</math>.
 
Damit ist
 
::<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+\nu\right) }{\mathrm{sin}\left( \pi \cdot {{b}^{2}}\right) -a}}}-a&\text{für}&\nu&<-b\\\sin(\pi\;b\;\nu)&\text{für}-b<&\nu&<+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-\nu\right) }{\sin\left( \pi \cdot {{b}^{2}}\right) -a}}}&\text{für}+b<&\nu&\end{array}\right. </math>
 
 
 
die gesuchte Kennlinie.<hr/>
 
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Maxima Code
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
|code=
<syntaxhighlight lang="lisp" line start=1>
/*  define degressive friction characteristics */
/*********************************************************/
/* parameter */
params: [a=1/2, b = 5/6, V0=0.001];
 
ch : [sin(b*%pi*nu),0,0];
ch[2]: E*%e^(kappa*(nu+b))-a;
ch[2] : subst(solve([subst([nu=-b],ch[2]=ch[1]),subst([nu=-b],diff(ch[2]=ch[1],nu))],[E,\kappa])[1],ch[2]);
ch[3] : subst([nu=-nu],-ch[2]);
plot2d([[parametric, t, subst(params,subst(t,nu,ch[1])),subst(params,[t,-b, b])],
        [parametric, t, subst(params,subst(t,nu,ch[2])),subst(params,[t,-3,-b])],
        [parametric, t, subst(params,subst(t,nu,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(nu, a,b) :=
  if nu < -b then
    (a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b+nu))/(sin(%pi*b^2)-a))-a      /*ch[2]*/
  elseif nu > +b then
    a-(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b-nu))/(sin(%pi*b^2)-a))      /*ch[3]*/
  else
    sin(%pi*b*nu)                                                              /*ch[1]*/
    ;
</syntaxhighlight>
}}
 
<hr/>
'''Links'''
* [[Gelöste Aufgaben/Kw25|Kw25]]

Aktuelle Version vom 21. April 2021, 07:45 Uhr

Koordinanten und Schnittkräfte

Reiben oder haften Körper aneinander, so wird ihre geschwindigkeitsabhängige Kontaktkraft K(v) in der Tangentialebene oft durch den Reib- und Haftbeiwert μ bzw. μ0 beschreiben:

mit

Erster Ansatz mit Geradenstücken

Kennlinie (erster Anlauf)

Statt zwischen Haften und Reiben zu unterscheiden, kann man mit folgender Kennlinie arbeiten, die Schaltstellen für v0 = +/- ε hat.

Die stückweise definierte Funktion ist:

Maxima Code

Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.


/* friction characteristic */
/* piecewise linear        */

subst(solve([c[0]+c[1]*(+epsilon)=+b,c[0]+c[1]*2*(+epsilon)=+a],[c[0],c[1]])[1],c[0]+c[1]*v)
mu(a,b,epsilon,v) := if     v<=-2*epsilon then -a
                     elseif v>=+2*epsilon then +a
                     elseif v<=  -epsilon then -((2*b-a)*epsilon+(b-a)*v)/epsilon
                     elseif v>=  +epsilon then -((a-2*b)*epsilon+(b-a)*v)/epsilon
                     else                      b*(v/epsilon);  
                     
plot2d(mu(0.5,1,0.01,v),[v,-0.1,0.1], [ylabel,"v/V->"], [xlabel,"μ/1->"], [legend, "friction coefficient"]);




Erläuterungen zur Reibkennlinie

Und so funktionierts:Steigert man die Kraft F  auf den Körper, so "kriecht" der Körper - seine Geschwindigkeit v bleibt sehr klein. Wählt man also die Schaltstellen v0 = +/- ε passend klein, dann sieht es so aus, als würde der Körper "haften". Überschreitet F die maximale Haftkraft, also F > μ0∙N, dann fällt μ(v) auf den Reib-Beiwert ab, der Körper wird beschleunigt.

Das Problem: diese Kennlinie ist nicht stetig differenzierbar - Löser, die das zur Schrittweiten-Steuerung voraussetzen "fressen" sich an den Schaltstellen fest.

Verbesserter Ansatz: stückweise mit einem Polynom 5ten Grades

Stetig differenzierbare Reibkennlinie mit einem Polynom 5ter Ordnung (aus Kv53)

Um eine stetig differenzierbare Reibkennlinie zu erhalten, setzten wir stückweise ein Polynom an. Es soll Punkt-symmetrisch sowie an den Übergangsstellen stetig und stetig differenzierbar sein!

Hier arbeiten wir mit der dimensionslosen Geschwindigkeit

und setzen für den mittleren Teil -v0 < v < v0 das Polynom

.

an.

Dann ist - hier für μ0=1/2 und μ=1/4:

Maxima Code

Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.


/* parameter */
params: [mu[0]   = 1/2,
         mu[1]   = 1/4]$ 

/**** define nonlinear friction characteristic ***/
/*    choose generic polynom */
p : lsum(a[i]*nu^i,i,[1,3,5]);
mu(nu,charc) := if abs(nu)<1 then subst(charc, lsum(a[i]*nu^i,i,[1,3,5])) else subst(charc, mu[1])*signum(nu);
/*    ... and adapt to these conditions  */
bcs : [subst([nu=  1  ],      p    ) = mu[1],
       subst([nu=  1  ], diff(p,nu)) = 0    ,
       subst([nu=gamma], diff(p,nu)) = 0    ,
       subst([nu=gamma],      p    ) = mu[0]];
coe : [a[1],a[3],a[5],gamma];
sol: solve(subst(params,bcs),coe)$

charc : append(params,sol[1]);
plot2d(mu(nu,charc),[nu,-2,2], [xlabel,"ν →"], [xlabel,"μ →"])$




Die Gleichung für die Kennlinie können wir nicht analytisch explizit angeben - Sie können die Kennlinie also nicht ohne Maxima in ein anderes Programm übertragen.

Abhilfe schafft dieser Ansatz:

Verbesserter Ansatz: stückweise mit Polynomen 2ten und 3ten Grades

Skizze: Stetig differenzierbare Reibkennlinie mit angestückelten Polynomen.

Wir bleiben bei der stetig differenzierbaren Reibkennlinie, suchen nun aber nach einfacheren Polynomen, deren Koeffizienten wir auch explizit in μ0 und μ angeben können. Alles hat seinen Preis: wir brauchen nun zwei Polynome (I und II)für den ersten Teil!

Wir arbeiten weiter mit

und setzen für den mittleren Teil -v0 < v < v0 nun zwei Polynome

an.

Dann ist

Ein Ausschnitt der Kennlinie mit den Abschnitten I, II und III

Maxima Code

Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.


/* parameter */
params : [mu[0]=1, mu[1] = 0.5];

/**** define nonlinear friction characteristic ***/
/*    choose generic polynoms for three sections */
r : [sum(a[i]*nu^i,i,0,2),
     sum(a[i]*nu^i,i,0,3),
     mu[1]];

/*    ... and adapt to these conditions  */
sol: [solve([subst([nu=   0     ],     r[1])          =  0,
             subst([nu=1/2],     r[1])          = mu[0],
             subst([nu=1/2],diff(r[1],nu)) = 0], [a[2],a[1],a[0]])[1],
      solve([subst([nu=1/2],     r[2])          = mu[0],
             subst([nu=1  ],     r[2])          = mu[1],
             subst([nu=1/2],diff(r[2],nu)) = 0,
             subst([nu=1  ],diff(r[2],nu)) = 0], [a[3],a[2],a[1],a[0]])[1]];

r : ratsimp([subst(sol[1],r[1]),subst(sol[2],r[2]),r[3]]);
print(transpose(r));

/*    ... and plot ...                 */
r : subst(nu=t,subst(params,r));
plot2d([[parametric, t, r[1], [t,  0 ,1/2]],
        [parametric, t, r[2], [t, 1/2, 1 ]],
        [parametric, t, r[3], [t,  1 , 2 ]]], [legend,"I","II","III"],
        [xlabel,"ν →"], [ylabel,"μ →"])$




Hier ist die tangentiale Kontaktkraft konstant, wenn der Körper eine relevante Relativgeschwindigkeit gegenüber seiner Unterlage hat. Diese Vorstellung passt oft nicht mit Messungenüberein - außerdem gibt es einen weiteren Nachteil: Die Kennlinie fällt nur in einem ganz kleinen Bereich und es wird schwer, damit im Modell eine Selbsterregung zu erzeugen.

Besser geht das mit einer stetig fallenden Kennlinie:

Verbesserter Ansatz: Stetig fallende Reibkennlinie

Die gesuchte stetig differenzierbare Kennlinie μ(ν) mit stetig abnehmendem Reibkoeffizienten setzen wir aus sin- und e-Funktion zusammen.

Sie muss punkt-symmetrisch sein (die Reibkraft ändert ihr Vorzeichen mit der Orientierung der Relativgeschwindigkeit). Die Sinus-Funktion verwenden wir für den Mittelteil (Haften) und die Exponential-Funktionen für die Gebiete, in denen die Körper aufeinander reiben.:

Reibkennline mit stetig fallender Charakteristik - aus Aufgabe Kw25

Im Mittelteil (blau) setzen wir für die Sinus-Funktion an

mit

.

Dieses Mittelteil stückeln wir stetig differenzierbar jeweils an eine Exponentialfunktion mit den Parametern E und κ an, hier

mit

.

Damit ist


die gesuchte Kennlinie.


Maxima Code

Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.


/*  define degressive friction characteristics */
/*********************************************************/
/* parameter */
params: [a=1/2, b = 5/6, V0=0.001];

ch : [sin(b*%pi*nu),0,0];
 
ch[2]: E*%e^(kappa*(nu+b))-a;
ch[2] : subst(solve([subst([nu=-b],ch[2]=ch[1]),subst([nu=-b],diff(ch[2]=ch[1],nu))],[E,\kappa])[1],ch[2]);
ch[3] : subst([nu=-nu],-ch[2]);
plot2d([[parametric, t, subst(params,subst(t,nu,ch[1])),subst(params,[t,-b, b])],
        [parametric, t, subst(params,subst(t,nu,ch[2])),subst(params,[t,-3,-b])],
        [parametric, t, subst(params,subst(t,nu,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(nu, a,b) :=
  if nu < -b then
     (a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b+nu))/(sin(%pi*b^2)-a))-a       /*ch[2]*/
  elseif nu > +b then
     a-(a-sin(%pi*b^2))*%e^(-(%pi*b*cos(%pi*b^2)*(b-nu))/(sin(%pi*b^2)-a))       /*ch[3]*/
  else
     sin(%pi*b*nu)                                                               /*ch[1]*/
     ;





Links