mardi 21 juin 2016

Oscillateurs parallèles couplés par des ressorts n°10

Alexander Grahn  propose un modèle plus complet qui permet de rendre compte de façon plus réaliste le phénomène :
Les ressorts étirés (dont la longueur est plus grande que la longueur à vide) tendent à minimiser l’écart entre les mobiles.
Donc, même en présence du frottement dynamique Ffrot = −Cfrot v2, la seule configuration stable est l’alignement vertical des mobiles. Elle est obtenue de manière asymptotique au cours du temps. Pour obtenir un alignement final aléatoire il faut ajouter une force adhésive Fadh. Elle se manifeste seulement à l’état de repos, donc toujours aux points de retour du mobile. Pour remettre le mobile en mouvement, il est nécessaire que la force résultante Fres des ressorts attachés au mobile soit plus grande que la force d’adhésion. Le force d’adhésion c’est la force de frottement en statique, on sait que les coefficients de frottement statique et dynamique sont différents, que le coefficient de frottement statique est plus grand que le dynamique.
On utilise un modèle pour lequel cette force prend bien la valeur donnée par la loi de Coulomb aux instants où la vitesse s’annule, mais qui le mouvement se poursuivant, décroît très rapidement. (Des explications plus détaillées sont fournies dans le document).
Remarque : le Gif ne boucle pas, il faut donc rafraichir l'écran pour relancer l'animation (touche F5).

Les fichiers LaTeX, animation avec le package animate ou par la création d'images pour le Gif  sont dans l'archive  (10mobiles9ressorts-Alexander.zip) du dossier :

Le listing :

\documentclass{article}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\renewcommand{\ttdefault}{lmtt}
\usepackage{amsmath}
\DeclareMathOperator{\sgn}{sgn}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
%\usepackage[method=icon]{animate}
%\usepackage[method=widget]{animate}
%\usepackage[method=ocg]{animate}
\usepackage{animate}
\title{Dix oscillateurs parallèles couplés par des ressorts avec frottement et adhésion}
\date{21 juin 2016}
\author{Manuel Luque, Alexander Grahn}
\pagestyle{empty}
\begin{document}
\maketitle
Les ressorts étirés (dont la longueur est plus grande que la longueur à vide) tendent à minimiser l'écart entre les mobiles. Donc, même en présence du frottement dynamique $F_\mathrm{frot}=-C_\mathrm{frot}\dot{x}$, la seule configuration stable est l'alignement vertical des mobiles. Elle est obtenue de manière asymptotique au cours du temps. Pour obtenir un alignement final aléatoire il faut ajouter une force adhésive $F_\mathrm{adh}$. Elle se manifeste seulement à l'état de repos, donc toujours aux points de retour du mobile. Pour remettre le mobile en mouvement, il est nécessaire que la force résultante $F_\mathrm{res}$ des ressorts attachés au mobile soit plus grande que la force d'adhésion.
% Cette force d'adhésion perdure même lorsque la vitesse n'est pas nulle, mais décroît très rapidement
Le force d'adhésion c'est la force de frottement en statique, on sait que les coefficients de frottement statique et dynamique sont différents, que le coefficient de frottement statique est plus grand que le dynamique.
%Cependant, ici avant d'atteindre l'état de repos, le système est en mouvement et il sera impossible de tenir compte de cette force d'adhésion qui ne se manifeste que lorsque la vitesse est nulle, donc aux deux positions extrêmes %du mobile, si l'on considère que sa durée d'existence est nulle.
On utilise un modèle pour lequel cette force prend bien la valeur donnée par la loi de Coulomb aux instants où la vitesse s'annule, mais qui le mouvement se poursuivant, décroît très rapidement. La force d'adhésion sera modélisée comme suit~:
\begin{equation}
%  F_\mathrm{adh}=-\sgn(F_\mathrm{res})\min(|F_\mathrm{res}|,F_\mathrm{adh,const})\exp(-10^4 \dot{x}^2)
   F_\mathrm{adh}=-\sgn(F_\mathrm{res})F_\mathrm{adh,const}\exp(-10^4 \dot{x}^2)
\end{equation}
Le facteur $\exp(-10^4\dot{x}^2)$ prend la valeur 1 si la vitesse $(\dot{x})$ est nulle et tend rapidement vers zéro quand la valeur absolue de la vitesse croît. % (en fonction du carré de la vitesse).
On pourra faire des essais en prenant un facteur de décroissance encore plus rapide comme $\exp(-10^6 \dot{x}^2)$ ou $\exp(-10^{12} \dot{x}^6)$.
% Pour le signe, il peut y avoir un problème si Fres=0.
\def\mobileA{\pscustom[fillstyle=solid,fillcolor=red,unit=0.2]{\psline(-0.5,0.1)(-2,0.1)(-2,1)(2,1)(2,0.1)
\psarcn(0,0.1){0.5}{0}{180}
\moveto(-0.2,0.1)
\psarc(0,0.1){0.2}{180}{360}
\psline(0.2,0.1)(-0.2,0.1)}}
\def\mobileB{\psframe[fillstyle=solid,fillcolor=yellow,unit=0.2](-2,-0.5)(2,0.5)}
\def\mobileC{\pscustom[fillstyle=solid,fillcolor=red,unit=0.2]{\psline(0.5,-0.1)(2,-0.1)(2,-1)(-2,-1)(-2,-0.1)(-0.5,-0.1)
\psarcn(0,-0.1){0.5}{180}{0}
\moveto(0.2,-0.1)
\psarc(0,-0.1){0.2}{0}{180}
\psline(-0.2,-0.1)(0.2,-0.1)}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% force résultante exercée par le(s) ressort(s)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\let\nmdef\@namedef
\let\nmuse\@nameuse
\makeatother
\def\signe#1{IfTE(\nmuse{#1}=0,0,\nmuse{#1}/abs(\nmuse{#1}))}
%  force résultante exercée par le(s) ressort(s)
\nmdef{force01}{( km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2)))}%
\nmdef{force02}{(-km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))+km*(x[2]-x[1])*(1-L0/sqrt(distance^2+(x[2]-x[1])^2)))}%
\nmdef{force03}{(-km*(x[2]-x[1])*(1-L0/sqrt(distance^2+(x[2]-x[1])^2))+km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2)))}%
\nmdef{force04}{(-km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2))+km*(x[4]-x[3])*(1-L0/sqrt(distance^2+(x[4]-x[3])^2)))}%
\nmdef{force05}{(-km*(x[4]-x[3])*(1-L0/sqrt(distance^2+(x[4]-x[3])^2))+km*(x[5]-x[4])*(1-L0/sqrt(distance^2+(x[5]-x[4])^2)))}%
\nmdef{force06}{(-km*(x[5]-x[4])*(1-L0/sqrt(distance^2+(x[5]-x[4])^2))+km*(x[6]-x[5])*(1-L0/sqrt(distance^2+(x[6]-x[5])^2)))}%
\nmdef{force07}{(-km*(x[6]-x[5])*(1-L0/sqrt(distance^2+(x[6]-x[5])^2))+km*(x[7]-x[6])*(1-L0/sqrt(distance^2+(x[7]-x[6])^2)))}%
\nmdef{force08}{(-km*(x[7]-x[6])*(1-L0/sqrt(distance^2+(x[7]-x[6])^2))+km*(x[8]-x[7])*(1-L0/sqrt(distance^2+(x[8]-x[7])^2)))}%
\nmdef{force09}{(-km*(x[8]-x[7])*(1-L0/sqrt(distance^2+(x[8]-x[7])^2))+km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2)))}%
\nmdef{force10}{(-km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2)))}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%force d'adhésion
\def\forceAdh{km*L0/2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 10 mobiles
%  0  1   2   3   4    5   6   7   8   9  %  10   11  12   13   14   15   16   17  18   19
% x1  x2  x3  x4  x5  x6  x7  x8  x9  x10 %  x'1 x'2  x'3  x'4  x'5  x'6  x'7  x'8 x'9  x'10
\def\DixOscillateurs{x[10]|x[11]|x[12]|x[13]|x[14]|x[15]|x[16]|x[17]|x[18]|x[19]| %
  \nmuse{force01}-cf*x[10]-\signe{force01}*\forceAdh*Euler^(-1e4*x[10]^2)|%
  \nmuse{force02}-cf*x[11]-\signe{force02}*\forceAdh*Euler^(-1e4*x[11]^2)|%
  \nmuse{force03}-cf*x[12]-\signe{force03}*\forceAdh*Euler^(-1e4*x[12]^2)|%
  \nmuse{force04}-cf*x[13]-\signe{force04}*\forceAdh*Euler^(-1e4*x[13]^2)|%
  \nmuse{force05}-cf*x[14]-\signe{force05}*\forceAdh*Euler^(-1e4*x[14]^2)|%
  \nmuse{force06}-cf*x[15]-\signe{force06}*\forceAdh*Euler^(-1e4*x[15]^2)|%
  \nmuse{force07}-cf*x[16]-\signe{force07}*\forceAdh*Euler^(-1e4*x[16]^2)|%
  \nmuse{force08}-cf*x[17]-\signe{force08}*\forceAdh*Euler^(-1e4*x[17]^2)|%
  \nmuse{force09}-cf*x[18]-\signe{force09}*\forceAdh*Euler^(-1e4*x[18]^2)|%
  \nmuse{force10}-cf*x[19]-\signe{force10}*\forceAdh*Euler^(-1e4*x[19]^2)}%
%\def\initCond{x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 vx1 vx2 vx3 vx4 vx5 vx6 vx7 vx8 vx9 vx10}
\def\initCond{initCond}
\begin{center}
\def\nFrames{400}%
\begin{pspicture}(-1,-4)(10,4)
\pstVerb{/initCond {% rrand srand
                   10 { rand 2147483647 div 8 mul -4 add } repeat
                    0.001 -0.001 0.001 -0.001 0.001 -0.001 0.001 -0.001 0.001 -0.001
                   } def
%% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
% coefficient de frottement / masse = cf
         /cf 0.75 def
        }%
\pstODEsolve[algebraic,varsteptol=1e-6]{mobile0123456789}{(t) 0 1 2 3 4 5 6 7 8 9}{0}{10}{\nFrames}{\initCond}{\DixOscillateurs}
\pstVerb{
/DATAS [mobile0123456789] def
/posX0 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 1 add get % x0
           } for
      } def
