jeudi 9 juin 2016

4 oscillateurs en parallèle couplés par 3 ressorts

Ce message et les deux précédents sont une tentative de vérification d'une affirmation contenue dans un article du dossier du magazine `Pour la Science' n°91 d'Avril-Juin 2016'. Cet article est intitulé ``Mayonnaise et élections américaines'' et a pour sujet, en réalité, les équations différentielles stochastiques. Dans l'encadré de la page 104, on trouve cette illustration avec l'affirmation que je me proposais de vérifier :
Avec 4 solides et 3 ressorts et faisant varier les conditions initiales, voici 2 exemples sur lesquels on peut constater que les ressorts (1) et (3) restent parallèles au cours du temps. En vérité, les conditions inistiales ont été choisies pour que dès le départ (1) et (3) soient parallèles. Il faut donc tester en choisissant des conditions initiales quelconques et voir si au bout d'un certain temps les ressorts deviennent parallèles. Pour que la vérification soit plus convaincante il faut choisir au moins 5 solides et 4 ressorts. Le dernier point(important) est de trouver une justification théorique à ce phénomène.
Ci-dessous voici le code de ces 2 exemples(le premier est le plus démonstratif). Il faudra compiler les fichiers pour obtenir un pdf contenant les animations. La résolution des équations est faite avec le package pst-ode et l'animation avec le package animate d'Alexander Grahn.

Fichier 1 :

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}%
\usepackage[garamond]{mathdesign}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
\usepackage{animate}
\usepackage{array,amsmath}
\usepackage{url}
\title{Quatre oscillateurs parallèles couplés par des ressorts}
\date{9 juin 2016}
\author{Manuel Luque}
% manuel.luque27@gmail.com
\begin{document}
\maketitle
\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)}}
% 4 mobiles
%  0  1   2   3    4    5   6    7
% x1  x2  x3  x4  x'1  x'2  x'3  x'4
\def\QuatreOscillateurs{x[4]|x[5]|x[6]|x[7]|km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))|%
                                      -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))|%
                                      -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))|%
                                      -km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2))}
\def\initCond{x1 x2 x3 x4 vx1 vx2 vx3 vx4}
\begin{center}
\begin{pspicture}[showgrid=false](-1,-6)(15,6)
\pstVerb{/x1 4 def
         /vx1 0 def
         /x2 0 def
         /vx2 0 def
         /x3 0 def
         /vx3 0 def
         /x4 -4 def
         /vx4 0 def
% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
        }%
\pstODEsolve[algebraic]{mobile1}{(t) 0}{0}{10}{2000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=1,linewidth=4\pslinewidth,linecolor=green]{mobile1}
\pstODEsolve[algebraic]{mobile2}{(t) 1}{0}{10}{2000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=1,linecolor=red]{mobile2}
\pstODEsolve[algebraic]{mobile3}{(t) 2}{0}{10}{2000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=1,linecolor=blue]{mobile3}
\pstODEsolve[algebraic]{mobile4}{(t) 3}{0}{10}{2000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=1,linecolor=magenta]{mobile4}
\multido{\i=0+1,\I=0+1}{11}{
    \psline(\i,-0.1)(\i,0.1)\uput[d](\i,0){\small\I}}
\psline(0,-6)
\psline{<->}(0,6)(0,0)(15,0)
\uput[l](0,3.8){\green$x_1$}\uput[r](15,0){$t$}
\uput[l](0,3.6){\red$x_2$}
\uput[l](0,3.4){\blue$x_3$}
\uput[l](0,3.2){\magenta$x_4$}
% pour déterminer la période
%\pstODEsolve[algebraic,saveData]{mobileABC}{(t) 0 3 1 4}{0}{0.7}{1000}{\initCond}{\TroisOscillateurs}
% periode = 0.7395325
\end{pspicture}
\end{center}
\newpage
\begin{center}
\def\nFrames{1000}% 1000 images
\begin{animateinline}[controls,% palindrome,
                     begin={\begin{pspicture}(-7,-4)(7,4)},
                     end={\end{pspicture}}]{20}% 20 images/s
\pstVerb{/x1 3 def
         /vx1 0 def
         /x2 0 def
         /vx2 0 def
         /x3 0 def
         /vx3 0 def
         /x4 -3 def
         /vx4 0 def
% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
        }%
\pstODEsolve[algebraic]{mobile1}{0}{0}{7.5}{\nFrames}{\initCond}{\QuatreOscillateurs}
\pstODEsolve[algebraic]{mobile2}{1}{0}{7.5}{\nFrames}{\initCond}{\QuatreOscillateurs}
\pstODEsolve[algebraic]{mobile3}{2}{0}{7.5}{\nFrames}{\initCond}{\QuatreOscillateurs}
\pstODEsolve[algebraic]{mobile4}{3}{0}{7.5}{\nFrames}{\initCond}{\QuatreOscillateurs}
\pstVerb{/posX1 [mobile1] def /posX2 [mobile2] def /posX3 [mobile3] def /posX4 [mobile4] def}%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=cyan!20](-7,-4)(7,4)
\psline[linewidth=0.05](-7,3.1)(7,3.1)
\psline[linewidth=0.05](-7,-3.1)(7,-3.1)
\psline[linewidth=0.05](-7,1)(7,1)
\psline[linewidth=0.05](-7,-1)(7,-1)
\rput(!posX1 \i\space get 3){\mobileA}
\rput(!posX2 \i\space get 1){\mobileB}
\rput(!posX3 \i\space get -1){\mobileB}
\rput(!posX4 \i\space get -3){\mobileC}
\psRessort[N=25,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX1 \i\space get 3)(!posX2 \i\space get 1)
\psRessort[N=25,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX2 \i\space get 1)(!posX3 \i\space get -1)
\psRessort[N=25,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX3 \i\space get -1)(!posX4 \i\space get -3)
}
\end{animateinline}
\end{center}
\end{document}  

