Un dipôle est constitué d’une charge au point de coordonnées et d’une charge au point de coordonnées , avec . On souhaite calculer numériquement le potentiel puis le champ électriques créés par le dipôle dans tout l’espace, et les représenter.
1/ Justifier qu’il suffit de connaitre le potentiel et le champ électriques dans le plan pour les connaitre dans tout l’espace.
La distribution de charges est invariante par toute rotation autour de l’axe , qui porte les deux charges.
Le plan contient les deux charges : c’est un plan de symétrie de la distribution, donc en tout point de ce plan, est contenu dans le plan. Il suffit de calculer ses composantes et .
2/ En utilisant l’expression connue du potentiel créé par une charge ponctuelle, exprimer le potentiel créé par le dipôle en un point du plan , en fonction de , , , et . On prend le potentiel nul à l’infini.
Une charge ponctuelle crée à la distance le potentiel . D’après le théorème de superposition :
3/ Compléter la fonction potentiel(x, y), qui renvoie le potentiel créé par le dipôle au point du plan .
import numpy as np
import matplotlib.pyplot as plt
epsilon_0 = 8.85e-12 # permittivité du vide en F/m
q = 1e-9 # charge en C
a = 1e-2 # distance entre les charges en m
def potentiel(x, y):
"""Potentiel créé par le dipôle au point (x, y) du plan (Oxy)."""
d = ... # distance AM
d_prime = ... # distance A'M
return ...np.sqrt(...) et le carré **2.def potentiel(x, y):
d = np.sqrt((x - a / 2)**2 + y**2)
d_prime = np.sqrt((x + a / 2)**2 + y**2)
return q / (4 * np.pi * epsilon_0) * (1 / d - 1 / d_prime)Pour représenter le potentiel, on le calcule aux points d’une grille du plan . X, Y = np.meshgrid(x, y) construit cette grille à partir des tableaux x et y des abscisses et des ordonnées : X et Y sont deux tableaux à deux dimensions qui contiennent les coordonnées de tous les points de la grille. Les opérations de numpy s’appliquent aussi bien à des nombres qu’à des tableaux : potentiel(X, Y) renvoie directement le tableau des potentiels aux points de la grille.
La fonction plt.contour(X, Y, V, levels=...) trace les lignes de niveau du tableau V, c’est-à-dire ici les équipotentielles, pour les valeurs données par levels.
4/ Compléter le programme ci-dessous pour tracer les équipotentielles dans le plan . Quelle équipotentielle sépare les deux charges ? Justifier sa valeur à l’aide de l’expression de .
x = np.linspace(-2 * a, 2 * a, 300)
X, Y = np.meshgrid(x, x) # grille de 300 × 300 points
V = ... # potentiel aux points de la grille
# équipotentielles de -1000 V à 1000 V, tous les 100 V ; coordonnées en mm
plt.contour(X * 1e3, Y * 1e3, V, levels=np.linspace(-1000, 1000, 21), cmap='coolwarm')
plt.colorbar(label="V (V)")
plt.xlabel("x (mm)")
plt.ylabel("y (mm)")
plt.axis('scaled')
plt.show()potentiel accepte des tableaux.V = potentiel(X, Y)Les équipotentielles entourent les charges : le potentiel est positif autour de (charge ) et négatif autour de (charge ). Le plan sépare les deux charges : c’est l’équipotentielle . En effet, tout point de ce plan est à égale distance des deux charges : , donc .
Pour calculer le champ , on approxime les dérivées partielles du potentiel par des différences finies, avec un pas très petit devant .
5/ À l’aide de développements de Taylor de et , établir l’approximation
Donner l’approximation analogue de .
La formule de Taylor à l’ordre 2 donne
En soustrayant ces deux relations, , d’où l’approximation demandée en divisant par . De même :
6/ Compléter la fonction champ(x, y), qui renvoie les composantes du champ électrique au point du plan . Calculer numériquement le champ en et le comparer à celui qu’on obtient en superposant les champs créés par les deux charges.
h = 1e-6 # pas de dérivation en m, très petit devant a
def champ(x, y):
"""Composantes (Ex, Ey) du champ électrique au point (x, y) du plan (Oxy)."""
Ex = ...
Ey = ...
return Ex, Ey
print(champ(0, 0))potentiel peut être appelée en n’importe quel point, par exemple potentiel(x + h, y).def champ(x, y):
Ex = - (potentiel(x + h, y) - potentiel(x - h, y)) / (2 * h)
Ey = - (potentiel(x, y + h) - potentiel(x, y - h)) / (2 * h)
return Ex, EyLe programme affiche et .
En , la charge placée en crée un champ dirigé de vers , selon , et la charge placée en un champ dirigé de vers , lui aussi selon . Les deux ont la même norme, donc
Le calcul numérique redonne bien ce résultat.
La fonction plt.streamplot(X, Y, Ex, Ey) trace les lignes de champ d’un champ de vecteurs plan dont on connait les composantes Ex et Ey aux points de la grille X, Y.
7/ Compléter le programme ci-dessous pour superposer les lignes de champ aux équipotentielles. D’où partent et où aboutissent les lignes de champ ? Comment sont-elles disposées par rapport aux équipotentielles ? Vers où pointe le champ ?
Ex, Ey = ... # champ aux points de la grille
plt.contour(X * 1e3, Y * 1e3, V, levels=np.linspace(-1000, 1000, 21), cmap='coolwarm')
plt.streamplot(X * 1e3, Y * 1e3, Ex, Ey)
plt.xlabel("x (mm)")
plt.ylabel("y (mm)")
plt.axis('scaled')
plt.show()potentiel, la fonction champ accepte des tableaux.Ex, Ey = champ(X, Y)Les lignes de champ partent de la charge positive , en , et aboutissent à la charge négative , en . Elles sont orthogonales aux équipotentielles, et le champ pointe vers les potentiels décroissants. Il est plus intense là où les équipotentielles sont resserrées, au voisinage des charges et entre elles.