/posX1 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 2 add get % x1
           } for
      } def
/posX2 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 3 add get % x2
           } for
      } def
/posX3 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 4 add get % x3
           } for
      } def
/posX4 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 5 add get % x4
           } for
      } def
/posX5 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 6 add get % x5
           } for
      } def
/posX6 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 7 add get % x6
           } for
      } def
/posX7 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 8 add get % x7
           } for
      } def
/posX8 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 9 add get % x8
           } for
      } def
/posX9 {0 11 DATAS length 11 sub {/i exch def
           DATAS i get % t
           DATAS i 10 add get % x9
           } for
      } def
}%
\listplot[linecolor=blue]{posX0}
\listplot[linecolor=red]{posX1}
\listplot[linecolor=green]{posX2}
\listplot[linecolor=cyan]{posX3}
\listplot[linecolor=magenta]{posX4}
\listplot[linecolor=yellow]{posX5}
\listplot[linecolor=gray]{posX6}
\listplot[linecolor=black]{posX7}
\listplot[linecolor=red!50]{posX8}
\listplot[linecolor=blue!50]{posX9}
\psgrid[subgriddiv=0,gridcolor=blue,gridwidth=0.02,griddots=0,gridlabels=5pt](-1,-4)(10,4)
\psline{<->}(0,4)(0,0)(10,0)
\uput[r](10,0){$t$(s)}
\uput[u](0,4){$x$}
\end{pspicture}
\end{center}
\newpage
On peut constater que dans on état final, les ressorts ne sont pas alignés verticalement.
\begin{center}
\def\nFrames{400}% 400 images
\begin{animateinline}[
  %measure, %for testing performance
  controls,
  begin={\begin{pspicture}(-7,-10)(7,10)},
  end={\end{pspicture}}]{10}% 10 images/s