Fichier 2 :

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}%
\usepackage[garamond]{mathdesign}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
\usepackage{animate}
\usepackage{array,amsmath}
\usepackage{url}
\title{Quatre oscillateurs parallèles couplés par des ressorts}
\date{9 juin 2016}
\author{Manuel Luque}
% manuel.luque27@gmail.com
\begin{document}
\maketitle
\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)}}
% 4 mobiles
%  0  1   2   3    4    5   6    7
% x1  x2  x3  x4  x'1  x'2  x'3  x'4
\def\QuatreOscillateurs{x[4]|x[5]|x[6]|x[7]|km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))|%
                                      -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))|%
                                      -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))|%
                                      -km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2))}
\def\initCond{x1 x2 x3 x4 vx1 vx2 vx3 vx4}
\begin{center}
\begin{pspicture}[showgrid=false](-1,-6)(15,6)
\pstVerb{/x1 3 def
         /vx1 0 def
         /x2 1 def
         /vx2 0 def
         /x3 -1 def
         /vx3 0 def
         /x4 -3 def
         /vx4 0 def
% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
        }%
\pstODEsolve[algebraic]{mobile1}{(t) 0}{0}{5}{1000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=2,linewidth=4\pslinewidth,linecolor=green]{mobile1}
\pstODEsolve[algebraic]{mobile2}{(t) 1}{0}{5}{1000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=2,linecolor=red]{mobile2}
\pstODEsolve[algebraic]{mobile3}{(t) 2}{0}{5}{1000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=2,linecolor=blue]{mobile3}
\pstODEsolve[algebraic]{mobile4}{(t) 3}{0}{5}{1000}{\initCond}{\QuatreOscillateurs}
\listplot[xunit=2,linecolor=magenta]{mobile4}
\multido{\i=0+1,\n=0.0+0.5}{11}{
    \psline(\i,-0.1)(\i,0.1)\uput[d](\i,0){\small\n}}
\psline(0,-6)
\psline{<->}(0,6)(0,0)(10,0)
\uput[l](0,3.8){\green$x_1$}\uput[r](10,0){$t$}
\uput[l](0,3.6){\red$x_2$}
\uput[l](0,3.4){\blue$x_3$}
\uput[l](0,3.2){\magenta$x_4$}
% pour déterminer la période
%\pstODEsolve[algebraic,saveData]{mobileABC}{(t) 0 3 1 4}{0}{0.7}{1000}{\initCond}{\TroisOscillateurs}
% periode = 0.7395325
\end{pspicture}
\end{center}
\newpage
\begin{center}
\def\nFrames{1000}% 1000 images
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-7,-4)(7,4)},
                     end={\end{pspicture}}]{50}% 50 images/s
\pstVerb{/x1 3 def
         /vx1 0 def
         /x2 1 def
         /vx2 0 def
         /x3 -1 def
         /vx3 0 def
         /x4 -3 def
         /vx4 0 def
% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 1 def
         /distance 2 def
        }%
\pstODEsolve[algebraic]{mobile1234}{0 1 2 3}{0}{10}{\nFrames}{\initCond}{\QuatreOscillateurs}
%\pstODEsolve[algebraic]{mobile2}{1}{0}{10}{\nFrames}{\initCond}{\QuatreOscillateurs}
%\pstODEsolve[algebraic]{mobile3}{2}{0}{10}{\nFrames}{\initCond}{\QuatreOscillateurs}
%\pstODEsolve[algebraic]{mobile4}{3}{0}{10}{\nFrames}{\initCond}{\QuatreOscillateurs}
\pstVerb{
/posX1 [0 4 [mobile1234] length 4 sub {/i exch def
            [mobile1234] i get} for
       ]def
/posX2 [0 4 [mobile1234] length 4 sub {/i exch def
            [mobile1234] i 1 add get} for
       ]def
/posX3 [0 4 [mobile1234] length 4 sub {/i exch def
            [mobile1234] i 2 add get} for
       ]def
/posX4 [0 4 [mobile1234] length 4 sub {/i exch def
            [mobile1234] i 3 add get} for
       ]def
 }%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=cyan!20](-7,-4)(7,4)
\psline[linewidth=0.05](-7,3.1)(7,3.1)
\psline[linewidth=0.05](-7,-3.1)(7,-3.1)
\psline[linewidth=0.05](-7,1)(7,1)
\psline[linewidth=0.05](-7,-1)(7,-1)
\rput(!posX1 \i\space get 3){\mobileA}
\rput(!posX2 \i\space get 1){\mobileB}
\rput(!posX3 \i\space get -1){\mobileB}
\rput(!posX4 \i\space get -3){\mobileC}
\psRessort[N=15,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX1 \i\space get 3)(!posX2 \i\space get 1)
\psRessort[N=15,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX3 \i\space get -1)(!posX4 \i\space get -3)
\psRessort[N=15,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX2 \i\space get 1)(!posX3 \i\space get -1)
}
\end{animateinline}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire