Champ électrique:
$$ \mathbf{E}(\mathbf{x}) = \frac{q \hat{\mathbf r}}{4 \pi \epsilon_0 r^2}$$Pour une charge, $q_i$ à une position $\mathbf{x}_{q_i}$:
$$ \mathbf{E}(\mathbf{x}) = \frac{q}{4 \pi \epsilon_0}\frac{\mathbf x - \mathbf x_{q_i}}{|\mathbf x - \mathbf x_{q_i}|^3} $$Pour un ensemble de $N$ charges, le champ total:
$$ \mathbf{E}(\mathbf{x}) = \sum_{i=1}^N \frac{q}{4 \pi \epsilon_0}\frac{\mathbf x - \mathbf x_{q_i}}{|\mathbf x - \mathbf x_{q_i}|^3} $$Pour fin d'illustration, plaçons quelques charges dans l'espace et calculons les lignes de champs
In [1]:
%pylab inline
import numpy as np
import matplotlib.pyplot as plt
def defineE(x,y,locx,locy,c=1.):
""" Defini des valeurs de champ electrique pour une charge de magnitude 'c' positionne a (locx,locy)
Les composantes x et y du champ seront definies pour chacune des position dans (x,y)
Base sur la loi de Coulomb"""
mag = np.sqrt( (x - locx)**2 + (y - locy)**2 )
return c*( (x-locx)/mag**3 ), c*( (y-locy)/mag**3 )
def showVectField(charges=[(0.,0.,1.)],title="Sans titre",saveName=''):
""" Calcul et affiche le champ vectoriel d'un ensemble de charges places dans l'espace
'charge' est un array de tuple contenant la position x,y et la charge: e.g. charges = [(x1,y1,c1),(x2,y2,c2), ...]"""
# Definissons le 'monde'
Y, X = np.mgrid[-1:1:200j, -1:1:200j]
# un nombre complexe comme longeur de pas determine un nombre de bin au lieu d'une longueur de pas
U = np.zeros(X.shape)
V = np.zeros(Y.shape)
for c in charges:
I, J = defineE(X,Y,c[0],c[1],c[2])
# Selon le principe de superposition
U += I
V += J
P = (U**2 + V**2) # magnitude du champ
# Construisons la figure
fig = plt.figure(figsize=(8,6))
g = plt.streamplot(X, Y, U, V, color=np.log(P), density=0.9 ,linewidth=2, cmap=plt.cm.spectral, arrowsize=2.)
ax = plt.gca() # get current axis
for c in charges:
ax.add_patch(plt.Circle((c[0], c[1]), radius=0.1, color='k',zorder=20))
ax.set_aspect('equal')
plt.colorbar()
plt.title(title)
if saveName is not '':
f = plt.savefig(saveName)
plt.show()
In [2]:
showVectField([(0.,0.,1.)],'Une charge + a l\'origine')
showVectField([(0.,0.,-1.)],'Une charge - a l\'origine')
In [3]:
showVectField([(0.5,0.,1.),(-0.5,0.,1.)],'Deux charges de meme signe')
showVectField([(0.5,0.,1.),(-0.5,0.,-1.)],'Deux charges de signe oppose')
showVectField([(0.5,0.,1.),(-0.5,0.,-5.)],'Deux charges de signe oppose et de magnitude differente')
In [4]:
showVectField([(0.5,0.,1.),(0.,0.5,1.),(0.,-0.5,1.),(-0.5,0.,-1.)],'Quatres charges')
In [ ]: