Lignes de champs électrique

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()


Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.

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 [ ]: