En physique, il arrive souvent que l'on veuille représenter la distribution d'un champ vectoriel ; le champ d'écoulement en dynamique des fluides ou le champ magnétique créé par un circuit électrique en sont des exemples. La ligne de champ est un concept intéressant à ce titre. Ce tutoriel explique comment tracer numériquement ces lignes de champs connaissant l'expression du champ en chaque point de l'espace.
Concept de ligne de champ
Pour simplifier notre propos on se restreint à l'étude d'un champ bidimensionnel, l'extension à trois dimensions étant évidente. On étudie un champ vectoriel \(\overrightarrow{V}(\text{M})\) dont on connaît l'expression en coordonnées cartésiennes par exemple.Définition
Ligne de champ
Une ligne de champ est une courbe orientée telle qu'en chaque point M de la courbe, la tangente à la courbe a la même direction et le même sens que le vecteur \(\overrightarrow{V}(\text{M})\) en ce point.
Champ normalisé
Une ligne de champ ne donne aucune information sur la distribution de . En effet, si l'on multiplie le champ par n'importe quel nombre non nul, on change son intensité mais l'on ne modifie pas la ligne de champ. Mathématiquement cela est évident puisque la pente d'une ligne de champ du vecteur \(\overrightarrow{V}\) en un point M est donnée par \[ \frac{\mathrm{d}y}{\mathrm{d}x}=\frac{V_y(\text{M})}{V_x(\text{M})} \] pente qui ne change pas si l'on multiplie \(V_x\) et \(V_y\) par le même facteur non nul.
Cette propriété est intéressante car cela signifie que l'on peut remplacer le champ étudié par le champ normalisé \[ \overrightarrow{U}=\frac{\overrightarrow{V}}{\left\|\overrightarrow{V}\right\|} \] sans que cela ne modifie la structure des lignes de champs.
Mais pourquoi étudier le champ normalisé, me direz-vous ?
- D'une part, il est toujours avantageux de manipuler des nombres de l'ordre de l'unité, cela évite de produire des erreurs d'arrondi[1].
- D'autre part, les composantes du champ normalisé donnent immédiatement la direction du champ puisque \[ U_x=\cos\theta \quad\text{et}\quad U_y=\sin\theta \] où \(\theta\) désigne l'angle que fait le vecteur \(\overrightarrow{U}\) par rapport à l'axe des abscisses.
Aussi on a toujours intérêt à simplifier l'expression du champ vectoriel et l'utilisation du champ normalisé est pratique. Voyons cela.
Approche numérique
Méthode simple
Le plus naturel consiste à partir d'un point, que nous noterons M0 puis à avancer le long de la ligne de champ par petit pas de longueur \(h\). Si l'on note \(\theta_0\) l'angle que fait le champ vectoriel en M0, on avancera de \(h\cos\theta_0\) suivant l'axe des abscisses et de \(h\sin\theta_0\) suivant l'axe des ordonnées. Nous voilà arrivé en M1 ! Une fois ce déplacement effectué, on recalcule la valeur du champ en M1, et l'on réitère l'opération jusqu'à ce que l'on décide d'arrêter de tracer.
Algorithme 1
- Initialisation du point de départ : x = x0 et y = y0.
- Initialisation du pas h.
- Définition des composantes du champ vectoriel normalisé Ux(x,y) et Uy(x,y).
- Définition de la fonction TEST(x,y) qui renvoie la valeur VRAIE tant que l'on veut continuer de tracer la ligne de champ. Par exemple on peut décider d'arrêter le tracé quand le champ V(x,y) (le champ non normalisé) sort de l'intervalle [10-3, 103].
- Tant que TEST(x,y)=VRAIE faire
- Tracer un segment entre (x,y) et (x+h Ux(x,y),y+h Uy(x,y))
- x=x+h Ux(x,y)
- y=y+h Uy(x,y)
La simulation ci-dessous illustre cette méthode sur un champ vectoriel dont on connaît l'expression analytique des . En cliquant on fait apparaître une ligne de champ calculée à partir de l'algorithme 1 pour un pas de 20 pixels.
Version améliorée
Comme on peut le voir sur la simulation précédente, la méthode n'est pas très précise si le pas est trop grand. L'algorithme 1 est en réalité ni plus ni moins que la méthode d'Euler appliquée au tracé des lignes de champ ; il présente donc les mêmes défauts[2]. Si l'on veut conserver cette méthode il faut alors diminuer le pas avec l'inconvénient d'augmenter le temps de calcul.
Il y a une autre solution : employer une méthode de discrétisation plus fiable. En effet, la méthode précédente est peu précise, car lorsque l'on déplace le point M de M0 vers M1, la valeur de l'angle du champ vectoriel n'est pas le même suivant qu'on se place en M0 ou en M1. Si l'on veut que le segment tracé soit tangent au champ vectoriel, il serait préférable de calculer cet angle au milieu du segment, entre M0 et M1. C'est le principe de l'algorithme 2.
Algorithme 2
- Initialisation du point de départ : x = x0 et y = y0.
- Initialisation du pas h.
- Définition des composantes du champ vectoriel unitaire Ux(x,y) et Uy(x,y).
- Définition de la fonction TEST(x,y) qui renvoie la valeur VRAIE tant que l'on veut continuer de tracer la ligne de champ.
- Tant que TEST(x,y)=VRAIE faire
- k = Ux(x,y)
- l = Uy(x,y)
- m = Ux(x+hk/2,y+hl/2)
- n = Uy(x+hk/2,y+hl/2)
- Tracer un segment entre (x,y) et (x+h m,y+h n)
- x=x+h m
- y=y+h n
Cette méthode est en fait une méthode de Runge-Kutta d'ordre deux appliquée au tracé des lignes de champ. Comme on peut le voir sur la simulation ci dessous, elle est beaucoup plus précise que la première.
Voilà, vous savez maintenant comment tracer une ligne de champ ! La bonne nouvelle c'est que cela permet également de tracer des courbes de niveau[3]...
Pour en savoir plus...
- Les erreurs numériques[en ligne], 2016. Disponible sur femto-physique.fr
- La méthode d'Euler[en ligne], 2015. Disponible sur femto-physique.fr
- Comment tracer une courbe de niveau ?[en ligne], 2016. Disponible sur femto-physique.fr