Suite de :
http://pstricks.blogspot.fr/2016/06/oscillateurs-en-parallele-couples-par_11.html
et précédents.
Avec des positions initiales initiales aléatoires et des vitesses initiales nulles, on n'obtient pas de régime "stable" c'est à dire dont les directions des ressorts pris 2 à 2 sont parallèles(ce que l'on obtient si dès le départ les directions initiales sont parallèles) : quelle que soit la durée choisie il n'y a pas de régime stable.
J'ai contacté
Nils Berglund auteur de l'article "
Mayonnaise et élections américaines" du dossier d'
avril-juin 2016 du magazine
Pour la Science, qui traite en réalité des équations stochastiques, mais qui faisait une analogie initiale avec ce système d'oscillateurs parallèles reliés par des ressorts : il m'a aimablement répondu sur ce problème et suggéré d'autres pistes intéressantes, voici sa remarque concernant le sujet qui m'intéressait :
«
Tout d'abord une précision: le modèle que j'évoque dans l'article (ainsi que sur Images des Maths) concerne un système avec frottement. Si vous ajoutez un terme en -c d
x/d
t au membre de droite des équations, cela aide à stabiliser le système. »
Pour obtenir des positions initiales aléatoires j'ai utilisé la macro de Donald Arseneau (on macros/generic on CTAN) "random.tex" (on pourrait coder ces positions en postscript directement). On s'aperçoit qu'au bout d'un certain temps, qui dépend de la valeur du coefficient de frottement, les mobiles et les ressorts s'alignent verticalement. Est-ce qu'en choisissant des vitesses initiales non nulles, il serait possible d'obtenir un alignement oblique ?
Remarque : le Gif ne boucle pas, il faut donc rafraichir l'écran pour relancer l'animation (touche F5).
Les fichiers sont dans l'archive :
En cas de problème avec le serveur, voici en premier le code pour produire un pdf contenant l'animation grâce au package
animate. Si vous le compilez vous n'obtiendrez pas les mêmes positions initiales que ci-dessus.
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
\usepackage{animate}
\input{random.tex} % From Donald Arseneau (on macros/generic on CTAN)
\title{Dix oscillateurs parallèles couplés par des ressorts}
% on introduit une force de frottement -f*vx
\date{15 juin 2016}
\author{Manuel Luque}
% manuel.luque27@gmail.com
\pagestyle{empty}
\newdimen\MXi\newdimen\MXii\newdimen\MXiii\newdimen\MXiiii\newdimen\MXiiiii
\newdimen\MXiiiiii\newdimen\MXiiiiiii\newdimen\MXiiiiiiii\newdimen\MXiiiiiiiii\newdimen\MXiiiiiiiiii
\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)}}
% 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]| %
km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))-cf*x[10]|%
-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))-cf*x[11]|%
-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))-cf*x[12]|%
-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))-cf*x[13]|%
-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))-cf*x[14]|%
-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))-cf*x[15]|%
-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))-cf*x[16]|%
-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))-cf*x[17]|%
-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))-cf*x[18]|%
-km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2))-cf*x[19]}%
\def\initCond{x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 vx1 vx2 vx3 vx4 vx5 vx6 vx7 vx8 vx9 vx10}
\begin{center}
\def\nFrames{250}% 250 images
\begin{animateinline}[controls,
begin={\begin{pspicture}(-7,-10)(7,10)},
end={\end{pspicture}}]{10}% 10 images/s
\setrandim{\MXi}{-3pt}{3pt}%
\setrandim{\MXii}{-3pt}{3pt}%
\setrandim{\MXiii}{-3pt}{3pt}%
\setrandim{\MXiiii}{-3pt}{3pt}%
\setrandim{\MXiiiii}{-3pt}{3pt}%
\setrandim{\MXiiiiii}{-3pt}{3pt}%
\setrandim{\MXiiiiiii}{-3pt}{3pt}%
\setrandim{\MXiiiiiiii}{-3pt}{3pt}%
\setrandim{\MXiiiiiiiii}{-3pt}{3pt}%
\setrandim{\MXiiiiiiiiii}{-3pt}{3pt}%
\pstVerb{/x1 \pointless\MXi\space def
/vx1 0 def
/x2 \pointless\MXii\space def
/vx2 0 def
/x3 \pointless\MXiii\space def
/vx3 0 def
/x4 \pointless\MXiiii\space def
/vx4 0 def
/x5 \pointless\MXiiiii\space def
/vx5 0 def
/x6 \pointless\MXiiiiii\space def
/vx6 0 def
/x7 \pointless\MXiiiiiii\space def
/vx7 0 def
/x8 \pointless\MXiiiiiiii\space def
/vx8 0 def
/x9 \pointless\MXiiiiiiii\space def
/vx9 0 def
/x10 \pointless\MXiiiiiiiii\space def
/vx10 0 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)
\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=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX1 \i\space get 9)(!posX2 \i\space get 7)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX2 \i\space get 7)(!posX3 \i\space get 5)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX3 \i\space get 5)(!posX4 \i\space get 3)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX4 \i\space get 3)(!posX5 \i\space get 1)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=cyan]{*-*}(!posX5 \i\space get 1)(!posX6 \i\space get -1)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX6 \i\space get -1)(!posX7 \i\space get -3)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX7 \i\space get -3)(!posX8 \i\space get -5)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX8 \i\space get -5)(!posX9 \i\space get -7)
\psRessort[N=20,li=0.5,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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Voici maintenant le listing pour obtenir les images du gif :
\documentclass{article}
\usepackage[paperwidth=14cm,paperheight=20cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
\input{random.tex} % From Donald Arseneau (on macros/generic on CTAN)
\title{10 oscillateurs parallèles couplés par des ressorts}
% on introduit une force de frottement -f*vx
\date{15 juin 2016}
\author{Manuel Luque}
% manuel.luque27@gmail.com
\pagestyle{empty}
\newdimen\MXi\newdimen\MXii\newdimen\MXiii\newdimen\MXiiii\newdimen\MXiiiii
\newdimen\MXiiiiii\newdimen\MXiiiiiii\newdimen\MXiiiiiiii\newdimen\MXiiiiiiiii\newdimen\MXiiiiiiiiii
\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)}}
% 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]| %
km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))-cf*x[10]|%
-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))-cf*x[11]|%
-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))-cf*x[12]|%
-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))-cf*x[13]|%
-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))-cf*x[14]|%
-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))-cf*x[15]|%
-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))-cf*x[16]|%
-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))-cf*x[17]|%
-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))-cf*x[18]|%
-km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2))-cf*x[19]}%
\def\initCond{x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 vx1 vx2 vx3 vx4 vx5 vx6 vx7 vx8 vx9 vx10}
%% Enregistrement des données
%% décommentez les lignes marquées commençant par un seul %
%% lignes à supprimer par la suite
%\begin{pspicture}(-7,-10)(7,10)
%\setrandim{\MXi}{-3pt}{3pt}%
%\setrandim{\MXii}{-3pt}{3pt}%
%\setrandim{\MXiii}{-3pt}{3pt}%
%\setrandim{\MXiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiiiii}{-3pt}{3pt}%
%\pstVerb{/x1 \pointless\MXi\space def
% /vx1 0 def
% /x2 \pointless\MXii\space def
% /vx2 0 def
% /x3 \pointless\MXiii\space def
% /vx3 0 def
% /x4 \pointless\MXiiii\space def
% /vx4 0 def
% /x5 \pointless\MXiiiii\space def
% /vx5 0 def
% /x6 \pointless\MXiiiiii\space def
% /vx6 0 def
% /x7 \pointless\MXiiiiiii\space def
% /vx7 0 def
% /x8 \pointless\MXiiiiiiii\space def
% /vx8 0 def
% /x9 \pointless\MXiiiiiiii\space def
% /vx9 0 def
% /x10 \pointless\MXiiiiiiiii\space def
% /vx10 0 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,saveData=true]{10mobiles0123456789f}{0 1 2 3 4 5 6 7 8 9}{0}{10}{250}{\initCond}{\DixOscillateurs}
%\end{pspicture}
%\end{document}
\begin{center}
\def\nFrames{250}% 250 images
\multido{\i=0+1}{\nFrames}{
\begin{pspicture}(-7,-10)(7,10)
% lignes inutiles si vous avez enregistré les données
%\setrandim{\MXi}{-3pt}{3pt}%
%\setrandim{\MXii}{-3pt}{3pt}%
%\setrandim{\MXiii}{-3pt}{3pt}%
%\setrandim{\MXiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiiii}{-3pt}{3pt}%
%\setrandim{\MXiiiiiiiiii}{-3pt}{3pt}%
%\pstVerb{/x1 \pointless\MXi\space def
% /vx1 0 def
% /x2 \pointless\MXii\space def
% /vx2 0 def
% /x3 \pointless\MXiii\space def
% /vx3 0 def
% /x4 \pointless\MXiiii\space def
% /vx4 0 def
% /x5 \pointless\MXiiiii\space def
% /vx5 0 def
% /x6 \pointless\MXiiiiii\space def
% /vx6 0 def
% /x7 \pointless\MXiiiiiii\space def
% /vx7 0 def
% /x8 \pointless\MXiiiiiiii\space def
% /vx8 0 def
% /x9 \pointless\MXiiiiiiii\space def
% /vx9 0 def
% /x10 \pointless\MXiiiiiiiii\space def
% /vx10 0 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,saveData=true]{10mobiles0123456789f}{0 1 2 3 4 5 6 7 8 9}{0}{10}{250}{\initCond}{\DixOscillateurs}
\pstVerb{
/DATAS [(10mobiles0123456789f.dat) run] def
/posX1 [0 10 DATAS length 10 sub {/i exch def
DATAS i get} for
]def
/posX2 [0 10 DATAS length 10 sub {/i exch def
DATAS i 1 add get} for
]def
/posX3 [0 10 DATAS length 10 sub {/i exch def
DATAS i 2 add get} for
]def
/posX4 [0 10 DATAS length 10 sub {/i exch def
DATAS i 3 add get} for
]def
/posX5 [0 10 DATAS length 10 sub {/i exch def
DATAS i 4 add get} for
]def
/posX6 [0 10 DATAS length 10 sub {/i exch def
DATAS i 5 add get} for
]def
/posX7 [0 10 DATAS length 10 sub {/i exch def
DATAS i 6 add get} for
]def
/posX8 [0 10 DATAS length 10 sub {/i exch def
DATAS i 7 add get} for
]def
/posX9 [0 10 DATAS length 10 sub {/i exch def
DATAS i 8 add get} for
]def
/posX10 [0 10 DATAS length 10 sub {/i exch def
DATAS i 9 add get} for
]def
}%
\psframe*[linecolor=cyan!20](-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=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX1 \i\space get 9)(!posX2 \i\space get 7)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX2 \i\space get 7)(!posX3 \i\space get 5)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX3 \i\space get 5)(!posX4 \i\space get 3)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX4 \i\space get 3)(!posX5 \i\space get 1)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=cyan]{*-*}(!posX5 \i\space get 1)(!posX6 \i\space get -1)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=magenta]{*-*}(!posX6 \i\space get -1)(!posX7 \i\space get -3)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=green]{*-*}(!posX7 \i\space get -3)(!posX8 \i\space get -5)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=red]{*-*}(!posX8 \i\space get -5)(!posX9 \i\space get -7)
\psRessort[N=20,li=0.5,R=0.15,alpha=20,dl=0.4,linecolor=blue]{*-*}(!posX9 \i\space get -7)(!posX10 \i\space get -9)
\multido{\I=-8+2,\iR=9+-1}{9}{\rput(-6,\I){(\iR)}}
\end{pspicture}\newpage}
\end{center}
\end{document}