Sources/Lexikon/Kontaktkennlinie: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 10: | Zeile 10: | ||
Das ist ist aufwändig und teuer. | Das ist ist aufwändig und teuer. | ||
Einfacher kommen wir mit einer Kontaktkennlinie zum Ziel, die ein [https://de.wikipedia.org/wiki/Heuristik heuristisches] Modell der Kontaktkraft ist. | Einfacher kommen wir mit einer Kontaktkennlinie zum Ziel, die ein [https://de.wikipedia.org/wiki/Heuristik heuristisches] Modell der Kontaktkraft ist.<br clear="all"/> | ||
== Stückweise linearer Ansatz == | == Stückweise linearer Ansatz == | ||
[[Datei:Kontaktkennlinie-11.png|mini|Kennlinie (erster | [[Datei:Kontaktkennlinie-11.png|mini|Kennlinie (erster Ansatz)]]Wir suchen also eine Funktion, die für ''h''<0 einen positive Wert (Druck) zurückliefert und Null sonst. Als Kontaktkraft schreiben wir | ||
<math>F = k\cdot \kappa(h)</math> | ::<math>F = k\cdot \kappa(h)</math> | ||
mit der Federkonstante ''k'' und der nichtlinearen Funktion ''κ(h)''. | mit der Federkonstante ''k'' und der nichtlinearen Funktion ''κ(h)''. | ||
Zeile 21: | Zeile 21: | ||
''κ(h)'' wählen wir zu: | ''κ(h)'' wählen wir zu: | ||
<math>\kappa(h) = | ::<math>\kappa(h) = | ||
\left\{ | \left\{ | ||
\begin{array}{ll} \; \; \;0 & \text{ für } h>0\\ | \begin{array}{ll} \; \; \;0 & \text{ für } h>0\\ | ||
-h& \text{ sonst} | -h& \text{ sonst} | ||
\end{array}\right.</math> | \end{array}\right.</math> | ||
{{MyCodeBlock|title=Maxima-Code|text=Zum | {{MyCodeBlock|title=Maxima-Code | ||
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie. | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/* contact characteristic */ | |||
kappa(h) := if h>0 then 0 else -h; | |||
plot2d(kappa(h),[h,-1,1], [y,-0.1,1], [xlabel, "h/ε->"], [ylabel, "κ ->"])$ | |||
</syntaxhighlight> | |||
}} | |||
= Ausrunden der Kennlinie = | = Ausrunden der Kennlinie = | ||
[[Datei:Kontaktkennlinie-12.png|mini|Stetig differenzierbarere Kennlinie]]Damit die Kennlinie stetig differenzierbar ist, brauchen wir ein "Ausrundungspolynom" um ''h''=0 herum. | [[Datei:Kontaktkennlinie-12.png|mini|Stetig differenzierbarere Kennlinie<br/>... hier für ε=0.5]]Damit die Kennlinie stetig differenzierbar ist, brauchen wir ein "Ausrundungspolynom" um ''h''=0 herum. | ||
Für ''-ε < h < ε'' wählen wir ein Polynom 2.ten Graden und passen es stetig an die beiden Geradenstücke an. | Für ''-ε < h < ε'' wählen wir ein Polynom 2.ten Graden und passen es stetig an die beiden Geradenstücke an. | ||
Zeile 35: | Zeile 43: | ||
Dann ist die nichtlineare Funktion ''κ(h,''ε''):'' | Dann ist die nichtlineare Funktion ''κ(h,''ε''):'' | ||
<math>\kappa(h) = \left\{ | ::<math>\kappa(h) = \left\{ | ||
\begin{array}{ll} \;\;\;0&\text{ für } h>\varepsilon\\ \displaystyle \frac{{{h}^{2}}}{4\cdot \epsilon}-\frac{h}{2}+\frac{\epsilon}{4}&\text{ für } \varepsilon > h >-\varepsilon\\ -h &\text{ sonst} \end{array} | \begin{array}{ll} \;\;\;0&\text{ für } h>\varepsilon\\ \displaystyle \frac{{{h}^{2}}}{4\cdot \epsilon}-\frac{h}{2}+\frac{\epsilon}{4}&\text{ für } \varepsilon > h >-\varepsilon\\ -h &\text{ sonst} \end{array} | ||
\right.</math> | \right.</math> | ||
{{MyCodeBlock|title=Maxima-Code | |||
|text=Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie. | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/* contact characteristic with smooth transition */ | |||
p(h) := sum(a[i]*h^i,i,0,2); | |||
bc : [p(+epsilon)=0, subst([h=-epsilon],diff(p(h),h))=-1,subst([h=+epsilon],diff(p(h),h))=0]; | |||
coeff: solve(bc,[a[0],a[1],a[2]])[1]; | |||
kappa(h,epsilon) := if h>epsilon then 0 else if h<-epsilon then -h else epsilon/4-1/2*h+1/(4*epsilon)*h^2; | |||
plot2d(kappa(h,0.25),[h,-1,1], [y,-0.1,1], [xlabel, "h/ε->"], [ylabel, "κ ->"])$ | |||
</syntaxhighlight> | |||
}} | |||
= Kontaktkennlinie mit Verlustglied = | |||
Oft möchte man bei Kontaktkennlinen ein Verlustglied einbauen - also ein mathematisches Modell für einen Stoß, bei dem im Prozess der elastischen Deformation auch kinetische Energie verloren geht. | |||
[[Datei:Kontaktkennlinie-15.png|mini|Kennlinie mit dynamischem Verlustglied. Schraffiert ist die Verlustarbeit beim einem Schwingungszyklus]] | |||
Dafür multiplizieren wir den Ausdruck für die Kraft <i>F</i> oben mit dem Geschwindigkeitsabhängigen Verlustglied <i>l(v)</i>, also | |||
::<math>N = l(v)\cdot F(h)\text{ mit } v = \frac{\displaystyle dh}{\displaystyle dt} </math>. | |||
Für das Verlustglied kann man dann z.B. ansetzten | |||
::<math>l(v) = \left\{\begin{array}{l}1\cdot \left(1-\frac{\displaystyle v}{\displaystyle v_{ref}} \right) \text{ für } v<0 \text{ (eindringen)}\\ | |||
1 / \left(1+\frac{\displaystyle v}{\displaystyle v_{ref}} \right) \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> | |||
/* Maxima */ | |||
/* contact characteristic */ | |||
/* piecewise linear with energy loss */ | |||
n(h,H) := if h<0 then -h/H else 0; | |||
l(v,V) := if v<0 then 1*(1-v/V) else 1/(1+v/V); | |||
motion: h=cos(2*%pi*τ); | |||
motion: [motion, v=diff(subst(motion,h),τ)]; | |||
plot2d(subst(motion,n(h,1)*l(v,1)),[τ,0,1], [ylabel,"N/F[0] ->"], [xlabel,"t/T ->"])$ | |||
plot2d([parametric,subst(motion,h),subst(motion,n(h,1)*l(v,1)),[τ,0,1]], [ylabel,"N/F[0] →"], [xlabel,"h/H →"], [x,-1.1,0.1])$ | |||
</syntaxhighlight> | |||
}} | |||
<hr/> | |||
'''Links:''' | |||
* [[Gelöste Aufgaben/Kw23|Kw23]], [[Gelöste Aufgaben/Kv52|Kv52]] |
Aktuelle Version vom 31. Mai 2022, 10:43 Uhr
Beim Billard prallen zwei Körper aufeinander und trennen sich dann wieder. Der Löser der Bewegungsgleichungen braucht also eine Kraft, die "da" ist, wenn der Abstand der Kugelmittelpunkte kleiner als der Kugeldurchmesser ist - und Null sonst.
Für die Bewegungsgleichung eines solchen Systems müssen wir die Kraft erfassen, die im Kontakt zwischen zwei Körpern wirkt. Ein Finite Elemente Modell könnte diese Kraft als Resultierende der Kontakt-Drücke für verschiedene Eindringtiefen ermitteln.
Das ist ist aufwändig und teuer.
Einfacher kommen wir mit einer Kontaktkennlinie zum Ziel, die ein heuristisches Modell der Kontaktkraft ist.
Stückweise linearer Ansatz
Wir suchen also eine Funktion, die für h<0 einen positive Wert (Druck) zurückliefert und Null sonst. Als Kontaktkraft schreiben wir
mit der Federkonstante k und der nichtlinearen Funktion κ(h).
κ(h) wählen wir zu:
Maxima-Code
Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
/* contact characteristic */
kappa(h) := if h>0 then 0 else -h;
plot2d(kappa(h),[h,-1,1], [y,-0.1,1], [xlabel, "h/ε->"], [ylabel, "κ ->"])$
Ausrunden der Kennlinie
Damit die Kennlinie stetig differenzierbar ist, brauchen wir ein "Ausrundungspolynom" um h=0 herum.
Für -ε < h < ε wählen wir ein Polynom 2.ten Graden und passen es stetig an die beiden Geradenstücke an.
Dann ist die nichtlineare Funktion κ(h,ε):
Maxima-Code
Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
/* contact characteristic with smooth transition */
p(h) := sum(a[i]*h^i,i,0,2);
bc : [p(+epsilon)=0, subst([h=-epsilon],diff(p(h),h))=-1,subst([h=+epsilon],diff(p(h),h))=0];
coeff: solve(bc,[a[0],a[1],a[2]])[1];
kappa(h,epsilon) := if h>epsilon then 0 else if h<-epsilon then -h else epsilon/4-1/2*h+1/(4*epsilon)*h^2;
plot2d(kappa(h,0.25),[h,-1,1], [y,-0.1,1], [xlabel, "h/ε->"], [ylabel, "κ ->"])$
Kontaktkennlinie mit Verlustglied
Oft möchte man bei Kontaktkennlinen ein Verlustglied einbauen - also ein mathematisches Modell für einen Stoß, bei dem im Prozess der elastischen Deformation auch kinetische Energie verloren geht.
Dafür multiplizieren wir den Ausdruck für die Kraft F oben mit dem Geschwindigkeitsabhängigen Verlustglied l(v), also
- .
Für das Verlustglied kann man dann z.B. ansetzten
- .
Maxima-Code
Zum Einbauen in Ihr Programm: der Quellcode zur Kennlinie.
/* Maxima */
/* contact characteristic */
/* piecewise linear with energy loss */
n(h,H) := if h<0 then -h/H else 0;
l(v,V) := if v<0 then 1*(1-v/V) else 1/(1+v/V);
motion: h=cos(2*%pi*τ);
motion: [motion, v=diff(subst(motion,h),τ)];
plot2d(subst(motion,n(h,1)*l(v,1)),[τ,0,1], [ylabel,"N/F[0] ->"], [xlabel,"t/T ->"])$
plot2d([parametric,subst(motion,h),subst(motion,n(h,1)*l(v,1)),[τ,0,1]], [ylabel,"N/F[0] →"], [xlabel,"h/H →"], [x,-1.1,0.1])$
Links: