Table des matières PDFMathematica

Chaîne d'oscillateurs linéaires en boucle

1. Équations du mouvement

La chaîne d'oscillateurs est constituée de N points de masse m reliés par des ressorts identiques, de raideur a. Le déplacement du point k=1..N par rapport à sa position d'équilibre est noté qk.

Pour un point autre que les bords (1<k<N), l'équation du mouvement est :

avec :

Le cas des bords fixes est traîté dans la Chaîne d'oscillateurs linéaires à bords fixes. On s'intéresse ici à une chaîne en boucle : la dernière masse est reliée à la première. Autrement dit, les conditions limites sont de type périodique. Les équations du mouvement de la première et de la dernière masse sont :

Si on note q le vecteur colonne des déplacements, le système différentiel (équations 1, 3 et 4) s'écrit :

V est une matrice carrée (symétrique) définie par :

On définit les moments pk comme les dérivées par rapport au temps des déplacements qk. L'hamiltonien du système (énergie par unité de masse) s'écrit :

Les équations du mouvement s'écrivent :

2. Approximation des milieux continus

Soit d la distance à l'équilibre entre deux points voisins. La longueur de la chaîne est L=Nd. L'approximation des milieux continus, valable pour N grand sur une échelle grande devant d, consiste à définir le déplacement des masses par une fonction continue u(x). L'équation (1) correspond à la discrétisation de l'équation différentielle suivante :

Il s'agit de l'équation des ondes (milieu non dispersif), avec une célérité :

Les conditions aux limites périodiques s'écrivent :

Les modes propres du problème continu sont les solutions de la forme :

Les solutions sont :

avec :

Les modes propres sont donc des ondes progressives. La condition limite périodique impose :

m est un entier non nul. Les indices m positifs correspondent à une propagation dans le sens de x croissant.

On en déduit aussi les pulsations propres (par convention positives) :

On remarque que la quantification des pulsations propres provient de la taille finie de la chaîne. Pour un milieu infini (N infini), toutes les pulsations sont possibles.

3. Modes propres

Les modes propres sont les solutions de l'équation (5) de la forme :

a est un vecteur colonne à N éléments. Dans un mode propre, tous les points de la chaîne oscillent à la même pulsation.

En reportant dans l'équation différentielle, on obtient :

avec :

Il s'agit donc de déterminer les valeurs propres et les vecteurs propres de la matrice V. Celle-ci est réelle et symétrique; ses valeurs propres sont donc réelles et ses vecteurs propres sont orthogonaux.

Par analogie avec le problème continu traité ci-dessus, on recherche les vecteurs propres sous la forme :

En reportant cette solution supposée dans (22), on obtient :

Le vecteur propre cherché convient avec :

m est un entier compris entre 1 et N. Les valeurs propres sont donc :

On remarque que :

Les valeurs propres sont donc dégénérées (sauf une ou deux). En se référant au cas continu, on s'attend en effet à obtenir deux sens de propagation opposés pour la même valeur propre. À la valeur propre d'indice m correspondent les deux vecteurs propres suivants :

Si N est impair, les valeurs propres et vecteurs propres sont :

Si N est pair :

On obtient bien N vecteurs propres linéairement indépendants et la matrice V est diagonalisable (on le savait dès le départ puisqu'elle est symétrique et réelle).

Les vecteurs propres sont orthogonaux. Pour avoir des vecteurs propres normés, il faut multiplier les expressions ci-dessus par . On notera ak,m la composante k du vecteur propre d'indice m. On a alors :

Pour finir, les pulsations propres sont :

On retrouve les pulsations propres du modèle continu lorsque N est grand et m petit devant N.

La pulsation propre exprimée en fonction du nombre d'onde Km :

On constate sur cette expression que la chaîne d'oscillateurs est un milieu dispersif (contrairement au modèle continu), surtout lorsque m est proche de N.

4. Coordonnées normales

4.a. Définition

La matrice V a N valeurs propres distincts; elle est donc diagonalisable. Soit A=(ak,m) la matrice carrée dont la colonne m correspond au vecteur propre d'indice m. Cette matrice est unitaire donc son inverse est égale à son adjointe (transposée conjuguée) :

Remarque : pour ce problème particulier la matrice A est symétrique.

Le passage des coordonnées normales aux déplacements est défini par la transformation :

Inversement, les coordonnées normales sont obtenues à partir des déplacements par :

En dérivant par rapport au temps, on obtient :

La matrice A diagonalise V, c'est-à-dire :

Λ est la matrice diagonale formée des valeurs propres.

Exprimons les équations du mouvement avec les coordonnées normales :

On obtient avec ces coordonnées N équations différentielles indépendantes :

dont la solution générale est (mode propre d'indice m) :

Finalement, la solution générale exprimée avec les déplacements est :

Comme précisée plus haut, certains termes de cette somme (valeurs propres dégénérées) ont la même pulsation (m et N-m) mais ont des sens de propagation opposés. Si on souhaite se limiter aux ondes se propageant dans le sens de k croissant, il suffit d'arrêter la somme à N/2. Le terme m=N a une pulsation nulle et un vecteur propre ak=1 : il s'agit donc d'une constante, qui pourra généralement être ignorée.

Lorsque N est pair, le terme m=N/2 de pulsation 0 correspond au vecteur propre ak=(-1)k.

4.b. Énergie

Exprimons l'hamiltonien en fonction des coordonnées normales :

L'énergie du mode m est donc :

Chaque coordonnée normale ξm est un oscillateur harmonique dont l'énergie Em se conserve.

4.c. Transformée de Fourier discrète

Au cours d'un calcul numérique, on peut être amené à calculer les coordonnées normales en fonction des déplacements (ou l'inverse). La transformation s'écrit :

Cette transformation ressemble à la transformée de Fourier discrète (TFD), qui est définie par :

On remarque que le terme m=1 de la TFD correspond à une fréquence nulle, rôle joué par m=N dans la transformation (58). D'autre part, le terme k=1 dans la TFD est analogue au terme k=N dans (58).

Pour calculer (58) avec une fonction FFT , il faut donc effectuer tout d'abord la permutation suivante sur l'ordre des échantillons :

Après calcul de la TFD, on effectue la permutation :

ce qui donne (à une constante multiplicative près), les coordonnées normales.

Remarque : les déplacements qk et les coordonnées normales ξm sont complexes. Le déplacement réel est la partie réelle de qk. Cependant, la partie réelle des coordonnées normales n'est pas une grandeur pertinente.

Le passage des coordonnées normales aux déplacements s'écrit :

Pour effectuer ce calcul, on utilise la même procédure de permutation que ci-dessus puis on applique la TFD inverse.

5. Exemple

L'exemple suivant (Mathematica) montre comment calculer les déplacements à partir des coordonnées normales.

La fonction suivante calcule les pulsations propres :

omega[n_,m_]:=4*Pi*Sin[Pi*m/n];

La solution est définie par la liste des constantes Cm. La fonction suivnate génère les coordonnées normales :

xi[c_,t_]:=Module[{m},
            n=Length[c];
            Return[Table[c[[m]]*Exp[-I*omega[n,m]*t],{m,n}]];
]            
            

La fonction suivante calcule les déplacements par TFD en effectuant les permutations nécessaires :

p[c_,t_]:=Module[{x,p},
            x=xi[c,t];
            n=Length[x];
            x=Join[{x[[n]]},Take[x,{1,n-1}]];
            p=Fourier[x,FourierParameters->{-1,1}]*Sqrt[n];
            p=Join[Take[p,{2,n}],{p[[1]]}];
            Return[p];
]
            

Voyons par exemple une chaîne de 21 points avec une onde progressive. La liste de constantes comporte trois sous-listes : les modes progressifs positifs, les modes progressifs négatifs, et la constante.

c=Join[{1,0.3,0.5,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0}];
n=Length[c];
w1=omega[n,1];
T1=2*Pi/w1;
            
ListPlot[{Re[p[c,0]],Re[p[c,T1*0.1]],Re[p[c,T1*0.2]]},Joined->True,AxesLabel->{"k","pk"}]
plot1.pngplot1.pdf

Le même onde se propageant en sens inverse :

c=Join[{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0.5,0.3,1},{0}];
ListPlot[{Re[p[c,0]],Re[p[c,T1*0.1]],Re[p[c,T1*0.2]]},Joined->True,AxesLabel->{"k","pk"}]
plot2.pngplot2.pdf
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.