{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"toc": true
},
"source": [
"# Capacité numérique du mercredi 18/09/24 \n",
"# Slip-Stick et vibrations d'une corde de violon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sauver ce fichier dans votre espace de travail et inscrire votre nom ci-dessous\n",
"# Nom :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Slip-Stick : Modélisation d'une corde de violon\n",
"\n",
"\n",
"Le mouvement d'une corde de violon déplacée par un archet fait apparaître une alternance de phase d'adhérence et de glissement (\"stick-slip\") :\n",
"\n",
"\n",
"
\n",
"\n",
"Nous allons étudier une situation expérimentale qui modélise cette situation :\n",
"\n",
"
\n",
"\n",
"\n",
"Le solide S1 est entraîné à une vitesse constante $\\vec{v}_0$ par un moteur. Le solide S2 frotte sur S1 et est retenu à gauche par un dynamomètre qui est ici représenté par un ressort de raideur $k$ et de longueur à vide $l_0$.\n",
"\n",
"On appelle $f_s$ le coefficient de frottement statique entre les deux solides, et $f_d$ le coefficient de frottement dynamique. La masse de S2 est notée $m$.\n",
"\n",
"Ce mouvement de stick-slip peut aussi modéliser le crissement d'une craie sur un tableau (ou d'une chaise sur le sol). La hauteur du son émis est alors directement liée à la fréquence du phénomène de stick-slip.\n",
"\n",
"*L'objectif de ce TP est de comprendre la situation étudiée et de prédire la fréquence du phénomène de stick-slip en fonction des différents paramètres de l'expérience.*\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Modélisation\n",
"\n",
"**Question 1**\n",
"> Dans la modélisation, quel solide (S1 ou S2) joue le rôle de la corde ? de l'archet ? \n",
"> Qui joue le rôle du ressort dans la situation réelle ?\n",
"> Quelle est la différence entre la situation réelle de la vidéo et la situation modélisée ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 2**\n",
"> Représenter sur le schéma les différentes forces s'appliquant sur S2."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 3**\n",
"> Lorsque S1 est en situation d'adhérence, que vaut $v= \\frac{dx}{dt}$ ? A quelle condition sur $x$ sort-on de l'adhérence et rentre-t-on en glissement ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 4**\n",
"> Lorsque S1 est en situation de glissement, quelle est l'équation différentielle vérifiée par $x$ ? A quelle condition sur $v=\\frac{dx}{dt}$ (que l'on exprimera d'abord sous forme d'une égalité, puis d'une inégalité) va-t-on sortir du glissement ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Résolution numérique\n",
"\n",
"On s'aperçoit ainsi que selon l'état (adhérence ou glissement) du système, l'équation à résoudre pour déterminer l'évolution de $x(t)$ diffère : comme ces états vont se succéder, il faudra à chaque fois résoudre les équations, en prenant en compte les continuités de $x$ et $\\frac{dx}{dt}$ pour raccorder les solutions. Ce travail, s'il est possible, est toutefois laborieux... et la résolution numérique va nous permettre ici de visualiser rapidement le mouvement du solide $S1$.\n",
"\n",
"### Conditions initiales\n",
"\n",
"Dans un premier temps, on va exécuter le code ci-dessous, qui importe les modules Python nécessaires. Les valeurs numériques des différents paramètres du problème sont rentrées dans les unités du système international."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from math import sqrt\n",
"\n",
"v0=0.01 # en m/s\n",
"fs=0.8\n",
"fd=0.7\n",
"\n",
"k=40000 # en N/m\n",
"\n",
"m=0.1 # en kg liée à la pression exercée \n",
"g=9.81 # en m/s2\n",
"\n",
"\n",
"t=[0] # t correspond à la liste des instants de calcul de la position x et de la vitesse xp (pour \"xpoint\")\n",
"tf=0.1 # en s, instant final de l'étude\n",
"dt=0.00001 # dt est le pas de calcul en s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 5**\n",
"> Rappeler le compromis à faire sur le choix de $dt$ pour qu'il soit adapté à la résolution numérique."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On a ensuite besoin d'une variable ```etat``` qui indiquera l'état dans lequel se situe S2 :\n",
"- l'état d'adhérence sera caractérisé par ```etat=0```\n",
"- l'état de glissement sera caractérisé par ```etat=1```\n",
"\n",
"Par ailleurs, on va créer deux listes : ```l_x```et ```l_xp``` correspondant aux valeurs de $x$ et $\\frac{dx}{dt}$ évalués aux instants indiqués dans la liste ```t```. On aura donc :\n",
"$$\\mbox{l_x[i]}=x\\left(t=t[i]\\right)$$\n",
"$$\\mbox{l_xp[i]}=\\frac{dx}{dt}(t=t[i])$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 6**\n",
"> Compléter le code suivant pour définir l'état initial, correspondant au solide S1, placé sur le tapis, adhérent, en x=0."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"etat=### \n",
"\n",
"l_x=[0]\n",
"l_xp=#### "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Détermination de l'état du système\n",
"\n",
"Le problème à résoudre est donc :\n",
"\n",
"
\n",
"\n",
"Ainsi, à chaque nouvelle estimation de $x$ et $\\frac{dx}{dt}$, il faut vérifier si le système reste dans le même état ou s'il change d'état.\n",
"\n",
"On définit alors la fonction ```state(x,xp,etat)``` qui retourne la valeur actualisée de ```etat``` à partir de la position ```x``` et de la vitesse ```xp```, nouvellement calculées, de S2.\n",
"\n",
"**Question 7**\n",
"> Compléter le code suivant qui définit la fonction ```state```."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def state(x,xp,etat):\n",
" if etat==1 and xp>v0:\n",
" return ####\n",
" elif ####### and ##### :\n",
" return 1\n",
" else : #########"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Résolution en cas d'adhérence\n",
"\n",
"Lorque S2 est en état d'adhérence, il faut résoudre :\n",
"$$\\frac{dx}{dt}=v_0$$\n",
"\n",
"**Question 8**\n",
"> Discrétiser cette équation pour donner la relation entre ```l_x[i+1]```, ```l_x[i]``` et les autres paramètres du problème, lors de l'état d'adhérence."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Résolution en cas de glissement\n",
"\n",
"Lors du glissement de S2, il faut résoudre l'équation d'ordre 2 :\n",
"\n",
"$$m \\frac{d^2x}{dt^2}=- kx+f_d mg$$\n",
"\n",
"Pour résoudre ce type d'équation avec la méthode d'Euler, on va se ramener à une équation différentielle d'ordre 1, en posant le vecteur :\n",
"$$Y= \\begin{bmatrix} x \\\\ \\dot{x}\\end{bmatrix}$$\n",
"\n",
"**Question 9**\n",
"> Montrer que $Y$ suit une équation différentielle d'ordre 1 de type :\n",
"> $$\\dot{Y} = F(Y)$$ \n",
"> où $ F : \\mathbb{R}^2 \\rightarrow \\mathbb{R}^2$ est une fonction dont on donnera l'expression $F(u,v)$ et dont l'on complètera la définition dans le code ci-dessous."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def F(u,v):\n",
" return ###"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Résolution entière\n",
"\n",
"**Question 10**\n",
"> Compléter le code ci-dessous pour effectuer la résolution du problème et l'affichage de la position et la vitesse au cours du temps. A quoi correspondent les traits horizontaux présents dans les deux tracés ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"l_etat=[etat]\n",
"\n",
"while t[-1] Exécuter le code et expliquer avec précision ce qu'il fait.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"t_x=np.array(l_x)\n",
"n=t_x.size\n",
"\n",
"spectre=np.fft.fft(t_x) # calcul du spectre\n",
"freq=np.fft.fftfreq(n,d=dt) # création de la liste des fréquences où est calculé le spectre.\n",
"\n",
"plt.close()\n",
"plt.figure()\n",
"plt.plot(freq[0:int(len(freq)/100)],np.abs(spectre[0:int(len(freq)/100)]))\n",
"# on réduit la liste des fréquences pour la visualisation\n",
"plt.xlabel(\"Fréquence en Hz\")\n",
"plt.ylabel(\"Spectre en Amplitude\")\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"max_spec=np.max(np.abs(spectre[1:int(len(freq)/100)]))\n",
"for i in range(1,int(len(freq)/100)):\n",
" if np.abs(spectre)[i]==max_spec:\n",
" imax=i\n",
" \n",
"f=freq[imax]\n",
"print(\"La fréquence du slip-stick est\",str(f)[0:4],\"Hz\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "",
"title_sidebar": "Contents",
"toc_cell": true,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}