\pstVerb{/initCond {% rrand srand
                   10 { rand 2147483647 div 8 mul -4 add } repeat
                    0.001 -0.001 0.001 -0.001 0.001 -0.001 0.001 -0.001 0.001 -0.001
                   } def
%% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
% coefficient de frottement / masse = cf
         /cf 0.75 def
        }%
\pstODEsolve[algebraic,varsteptol=1e-6]{mobile0123456789}{0 1 2 3 4 5 6 7 8 9}{0}{10}{\nFrames}{\initCond}{\DixOscillateurs}
\pstVerb{
/posX1 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i get} for
       ]def
/posX2 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 1 add get} for
       ]def
/posX3 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 2 add get} for
       ]def
/posX4 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 3 add get} for
       ]def
/posX5 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 4 add get} for
       ]def
/posX6 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 5 add get} for
       ]def
/posX7 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 6 add get} for
       ]def
/posX8 [0 10 [mobile0123456789] length 10 sub {/i exch def
             [mobile0123456789] i 7 add get} for
       ]def
/posX9 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 8 add get} for
       ]def
/posX10 [0 10 [mobile0123456789] length 10 sub {/i exch def
              [mobile0123456789] i 9 add get} for
       ]def
}%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=cyan!20](-7,-10)(7,10)
\psframe[fillstyle=crosshatch,hatchangle=90,hatchsep=1,hatchwidth=0.01,hatchcolor=blue](-7,-10)(7,10)
\psline[linewidth=0.05](-7,9.1)(7,9.1)
\psline[linewidth=0.05](-7,7)(7,7)
\psline[linewidth=0.05](-7,5)(7,5)
\psline[linewidth=0.05](-7,3)(7,3)
\psline[linewidth=0.05](-7,1)(7,1)
\psline[linewidth=0.05](-7,-1)(7,-1)
\psline[linewidth=0.05](-7,-3)(7,-3)
\psline[linewidth=0.05](-7,-5)(7,-5)
\psline[linewidth=0.05](-7,-7)(7,-7)
\psline[linewidth=0.05](-7,-9.1)(7,-9.1)
\rput(!posX1 \i\space get 9){\mobileA}
\rput(!posX2 \i\space get 7){\mobileB}
\rput(!posX3 \i\space get 5){\mobileB}
\rput(!posX4 \i\space get 3){\mobileB}
\rput(!posX5 \i\space get 1){\mobileB}
\rput(!posX6 \i\space get -1){\mobileB}
\rput(!posX7 \i\space get -3){\mobileB}
\rput(!posX8 \i\space get -5){\mobileB}
\rput(!posX9 \i\space get -7){\mobileB}
\rput(!posX10 \i\space get -9){\mobileC}
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX1 \i\space get 9)(!posX2 \i\space get 7)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX2 \i\space get 7)(!posX3 \i\space get 5)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX3 \i\space get 5)(!posX4 \i\space get 3)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX4 \i\space get 3)(!posX5 \i\space get 1)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=cyan]{*-*}(!posX5 \i\space get 1)(!posX6 \i\space get -1)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX6 \i\space get -1)(!posX7 \i\space get -3)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX7 \i\space get -3)(!posX8 \i\space get -5)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX8 \i\space get -5)(!posX9 \i\space get -7)
\psRessort[N=15,li=1,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX9 \i\space get -7)(!posX10 \i\space get -9)
}
\end{animateinline}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire