BotafogoReprésentation d’un champ vectoriel (en 2D)
Champ vectoriel et potentiel scalaire
En physique, certaines grandeurs sont décrites par des champs vectoriels. Ainsi, le champ électrique E est une grandeur vectorielle dont les composantes varient selon le point de l’espace considéré : E=Ex(x,y,z)Ey(x,y,z)Ez(x,y,z).De plus, certains de ces champs vectoriels “dérivent d’un potentiel”, c’est-à-dire d’un champ scalaire. Dans le cas de E, ce champ scalaire est le potentiel électrique ϕ=f(x,y,z). Plus précisément,
E=−∇ϕ=−∂ϕ/∂x∂ϕ/∂y∂ϕ/∂z,où ∇ϕ est appelé le gradient de ϕ et où ∂/∂x, ∂/∂y et ∂/∂z sont des dérivées partielles.
La fonction quiver
Le gradient d’un champ scalaire en un point est un vecteur pointant dans la direction où le champ augmente le plus (direction de “plus grande pente”). Il est donc perpendiculaire à la courbe de niveau qui passe par ce point. Ainsi, le champ électrique est toujours orthogonal aux courbes sur lesquels le potentiel est le même (équipotentielles). Nous allons l’illustrer en deux dimensions à l’aide de la fonction scalaire : Ψ(x,y)=x2+y21 dont nous allons représenter des courbes de niveaux accompagnées de vecteurs gradients. Pour ce faire, nous utilisons la fonction np.gradient qui retourne le gradient d’un champ donné comme un tableau à N dimensions, ainsi que la fonction ax.quiver qui permet de représenter un champ bidimensionnel de flèches.
import numpy as np
x = y = np.linspace(-4.,4.,41)
xv, yv = np.meshgrid(x,y,indexing='ij')
Psiv = 1/(np.sqrt(xv**2 + yv**2))
#
x2 = np.linspace(-4.,4.,7)
y2 = np.linspace(-4.,4.,7)
x2v, y2v = np.meshgrid(x2,y2,indexing='ij')
Psi2v = 1/(np.sqrt(x2v**2 + y2v**2))
dPsidx, dPsidy = np.gradient(Psi2v)
#
import matplotlib.pyplot as plt
fig = plt.figure(1)
ax = fig.gca()
niveaux = [0.25, 0.5, 0.75, 1.0, 1.25, 1.5]
cs = ax.contour(xv,yv,Psiv,levels=niveaux)
plt.clabel(cs, inline=True, fontsize=9)
ax.quiver(x2v,y2v,dPsidx,dPsidy, color='r')
plt.axis('equal')
plt.show()

La fonction streamplot
Matplotlib permet également de représenter un champ vectoriel sous la forme de lignes de champ. Ces lignes sont tangentes, en tout point, à la direction des vecteurs et permettent d’aisément visualiser l’allure du champ. En revanche, elles ne fournissent pas d’information sur l’intensité du champ, sauf si leurs couleurs, leurs épaisseurs ou leur densité sont significatives. La fonction streamplot demande : - une grille de points également espacés (c’est-à-dire deux tableaux à 1D
xety); - deux tableaux 2D fournissant les composantes des vecteurs du champ en chaque point de la grille.
density contrôle l’espacement des lignes du champ. La couleur des lignes (gérée par le paramètre color qui doit alors être un tableau) permet quant à elle de visualiser la longueur (norme) des vecteurs du champ. import numpy as np
x = np.linspace(-4.,4.,101)
y = np.linspace(-4.,4.,101)
xv, yv = np.meshgrid(x,y,indexing='ij')
Psiv = 1/(np.sqrt(xv**2 + yv**2))
dPsidx, dPsidy = np.gradient(Psiv)
import matplotlib.pyplot as plt
fig = plt.figure(1)
ax = fig.gca()
t_couleurs = 36*np.log(dPsidx**2+dPsidy**2) # tableau des couleurs
ax.streamplot(x, y, dPsidy, dPsidx, color = t_couleurs,linewidth=1,cmap = plt.cm.plasma, density = 2,arrowstyle = '->', arrowsize = 1.5)
ax.set_title("Lignes de champ du gradient de $\Psi$")
plt.axis('scaled')
plt.show()

Polycopié rédigé par Roger Sauser, CMS. Sauf indication contraire, le contenu de ce document est soumis à une licence Creative Commons internationale, Attribution - Utilisation non commerciale - Partage dans les mêmes conditions 4.0 International (CC BY-NC-SA 4.0).
© 2026 Projet Botafogo. En savoir plus.