Simulation sous MatLab d`une collision classique d`un ion positif

publicité
UNIVERSITE DE RENNES 1
U.F.R. S.P.M.
Campus de Beaulieu
Licence de Physique
Rapport de stage mai­juin 2008
Simulation sous MatLab d'une collision classique d'un ion positif soumis à un champ de potentiel et à un champ magnétique Par SUHARD Jérôme
Organisme d'accueil : Nom du responsable : Equipe SIMPA Launay Jean­Michel
Institut de Physique de Rennes (IPR) 02­23­23­56­63
Université de Rennes 1 Jean­Michel.Launay@univ­rennes1.fr
Campus de Beaulieu ­ Bat 11B
35042 Rennes Cedex – France
http://www.ipr.univ­rennes1.fr/SIMPA/
Avant toute chose, je tenais à remercier toute l'équipe SIMPA ainsi que les 2 stagiaires présent en même temps que moi pour leur amabilité et leur professionnalisme et en particulier à :

Jean Michel LAUNAY, professeur et responsable de l'équipe SIMPA au sein de l'Institut de Physique de Rennes, de m'avoir accueilli dans son équipe et d'avoir su me guider à me poser les vraies questions physiques

Franck THIBAULT, maître de conférence à l'université de Rennes 1, de ses propositions d'améliorations et de ses explications quant au fonctionnement des revues scientifiques

Alexandra VIEL, chargée de recherche à l'Institut de Physique de Rennes, de sa patience à l'égard de mes (nombreuses) questions quant à l'environnement UNIX et au fonctionnement de la publication des recherches
Sommaire
CV .................................................................................................................................4
Lettre de motivation ......................................................................................................5
1. Présentation du laboratoire ......................................................................6
1.1. Activités ............................................................................................................................6
1.2. Equipe ...............................................................................................................................6
1.3. Moyens informatiques .......................................................................................................8
1.4. Publications .......................................................................................................................9
1.5. Collaborations ...................................................................................................................9
2. Travail effectué : Modèle numérique de collision .................................10
2.1. Aspects théoriques du modèle ....................................................................10
2.2. Programmation sous MATLAB ................................................................12
2.2.1. Résolution de α et β pour un puits de potentiel donné ...................................12
2.2.2. Application du Principe Fondamental de la Dynamique sur la particule .........14
2.2.3. Algorithme .......................................................................................................17
2.3. Confrontation du modèle avec la Physique ...............................................18
2.3.1. Champ magnétique seul ...................................................................................18
2.3.2. Potentiel seul ....................................................................................................20
2.3.3. Champ magnétique plus potentiel ....................................................................21
2.3.4. Amélioration de la précision ............................................................................22
3. Conclusions et perspectives ..................................................................27
4. Annexes ................................................................................................29
4.1. Fonction collision ......................................................................................29
4.2. Fonction etape_collision .........................................................................34
4.3. Fonction solve_potentiel ......................................................................... 35
4.4. Fonction potentiel .................................................................................... 36
4.5. Fonction graph_potentiel ..........................................................................38
5. Bibliographie .........................................................................................40
Jérôme SUHARD
23 Cité des Noyers
53250 Javron les Chapelles
06.21.65.31.53
[email protected]­rennes1.fr
21 ans
Expérience professionnelle Du 04/01/2005 au 23/08/2005 et vacances scolaires 2006/2007 : Lyreco , Mayenne Préparateur en fournitures de bureau
Du 03/11/2004 au 17/11/2004 : Immunia (Paris), Mayenne
Manoeuvres sur un chantier d’épuration
Du 18/10/2004 au 27/10/2004 : MPO , Mayenne
Approvisionneur dans une entreprise de conditionnement
Formation
2007/2008 : 3ième année de licence Physique, Rennes
2004 : Bac S spécialité SVT, Mayenne
Compétences techniques
2007 : certificat du C2I ( Certificat Informatique et Internet ), Rennes



bonne connaissance des environnements Windows et Linux codage régulier en PHP, HTML et java script, gestion de base de données
Quelques connaissances serveur Apache ( principalement htaccess )
4
à Jean­Michel Launay <jean­michel.launay@univ­rennes1.fr>
Objet : Stage de Simulation du 28 avril au 21 juin 2008
Monsieur,
Suite à la visite de votre laboratoire plus qu'intéressante, je sollicite auprès de vous un stage de simulation en Physique de 2 mois du 28 avril au 21 juin 2008 dans le cadre de ma 3ème année de licence .
En effet, mes diverses expériences tant professionnelles que personnelles m'ont amené à acquérir des compétences variées comme l'intégration à une équipe, le travail collectif, la rigueur . J'aimerais donc poursuivre ce chemin en y ajoutant mes passions complémentaires que sont la Physique et la Programmation pour enrichir mon parcours professionnel dans votre laboratoire .
Je vous remercie de l'attention que vous porterez a ma demande tout en restant à votre disposition, je vous prie d'agréer,
Monsieur, mes salutations distinguées,
Jérôme SUHARD
23 Cité des Noyers
53250 Javron les Chapelles
06.21.65.31.53
5
1. Présentation du laboratoire
1.1. Activités
L'équipe de Simulation des Interactions entre Molécules, Photons et Atomes ( SIMPA ) de l'Institut de Physique de Rennes ( IPR ) s'intéresse à l'étude théorique et à la simulation numérique de processus élémentaires en Physique Atomique et Moléculaire .
Leurs domaines de recherche concernent la dynamique quantique des réactions moléculaires, les processus atomiques en champs laser intenses et les processus moléculaires à ultra­basse température .
Les applications concernent la physique des plasmas, l'astrophysique, la physico­chimie de l'atmosphère, la spectroscope moléculaire et la physique des condensats de Bose­Einstein .
1.2. Equipe
Personnel permanent : Bourhis Gilles, Ingénieur de recherche
Dunseath Kevin, Chargé de recherche
Dunseath­Terao Mariko, Professeur
Launay Jean­Michel, Professeur
Lebreton Yveline, Astronome
Magnier Sylvie, Professeur
Simoni Andrea, Maître de conférence
Thibault Franck, Maître de conférence
Viel Alexandra, Chargée de recherche
Postdoctorants :
Lara Manuel
Leino Markku
Doctorants :
Zanchet Alexandre
Stagiaires :
Milcent Sylvain, M1 Physique­chimie
Le Cam Cédric, L3 Physique
6
De gauche à droite :
Franck Thibault, Alexandra Viel, Jean­Michel Launay, Gilles Bourhis, Andrea Simoni, Alexandre Zanchet, Manuel Lara, Yveline Lebreton, Markku Leino, Mariko Dunseath­Terao, Kevin Dunseath
7
1.3. Moyens informatiques
Le laboratoire est équipé d'un serveur de calcul appelé « SIMPATIX » ( en mémoire des anciens serveurs appelés Asterix, Obelix etc .. et du nom de l'équipe ) contenant :
 25 noeuds  100 Go de RAM  7 To de stockage sur disque  850 GFlops ( 850 milliards d'opérations à virgule flottante – un entier n'est pas un nombre à virgule flottante – par seconde )  2 PC serveurs LINUX  1 PC serveur Windows  12 terminaux X
Nous nous connectons sur les terminaux X à l'aide d'un compte crée pour la durée du stage qui eux se connectent sur les serveurs LINUX . La puissance et la mémoire ­ tant vive ( RAM ) que disque – est donc partagée entre tous les utilisateurs du laboratoire, il convient donc de les utiliser avec parcimonie .
Arrière du Serveur SIMPATIX
8
1.4. Publications
77 publications entre 2004 et 2007 dans les principales revues :
 European Physical Journal D
 Journal of Molecular Spectroscopy
 Journal of Physics B, Physical Review A
 Physical Review Letters
 Chemical Physics Letters
 Journal of Chemical Physics
 Journal of Physical Chemistry
 Physical Chemistry and Chemical Physics
1.5. Collaborations L'équipe est très tournée vers l'international en accueillant des chercheurs étrangers toute l'année comme le professeur K. Birgitta WHALEY ( de l'université de Berkeley ) durant mon stage .
Elle a collaboré entre autre avec :
 Chine, Department of Physics, Tsinghua University, Beijing (L. Li)  Allemagne, Technical University, Munich (W. Domcke)
 Espagne, Department of Chemical Physics, Universidad Complutense de Madrid (F.J. Aoiz, L. Banares)
 Etats­Unis, Department of Chemistry, University of Berkeley (K.B. Whaley)  Russie, Institute of Physics, University of Saint­Petersbourg (V. B. Sovkov)
Le laboratoire propose actuellement 3 thèses :



Dynamique non­adiabatique de systèmes moléculaires
Collisions ultra­froides dans les réseaux optiques
Etude théorique de l’ionisation multiphotonique d’atomes en champ EUV de laser à électrons libres
9
2. Travail effectué : Modèle numérique de collision
2.1. Aspects théoriques du modèle
L'objectif de ce stage est de simuler une collision dite « classique » entre un ion positif soumis à un champ de potentiel et à un champ magnétique .
Pour ce faire, nous prendrons pour l'ion ( qui sera un proton ) :


sa masse à 1,6524 E­27 kg ( 1836 * me kg)
sa charge à 1,6 E­19 C ( 1 * (+e) C)
Il aura comme conditions initiales :


une vitesse initiale positive variable suivant l'axe y ( de l'ordre du mètre par seconde) , nulle pour les autres
une distance ion – centre du potentiel de 100 Å suivant l'axe des x négatifs, le centre du potentiel étant situé à l'origine
Il sera soumis à :


un champ magnétique de 1 Tesla suivant l'axe des z positifs
un potentiel du type α / r 8 – β / r 4
Ce potentiel aura une « profondeur » D de 1,6 E­19 J à son minimum r0 de 2 Å .
Nous négligerons la force gravitationnelle dans cette simulation, en effet, à l'échelle de ce modèle ( ~100 Å ) , nous avons G∗m²
≈ 10 −48 N
r²
F lorentz = q∗v∗b = 1,6∗10 −19∗1∗1 ≈ 10−19 N
8∗α 4∗β
F potentielle = 9
– 5 ≈ 10 −17 N
r
r
F potentielle ≈ F lorentz ≫ F gravitationnelle
F gravitationnelle =
10
L'élaboration du programme se fera en 3 temps :
1. Force de Lorentz 
F lorentz =q ∗ v ∧ 
b
2. Force potentielle F potentielle = −


dV
8∗α
4∗β
∗ e r =
–
∗ e r
9
dr
r
r5
3. Force de Lorentz et force potentielle
Appliquons le principe fondamental de la dynamique en présence des 2 forces :
m ∗ ̈r = q ∗ ̇
r ∧
b


m ∗ ẍ = q ∗ b ∗ ẏ 
8∗α
r
8∗α
r9
m ∗ ÿ = −q ∗ b ∗ ẋ 
m ∗ z̈ =

8∗α
r
9
–
4∗β
r
5
–
9


–
8∗α
r
9
∗
z
4∗β
r5
4∗β
r5
–


∗ e r
4∗β
r
5
∗

x
 x2 +y2 +z 2
∗
y
 x2 +y 2 +z 2
 x 2 +y 2 +z 2
11
2.2. Programmation sous MATLAB
Version utilisée tout au long de ce stage : 7.0.4.352 (R14) Service Pack 2 tournant sous Linux .
Bien que notre problème est bien défini dès le départ ( masse, charge fixées ; choix du potentiel ..), je m'efforcerais de coder des fonctions les plus générales possibles ( passage en paramètre de la masse, charge, champ magnétique, forme du potentiel..) pour accroître leurs potentiels d'action . En effet, on peux remarquer que d'autres potentiels très utilisés comme le potentiel de Lennard­Jones sont de la même forme que celui étudié :
r012 r0 6
α
β
V  r  = 4V0∗ 12 − 6 = puissancealpha − puissancebeta
r
r
r
r


2.2.1. Résolution de α et β pour un puits de potentiel donné
Connaissant la profondeur du puits D et la distance r0 associée, nous pouvons déterminer α et β .
α
β
V r  = 8 − 4
r
r
dV
8∗α
4∗β
=− 9
 5
dr
r
r
à r = r0 , le potentiel est à son minimum : dV
r=r 0  = 0
dr 
8∗α
4∗β
= 5
9
r0
r0
4
α = r 09 −5 ∗β
8
V r 0  = D =
β=
8D
4r 0
9−5−8 
8
−4
−8r 0 
∗β
4r 09−5 −8  −8r 0−4 
( D est inférieur à 0 Joule et r en mètres )
12
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : SOLVE_POTENTIEL
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 04/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% Solve_potentiel calcule alpha et beta pour un potentiel de type % alpha / r^puissance_alpha ­ beta / r^puissance_beta
% grâce à la distance r où il y a un minimum de potentiel ainsi que cette
% valeur minimum d'énergie rentrées en paramètres
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * distance r qui correspond au potentiel minimum (réel positif) [ m ],
% * profondeur du puit (réel négatif) [ J ],
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sorties : % * [alpha,beta] : renvoie les valeurs de alpha et beta calculées
% ou % * vide : renvoie un graphique représentant le potentiel avec alpha et
% beta calculés
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % solve_potentiel(2E­10,­1.6E­19,8,4)
% [alpha,beta]=solve_potentiel(2E­10,­1.6E­19,8,4)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite la fonction graph_potentiel pour fonctionner en mode graphique
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
( Voir annexe 3 )
>> [alpha,beta]=solve_potentiel(2E­10,­1.6E­19,8,4)
alpha =
4.0960e­97
beta =
5.1200e­58
Grâce à la commande solve_potentiel(2E­10,­1.6E­19,8,4) utilisant la fonction graph_potentiel ( Voir annexe 5 ), nous obtenons : 13
Figure 1 : potentiel en fonction de la distance r séparant la particule du « centre » du potentiel 2.2.2. Application du Principe Fondamental de la Dynamique ( PFD ) sur la particule
m ∗ ẍ = q ∗  ẏ b z −b y ż  
m ∗ ÿ = q ∗  ż b x −b z ẋ  
m ∗ z̈ = q ∗  ẋ b y −b x ẏ  



8∗α
r
9
8∗α
r9
8∗α
r
9
–
–
–
4∗β
r
5
4∗β
r5
4∗β
r
5



∗
∗
∗
x
 x2 +y 2 +z 2
y
 x2 +y 2 +z 2
x
z
2
+y 2 +z 2
Toute équation du n­ième ordre peux se mettre sous la forme de n équations du premier ordre
14
m ∗ ẍ = q ∗  ẏ b z −b y ż  

8∗α
–
4∗β

∗
x
r
r
 x +y 2 +z 2
devient:
du  1 
= u 4 
dt
du  4 
u 1
8∗α 4∗β
= q ∗  u  5  b z −b y u  6   
–
∗
9
5
2
dt
r
r
u  1  +u 2 2 +u 3 2
9

5

2

  
u 4 
x
y
u 5
du
z
avec u =
et
= u 6
ẋ
dt
ẍ
ẏ
ÿ
ż
z̈
Il en est de même pour les équations du second ordre pour y et z . Cette étape est nécessaire pour pouvoir résoudre numériquement ces équations à l'aide de la routine ode45 basée sur la méthode de Runge­Kutta à pas adaptatif .
Ce « PFD à l'instant t » est modélisé par la fonction etape_collision
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : ETAPE_COLLISION
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 05/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% etape_collision simule la position et la vitesse de la
% particule en fonction de la position et vitesse antèrieures
% pour un instant t donné
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * instant t,
% * vecteur collonne y représentant [x; y; z; vx; vy; vz],
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sortie : % * vecteur collonne ypoint représentant les nouvelles positions et vitesses
% après la simulation du PFD sur la particule
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % ypoint=etape_collision(0,[­100E­10; 0; 0; 0; 5; 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite que les variables m,b,alpha,beta,cte_lorentz,
% global_puissance_alpha et global_puissance_beta soient déclarées !!
% A utiliser de préférence en tant que sous­routine
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
( Voir annexe 2 )
Il sera utilisé avec la routine ode45 de la façon suivante :
[t,y]=ode45(@etape_collision,[0 temps_simulation],[­100E­10; 0; 0; 0; vy; 0]);
15
sorties : vecteur colonne t contenant les différents instants t et vecteur colonne y contenant pour chaque point, un vecteur ligne [x y z vx vy vz]
tous ces points simulés seront traités par la fonction collision :
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : COLLISION
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 10/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% collision simule pour un temps donné les interactions entre une particule
% et un potentiel le tout placé dans un champ magnétique
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * masse (réel positif) [ kg ],
% * charge (réel) [ C ], % * champ magnétique ( vecteur [Bx By Bz] réel) [ T ],
% * distance r qui correspond au potentiel minimum (réel positif) [ m ],
% * profondeur du puit (réel positif) [ J ],
% * "rayon" de la sphère virtuelle représentant le potentiel (réel positif) [ m ],
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
% * temps maximum (réel positif) [ s ],
% * position et vitesse initiales ( vecteur [ x_initial y_initial z_initial vx_initial
% vy_initial] vz_initial ) [ m & m/s ]
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sorties : % * nb_collisions : renvoie le nombre de collisions dans l'intervalle de
% simulation
% ou % * vide : renvoie un graphique représentant :
% % ** la trajectoire de la particule
% ** le moment cinétique en fonction du temps
% ** les énergies (cinétique, potentielle et totale) en
% fonction du temps
% ** le potentiel et l'énergie totale en fonction de la
% distance séparant la particule du potentiel
% %­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,1.6E­19,3E­10,8,4,5E­9,[­100E­10 0 0 0 5 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite les fonctions solve_potentiel, etape_collision, potentiel et
% graph_potentiel
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Quelques résultats :
% * collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,1.6E­19,3E­10,8,4,10E­9,[­100E­10 0 0 0 7.015 0])
% => 5 'pétales' : trajectoire fermée
%­­­­ B > 10 T ­­­­­­­
% * collision(1836*0.9E­30,1.6E­19,[0 0 10],2E­10,1.6E­19,3E­10,8,4,50E­9,[­100E­10 0 0 0 18.06 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
16
Passage en paramètre des données
Résolution de alpha et bêta pour avoir la forme du potentiel Simulation de la vitesse et de la position de la particule en appliquant le PFD à chaque instant
Début boucle traitement de tous les points obtenus
Calcul de l'Energie Cinétique à l'instant t
Calcul de l'Energie Potentielle à l'instant t
Calcul de l'Energie Totale à l'instant t
Vérification s'il y a collision ou pas
Fin boucle traitement des points
Affichage des différentes données
simulées ou calculées
Figure 2 : Algorithme de la simulation de la trajectoire de la particule
17
2.3. Confrontation du modèle avec la conservation de l'Energie totale Maintenant que nos fonctions sont crées et qu'il n'y a plus de bug informatique (plus aucun message d'erreur...), nous allons tester la fonction 'collision' du point de vue 'physique' à savoir dans un premier temps en présence d'un champ magnétique seul puis dans un deuxième uniquement en présence du potentiel pour finalement simuler cette trajectoire en présence de ces 2 forces .
2.3.1. Champ magnétique seul
Nous prendrons pour cette simulation un champ de 1 Tesla suivant l'axe des z, une profondeur D du puits de potentiel égale à 0 Joule et une vitesse initiale selon l'axe y égale à 7 m/s (Ec = 4.04838E­
26 J):
>> collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,0,3E­10,8,4,75E­9,[­100E­10 0 0 0 7 0])
( Voir Figure 2 )
Nous pouvons voir ­ malgré le fait que l'image de la trajectoire est étirée – que la particule suit un mouvement circulaire de rayon 700 Å et que son énergie cinétique ­ donc totale ­ bien que non constante (sic!) est égale à l'Ec théorique pour un temps proche de 0 .
18
Figure 3 : Simulation de la trajectoire de la particule en présence d'un champ magnétique seul
19
2.3.2. Potentiel seul
Figure 4 : Simulation de la trajectoire de la particule en présence du potentiel ( Le point vert symbolise le point de départ contrairement au rouge, le dernier point simulé )
Obtenue grâce à la commande :
>> collision(1836*0.9E­30,1.6E­19,[0 0 0],2E­10,1.6E­19,3E­10,8,4,5E­9,[­100E­10 0 0 0 7 0])
Nous pouvons voir que la particule subit une collision qui l'éjecte hors de portée du potentiel lui conférant une vitesse supérieure à sa vitesse initiale
20
2.3.3 Champ magnétique plus potentiel
Figure 5 : Trajectoire de la particule en présence du champ magnétique plus potentiel 21
Nous pouvons voir sur ce graphique que l'énergie se conserve mais est­ce totalement vrai ?
Figure 6 : Zoom sur l'énergie totale au niveau de la collision Au fur et à mesure que nous centrons le graphique sur la collision, des irrégularités apparaissent . Comme nous pouvons le voir sur la figure 6, l'énergie potentielle est devenu positive d'où une énergie totale elle aussi positive ( signifiant une trajectoire non fermée ) et de surcroît non constante au cours du temps engendrant un gain d'énergie à chaque collision .
2.3.4. Amélioration de la précision
J'ai de suite pensé à une erreur de programmation dans mon code de par sa taille – il faisait déjà 5 pages – mais après quelques jours de remaniement et de tests en tout genres et le fait que je n'avais toujours pas trouvé la cause de cette erreur, mon maître de stage M. Launay m'orienta vers la précision intrinsèque de la routine ode45 utilisée dans mon programme .
Pour ce faire, il me conseilla de simuler un problème simple ­ dont le résultat est parfaitement connu ­ avec cette même routine .
Il s'agissait de l'oscillateur harmonique :
m ∗ ẍ  k ∗ x = 0
k
avec ω =
m
2π
et T =
ω
22

En posant ω = 1 rad/s , nous devrions trouver T = 6.283 s et x max = x (t=0) .
Pour ce faire, nous créons une routine appelée 'test.m' contenant : ẏ  1  = y  2 
ẏ  2  = −ω² ∗ y  1 
où y  1  = x
et y  2  = ẋ
et ω = 1
Elle est appelée avec :
[t,y]=ode45(@test,[0 9],[7 0]);
subplot(2,1,1);
hold on
plot(t(:),y(:,1),'bs')
subplot(2,1,2);
for i=1:length(y)
cine(i) = 1/2*1836*0.9E­30*y(i,2)^2;
pot(i) = 1/2*1836*0.9E­30*y(i,1)^2;
tot(i) = cine(i) + pot(i);
end
plot(t,tot,'rs')
Ce qui nous rend :
Figure 7 : courbe du haut : abscisse x en fonction du temps de l'oscillateur harmonique
courbe du bas : énergie mécanique en fonction du temps 23
La période simulée est donc correcte mais l'énergie totale n'est pas conservée or le programme cette fois ci est des plus simples, le soucis vient donc de ode45 comme M. Launay m'avait conseillé de regarder dès les débuts .
Après quelques petites recherches dans l'aide de MatLab, il s'avère que ode45 a la meilleure précision parmi toutes les routines ode de résolution d'équations différentielles et que l'on peux agir sur cette précision . Cette précision est définie selon 3 paramètres :
 Refine : divise à chaque étape en n plus petits intervalles(4 par défaut pour ode45)
 AbsTol : erreur absolue, c'est elle qui détermine la précision lorsque le point est proche de l'origine
 RelTol : erreur relative, elle détermine le nombre de chiffres après la virgule
Nous réessayons donc en jouant sur ces paramètres de précision :
options = odeset('AbsTol',1E­20,'RelTol',1E­15);
[t,y]=ode45(@test,[0 9],[7 0],options);
subplot(2,1,1);
hold on
plot(t(:),y(:,1),'b')
subplot(2,1,2);
for i=1:length(y)
cine(i) = 1/2*1836*0.9E­30*y(i,2)^2;
pot(i) = 1/2*1836*0.9E­30*y(i,1)^2;
tot(i) = cine(i) + pot(i);
end
plot(t,tot,'r')
Figure 8 : courbe du haut : abscisse x en fonction du temps de l'oscillateur harmonique
courbe du bas : énergie mécanique en fonction du temps ces 2 courbes sont obtenues avec une meilleur précision 24
MatLab zoom automatiquement ce qui signifie que la courbe du bas est une droite signifiant la conservation de l'énergie totale au cours du temps . Maintenant, nous pouvons revenir à notre fonction 'collision' pour lui appliquer ces nouveaux paramètres .
>>collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,1.6E­19,3E­10,8,4,15E­9,[­100E­10 0 0 0 7 0])
Figure 9 : Trajectoire de la particule soumis à un champ de potentiel et à un champ magnétique
25
Figure 10 : agrandissement de l'énergie totale L'erreur numérique est donc acceptable pour un nombre de collisions très faible ( si l'on suppose que l'on gagne uniformément 1.4% de l'énergie totale à l'origine à chaque collision, on gagne 14% de l'énergie totale à l'origine au bout de 10 collisions )
Notre système champ magnétique ( constant au cours du temps ) – potentiel est un système isolé signifiant donc la conservation exacte de l'Energie totale au cours du temps . Bien que non constante sur la figure 10, nous avons réduit l'erreur relative par 60 entre la figure 6 et la figure 10 ( représentant la même simulation, seule la précision a été modifiée ) .
Cette non constance au cours du temps de l'Energie totale peux encore être réduite en augmentant la précision de la routine ode45 entraînant un temps de calcul proportionnel 26
3. Conclusions et perspectives
Lors de ce stage, j'ai découvert la démarche scientifique du métier de chercheur . La difficulté principale a été de créer un modèle informatique en se basant uniquement sur l'application du Principe Fondamental de la Dynamique tout en ne connaissant pas le résultat final . En effet, le travail de recherche n'est que remise en question des résultats acquis antérieurement, ce que j'ai découvert avec les soucis liés à la précision de la routine de simulation de Runge­Kutta . L'apparente satisfaction de mes premières trajectoires ne fut que de courte durée puisqu'une analyse plus approfondie a mis en évidence des discordances entre ma simulation informatique et la réalité physique ( non conservation de l'Energie totale ) ce que je me suis forcé d'améliorer tout au long du stage .
Dans cette optique, il aurait été intéressant d'améliorer ce modèle pour mieux rendre compte de la réalité physique pour un proton soumis à un champ magnétique et à un potentiel . Pour ce faire, il aurait fallu vérifier la conservation du moment cinétique au cours du temps et de prendre en considération la force centrifuge, mais par manque de temps je n'ai pu ajouté cela à mon code informatique .

L = m∗r × v
d
L
d v
= m∗v × 
v  m∗r ×
dt
dt

dL
−dU
= r × 
er  q∗
v×
B
dt
dr
2

 − q∗r ∗B
L = Cte
2
1
2
m Ṙ U eff
2
2
2
2
2
Λ
q ∗B ∗R
q× B
U eff =

 U  R −
2
8∗m
2∗m
2∗m∗R
2
qBR
avec Λ = mR 2 Θ̇ 
2
1
qBR 2
Θ̇ =
Λ−

2
2
mR
E=
J'ai aussi le regret de ne pas avoir amélioré le programme en tant que tel, bien qu'il n'y a à rentrer les paramètres qu'une seule fois, l'usage en ligne de commande n'est pas aisée pour un novice . Il aurait été préférable de passer par une interface ( appelé GUI sous MatLab ) claire munie de boutons et de cases pré­remplies parfaitement adapté pour une utilisation en tant que démonstration pour des étudiants par exemple .
Paradoxalement, le programme actuel n'est pas destiné à une utilisation plus poussée par un programme externe, en effet, aucun mode de sortie n'est prévu rendu l'exploitation des points simulés impossible par un programme externe comme VMD ( Visual Molecular Dynamics, http://www.ks.uiuc.edu/Research/vmd/ ) .
27
Toutefois, je garderais de cette expérience de très bons souvenirs, en effet, mon maître de stage m'a toujours placé dans le cas d'un client me confiant une mission en totale autonomie, aucune indication au sujet de la méthode à suivre, je ne connaissais que les conditions initiales ( choix du potentiel , méthode Runge­Kutta ..) et l'objectif ( afficher la trajectoire, vérifier la constance de l'énergie totale ) . Je devais donc analyser le problème, trouver le moyen de le coder puis vérifier si les objectifs étaient atteints tout en développant une vision « physique » du problème me confirmant mon choix de poursuivre mes études dans la simulation physique .
28
Annexes
Annexe 1 : Fonction collision
function [nb_collisions] = collision(masse,charge,champ,r_min_pot,profondeur_puit,rayon_potentiel,puissance_alpha,puissance_beta,t,x,vmin_y,v
max_y,prec_vitesse_y);
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : COLLISION
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 10/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% collision simule pour un temps donné les interactions entre une particule
% et un potentiel le tout placé dans un champ magnétique
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * masse (réel positif) [ kg ],
% * charge (réel) [ C ], % * champ magnétique ( vecteur [Bx By Bz] réel) [ T ],
% * distance r qui correspond au potentiel minimum (réel positif) [ m ],
% * profondeur du puit (réel positif) [ J ],
% * "rayon" de la sphère virtuelle représentant le potentiel (réel positif) [ m ],
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
% * temps maximum (réel positif) [ s ],
% * position et vitesse initiales ( vecteur [ x_initial y_initial z_initial vx_initial
% vy_initial] vz_initial ) [ m & m/s ]
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sorties : % * nb_collisions : renvoie le nombre de collisions dans l'intervalle de
% simulation
% ou % * vide : renvoie un graphique représentant :
% % ** la trajectoire de la particule
% ** le moment cinétique en fonction du temps
% ** les énergies (cinétique, potentielle et totale) en
% fonction du temps
% ** le potentiel et l'énergie totale en fonction de la
% distance séparant la particule du potentiel
% %­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,1.6E­19,3E­10,8,4,5E­9,[­100E­10 0 0 0 5 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite les fonctions solve_potentiel, etape_collision, potentiel et
% graph_potentiel
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ 29
% Quelques résultats :
% * collision(1836*0.9E­30,1.6E­19,[0 0 1],2E­10,1.6E­19,3E­10,8,4,10E­9,[­100E­10 0 0 0 7.015 0])
% => 5 'pétales' : trajectoire fermée
%­­­­ B > 10 T ­­­­­­­
% * collision(1836*0.9E­30,1.6E­19,[0 0 10],2E­10,1.6E­19,3E­10,8,4,50E­9,[­100E­10 0 0 0 18.06 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
global m;
global q;
global b;
global alpha;
global beta;
global cte_lorentz;
global global_puissance_alpha;
global global_puissance_beta;
% FIN de définition des constantes globales
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% vérification des variables entrées en paramètre(masse et temps positifs par ex)
m = abs(masse);
q = charge;
b = champ;
cte_lorentz = q/m;
r_min_pot = abs(r_min_pot);
profondeur_puit = abs(profondeur_puit); % D est mis positif puis sera multiplié par ­1 pour la recherche de alpha et beta
temps_simulation = abs(t);
rayon_potentiel = r_min_pot;
% FIN vérification variables
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
global_puissance_alpha = puissance_alpha;
global_puissance_beta = puissance_beta;
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Initialisation variables pour boucles
collision = 0; % pas de collision au départ
nb_collisions = 0;
energie_cinetique = [];
distance_minimum_pot = rayon_potentiel;
liste_points_collision = [0 0 0 0 0 0 0];
l = []; % def du moment cinétique
taille_liste_collision = 0;
% FIN init. variables pour boucles
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
[alpha,beta]=solve_potentiel(r_min_pot,­1*profondeur_puit,puissance_alpha,puissance_beta); % calcul de alpha et beta vis à vis des conditions du potentiel
if ( alpha ~= 0 | beta ~= 0 ) % si potentiel (attractif, répulsif ou les deux)
rayon_potentiel = abs(rayon_potentiel);
else rayon_potentiel = 0; % pas de potentiel = pas de collision = sphère representant le potentiel n'existe pas end
options = odeset('Refine',8,'AbsTol',1E­20,'RelTol',1E­9); % modification du nombre de point pour un 'pas' élémentaire de ode45
%options = odeset('Refine',8);
% AbsTol définit la précision globale et RelTol définit la précision
% lorsque la particule est proche de l'origine, RelTol ne doit pas être < à
% 1E­11 => temps de calcul très long
[t,y]=ode45(@etape_collision,[0 temps_simulation],x,options); % simulation de tous les points pour t=0 jusqu'au temps de simulation maximum rentré en paramètre 30
if alpha == 0 & beta == 0 % ­­ début si pas de potentiel
nb_tour = 0;
rayon = [];
diametre = 0;
chemin = 0;
for i= 2:length(y) % ­­ début boucle sur les éléments du vecteur y
pas = ( ( y(i,1)­y(i­1,1) )^(2) + ( y(i,2)­y(i­1,2) )^(2) )^(1/2); % 'pas' élémentaire entre 2 points, approximation d'une droite chemin = chemin + pas; % on ajoute au fur et à mesure la distance parcourue
corde = ( ( y(1,1)­y(i,1) )^(2) + ( y(1,2)­y(i,2) )^(2) )^(1/2); % longueur ( 'corde' ) entre le point de départ et le point courant
if corde>diametre % si cette corde est maximum, on la garde en mémoire
diametre = corde; % il suffit d'avoir un demi­cercle pour connaitre la corde maximum : le diamètre
end
end % ­­ fin boucle sur les éléments du vecteur y
nb_tour = floor( chemin / (pi * diametre ) ); % on ne garde que l'entier du nombre de tours rayon = diametre / 2;
if nb_tour > 0 % ­­ s'il y a plus d'un tour complet
titre = ['Nombre de tours complets : ',num2str(nb_tour),' | Rotation sens horaire | Rayon moyen : ',num2str(rayon),' | '];
elseif nb_tour < ­1 % ­­ s'il y a plus d'un tour complet mais dans l'autre sens
titre = ['Nombre de tours complets : ',num2str(abs(nb_tour)),' | Rotation sens anti­horaire | Rayon moyen : ',num2str(rayon),' | '];
else % sinon graphiquement, on verra le sens de rotation
titre = ['Rayon moyen : ',num2str(rayon),' | '];
end % ­­ fin condition plus d'un tour complet
else titre = '';
end % ­­ fin condition potentiel
for i=1:length(y)
%l(i) = m * (( y(i,2)*y(i,6) ­ y(i,5)*y(i,3) )^(2) + ( y(i,3)*y(i,4) ­ y(i,6)*y(i,1) )^(2) + ( y(i,1)*y(i,5) ­ y(i,4)*y(i,2) )
^(2) )^(1/2) ; % calcul du moment cinétique pour chaque élément de y
vecteur_position = [y(i,1) y(i,2) y(i,3)];
vecteur_vitesse = [y(i,4) y(i,5) y(i,6)];
l(i) = m*norm(cross(vecteur_position,vecteur_vitesse)); % calcul du moment cinétique pour chaque élément de y
l(i) = l(i) + norm(vecteur_position)^(2)/2*q*norm(b);
%l(i) = norm(vecteur_position)^(2)/2*q*norm(b);
energie_cinetique(i) = 1/2*m*norm([y(i,4) y(i,5) y(i,6)])^(2);
distance_potentiel(i) = (y(i,1)^(2) + y(i,2)^(2) + y(i,3)^(2))^(1/2);
energie_potentielle(i) = potentiel(alpha,beta,distance_potentiel(i));
energie_totale(i) = energie_cinetique(i) + energie_potentielle(i);
if distance_potentiel(i) < rayon_potentiel & collision == 0
% si la particule est dans la 'sphère' représentant le potentiel et qu'il n'y a pas eu de collision
collision = 1; % on spécifie qu'il y a collision
nb_collisions = nb_collisions +1;
elseif distance_potentiel < distance_minimum_pot & nargout ==0
%elseif distance_potentiel(i) < (rayon_potentiel/9) & nargout ==0
% si la distance au potentiel est inférieure à la moitié du rayon de la sphère et que les graphiques soient demandés
distance_minimum_pot = distance_potentiel(i);
taille_liste_collision = size(liste_points_collision); % = [nb_lignes nb_colonnes]
taille_liste_collision = taille_liste_collision(1)+1; % = nombre de lignes + 1
liste_points_collision(taille_liste_collision,1) = y(i,1); % = x
liste_points_collision(taille_liste_collision,2) = y(i,2); % = y 31
liste_points_collision(taille_liste_collision,3) = y(i,3); % = z
liste_points_collision(taille_liste_collision,4) = y(i,4); % = Vx
liste_points_collision(taille_liste_collision,5) = y(i,5); % = Vy
liste_points_collision(taille_liste_collision,6) = y(i,6); % = Vz
liste_points_collision(taille_liste_collision,7) = t(i); % = t
elseif distance_potentiel(i) > rayon_potentiel & collision ==1
% si la particule est en dehors de la sphère et qu'il y a eu collision
collision = 0; % on spécifie qu'on est sorti de la sphère
distance_minimum_pot = rayon_potentiel;
end
end
%­­­­­­­­ Graphique ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
if nargout == 0 % ­­ si pas de variables de sorties = graphique demandé hold on
axis('equal') % les axes sont orthonormés maintenant
clf % on efface le graphique
if x(3) == 0 | x(6) ==0
% cercle représentant la 'largeur'du potentiel
rayon_cercle = rayon_potentiel;
cercle_t=0:0.3:6.5;
cercle_x = rayon_cercle*cos(cercle_t);
cercle_y = rayon_cercle*sin(cercle_t);
plot(cercle_x,cercle_y,'k­­');
hold on
plot(0,0,'ks') % affichage du centre du potentiel
plot(y(:,1),y(:,2),'w')
axis('equal')
comet(y(:,1),y(:,2));
else
comet3(y(:,1),y(:,2),y(:,3),0.2); % on affiche l'animation de la trajectoire
end
%­­­­­­­­­­ 1er graph ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
subplot(2,2,1); % 1er graphique représentant la trajectoire
hold on
if alpha ~= 0 | beta ~= 0 % si potentiel
plot3(0,0,0,'ks') % affichage du centre du potentiel
% cercle représentant la 'largeur'du potentiel
rayon_cercle = rayon_potentiel;
cercle_t=0:0.3:6.5;
cercle_x = rayon_cercle*cos(cercle_t);
cercle_y = rayon_cercle*sin(cercle_t);
cercle_z = 0.*cercle_t;
plot3(cercle_x,cercle_y,cercle_z,'k­­');
%axis('equal')
end
plot3(y(:,1),y(:,2),y(:,3)) % on affiche le tracé de la particule 32
plot3(y(1,1),y(1,2),y(1,3),'gs') % affichage du point de départ
text(y(1,1),y(1,2),y(1,3),['\rightarrow ( ',num2str(y(1,1)),' | ',num2str(y(1,2)),' | ',num2str(y(1,3)),' )
'],'HorizontalAlignment','left')
plot3(y(length(y),1),y(length(y),2),y(length(y),3),'rs') % affichage de la dernière position
text(y(length(y),1),y(length(y),2),y(length(y),3),['\rightarrow ( ',num2str(y(length(y),1)),' | ',num2str(y(length(y),2)),' | ',num2str(y(length(y),3)),' )'],'HorizontalAlignment','left')
for i=2:taille_liste_collision % BUG : 1ère ligne vide
plot3(liste_points_collision(i,1),liste_points_collision(i,2),liste_points_collision(i,3),'ks');
end
xlabel('Axe des X');
ylabel('Axe des Y');
zlabel('Axe des Z');
grid('on');
titre = [titre,'Nombre de collisions : ',num2str(nb_collisions)];
title(titre);
%­­­­­­­­­­ 2ième graph ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
subplot(2,2,2); % 2ième graphique représentant le moment cinétique
plot(t,l,'g')
title('Moment Cinétique en fonction du temps');
xlabel('Temps (s) ');
ylabel(['Moments Cinétiques (',texlabel('kg.m^2.s^­1'),') ']);
%comptage_collisions(vmin_y,vmax_y,temps_simulation,prec_vitesse_y);
%liste_vitesse = vmin_y:prec_vitesse_y:vmax_y;
%for i=1:length(liste_vitesse)
% liste_nb_collisions(i) = collision(m,q,b,r_min_pot,profondeur_puit,rayon_potentiel,puissance_alpha,puissance_beta,temps_simulation,[x(1) x(2) x(3) x(4) liste_vitesse(i) x(6)]);
%end
%bar(liste_vitesse,liste_nb_collisions,'r');
%title('Nombre de collisions par vitesses');
%xlabel('Vitesse initiale suivant l axe y (m/s)');
%ylabel('Nombre de collisions');
%­­­­­­­­­­ 3ième graph ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
subplot(2,2,3) % 3ième graphique représentant l'énergie cinétique en fonction du temps
hold on
if alpha ~= 0 | beta ~= 0 % si potentiel
plot(t,energie_cinetique,'k') % k = couleur noire, Ec différente de l'énergie totale
plot(t,energie_potentielle,'b')
end
plot(t,energie_totale,'r')
for i=2:taille_liste_collision % BUG : 1ère ligne vide
energie_cine = 1/2*m*( liste_points_collision(i,4)^(2) + liste_points_collision(i,5)^(2) + liste_points_collision(i,6)^(2) );
plot(liste_points_collision(i,7),energie_cine,'ks');
end
title('Energies en fonction du temps');
xlabel('Temps (s) ');
ylabel('Energie (J) ');
if alpha ~= 0 | beta ~= 0 % si potentiel
legend('Energie Cinétique','Energie Potentielle','Energie Totale');
else 33
legend('Energie Cinétique');
end
%­­­­­­­­­­ 4ième graph ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
subplot(2,2,4); % 4ième graphique représentant le potentiel selon r hold on
graph_potentiel(alpha,beta,puissance_alpha,puissance_beta,3/4*r_min_pot,6/4*r_min_pot,r_min_pot); % potentiel plot(distance_potentiel,energie_totale,'r'); % affiche l'énergie totale for i=2:taille_liste_collision % BUG : 1ère ligne vide
energie_cine = 1/2*m*( liste_points_collision(i,4)^(2) + liste_points_collision(i,5)^(2) + liste_points_collision(i,6)^(2) );
distance_collisions = ( liste_points_collision(i,1)^(2) + liste_points_collision(i,2)^(2) + liste_points_collision(i,3)^(2) )^(1/2);
energie_tot = energie_cine + potentiel(alpha,beta,distance_collisions);
plot(distance_collisions,energie_tot,'ks');
end
end % ­­ fin condition graphiqe ou non
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
Annexe 2 : Fonction etape_collision ( sous­routine pour la fonction collision )
function ypoint = etape_collision(t,y)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : ETAPE_COLLISION
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 05/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% etape_collision simule la position et la vitesse de la
% particule en fonction de la position et vitesse antérieures
% pour un instant t donné
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * instant t,
% * vecteur colonne y représentant [x; y; z; vx; vy; vz],
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sortie : % * vecteur colonne ypoint représentant les nouvelles positions et vitesses
% après la simulation du PFD sur la particule
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % ypoint=etape_collision(0,[­100E­10; 0; 0; 0; 5; 0])
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite que les variables m,b,alpha,beta,cte_lorentz,
% global_puissance_alpha et global_puissance_beta soient déclarées !!
% A utiliser de préférence en tant que sous­routine
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
global m;
global q; 34
global b;
global alpha;
global beta;
global cte_lorentz; % q/m
global global_puissance_alpha;
global global_puissance_beta;
% fin de récupération des variables globales (ie : spécifiées par la
% fonction parent )
puissance_alpha = global_puissance_alpha;
puissance_beta = global_puissance_beta;
r = norm([y(1) y(2) y(3)]); % = norme du vecteur r
vectoriel = cross([y(4) y(5) y(6)],b); % = produit vectoriel de v et b
ypoint(1) = y(4); % = x
ypoint(2) = y(5); % = y
ypoint(3) = y(6); % = z
ypoint(4) = cte_lorentz*( vectoriel(1) ) + ( puissance_alpha *alpha*(r)^(­( puissance_alpha +1)) ­ puissance_beta *beta*(r)^(­( puissance_beta +1)))*y(1)/(r*m); % = vx
ypoint(5) = cte_lorentz*( vectoriel(2) ) + ( puissance_alpha *alpha*(r)^(­( puissance_alpha +1)) ­ puissance_beta *beta*(r)^(­( puissance_beta +1)))*y(2)/(r*m) ; % = vy
ypoint(6) = cte_lorentz*( vectoriel(3) ) + ( puissance_alpha *alpha*(r)^(­( puissance_alpha +1)) ­ puissance_beta *beta*(r)^(­( puissance_beta +1)))*y(3)/(r*m) ; % = vz
% à cet instant : ypoint = [x y z vx vy vz] ­ vecteur ligne
ypoint = ypoint'; % ode45 ne prend en paramètre qu'un vecteur collonne
% maintenant : ypoint = [x; y; z; vx; vy; vz] ­ vecteur collonne
Annexe 3 : Fonction solve_potentiel
function [alpha,beta] = solve_potentiel(r0,d,puissance_alpha,puissance_beta)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : SOLVE_POTENTIEL
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 04/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% Solve_potentiel calcule alpha et beta pour un potentiel de type % alpha / r^puissance_alpha ­ beta / r^puissance_beta
% grâce à la distance r où il y a un minimum de potentiel ainsi que cette
% valeur minimum d'énergie rentrées en paramètres
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * distance r qui correspond au potentiel minimum (réel positif) [ m ],
% * profondeur du puit (réel négatif) [ J ],
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sorties : % * [alpha,beta] : renvoie les valeurs de alpha et beta calculées
% ou % * vide : renvoie un graphique représentant le potentiel avec alpha et 35
% beta calculés
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % solve_potentiel(2E­10,­1.6E­19,8,4)
% [alpha,beta]=solve_potentiel(2E­10,­1.6E­19,8,4)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite la fonction graph_potentiel pour fonctionner en mode graphique
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
beta = puissance_alpha * d / ( puissance_beta*r0^(­1*puissance_beta) ­ puissance_alpha*r0^(­1*puissance_beta));
alpha = puissance_beta / puissance_alpha *r0^(puissance_alpha ­ puissance_beta) * beta;
if ~(nargout > 0) % si pas de variable demandée en sortie = graphique demandé
% avec les valeurs de alpha et beta calculés
graph_potentiel(alpha,beta,puissance_alpha,puissance_beta,3/4*r0,2*r0,r0); end
Annexe 4 : Fonction potentiel function v = potentiel(varargin)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : POTENTIEL
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 05/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% potentiel calcule le potentiel de type % alpha / r^puissance_alpha ­ beta / r^puissance_beta
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées ( voir Usage ) :
% * alpha calculé grâce à solve_potentiel,
% * beta calculé grâce à solve_potentiel,
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
% * distance r à laquelle le potentiel doit être calculé
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sortie : % * v : potentiel à la distance r
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % * v = potentiel(alpha,beta,puissance_alpha,puissance_beta,r)
% * v = potentiel(alpha,puissance_alpha,puissance_beta,r)
% = potentiel(alpha,0,puissance_alpha,puissance_beta,r)
% * v = potentiel(alpha,beta,r)
% = potentiel(alpha,beta,8,4,r)
% * v = potentiel(alpha,r)
% = potentiel(alpha,0,8,4,r) 36
% * v = potentiel(une_seule_variable)
% = potentiel(0,0,puissance_alpha,puissance_beta,r)
% = 0
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
if nargin >= 5 % si 5 variables ou plus sont passées en paramètres
% potentiel(alpha,beta,puissance_alpha,puissance_beta,r)
alpha = varargin{1};
beta = varargin{2};
puissance_alpha = varargin{3};
puissance_beta = varargin{4};
r = varargin{5};
% on ignore les variables en plus ( 6ième, 7ième..)
elseif nargin == 4 % si 4 variables passées en paramètres
% potentiel(alpha,puissance_alpha,puissance_beta,r)
% équivaut à potentiel(alpha,0,puissance_alpha,puissance_beta,r)
alpha = varargin{1};
beta = 0;
puissance_alpha = varargin{2};
puissance_beta = varargin{3};
r = varargin{4};
elseif nargin == 3 % si 3 variables passées en paramètres
% potentiel(alpha,beta,r)
% équivaut à potentiel(alpha,beta,8,4,r)
alpha = varargin{1};
beta = varargin{2};
puissance_alpha = 8;
puissance_beta = 4;
r = varargin{3};
elseif nargin == 2 % si 2 variables passées en paramètres
% potentiel(alpha,r)
alpha = varargin{1};
beta = 0;
puissance_alpha = 8;
puissance_beta = 4;
r = varargin{2};
else % si une seule variable est entrée en paramètre : pas de potentiel
alpha = 0;
beta = 0;
puissance_alpha = 8;
puissance_beta = 4;
r = 0;
end
v = alpha/(r^(puissance_alpha)) – beta/(r^(puissance_beta));
37
Annexe 5 : Fonction graph_potentiel
function minimum = graph_potentiel(alpha,beta,puissance_alpha,puissance_beta,xmin,xmax,r_minimum)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% FONCTION : GRAPH_POTENTIEL
% AUTEUR : SUHARD Jérôme
% DATE de dernière mise à jour : 09/06/08
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Objectif :
% Graph_potentiel affiche le potentiel de type % alpha / r^puissance_alpha ­ beta / r^puissance_beta
% ainsi que les 2 membres séparement
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Entrées :
% * alpha calculé grâce à solve_potentiel,
% * beta calculé grâce à solve_potentiel,
% * puissance pour le 'r' du terme alpha / r ( réel ),
% * puissance pour le 'r' du terme beta / r ( réel ),
% * r minimum à afficher ( réel ),
% * r maximum à afficher ( réel ),
% Optionnelle :
% * distance r pour laquelle le potentiel est minimum ( sinon calculé )
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ % Sortie : % * minimum : renvoie la distance où le potentiel est minimum
% ( elle sera égal à r_minimum s'il est renseigné ) % * graphique représentant le potentiel
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Usage : % graph_potentiel(alpha,beta,8,4,1E­10,3E­10,2E­10)
% minimum=graph_potentiel(alpha,beta,8,4,1E­10,3E­10)
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
% Nécessite la fonction potentiel
%­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
hold on % permet d'afficher plusieurs graphiques sur la même fenêtre
if nargin > 6 % si le minimum est donné en paramètre, on ne le calcule pas
minimum = r_minimum;
else
minimum = fminbnd(@(x)potentiel(alpha,beta,puissance_alpha,puissance_beta,x),xmin,xmax);
end
potentiel_minimum = potentiel(alpha,beta,puissance_alpha,puissance_beta,minimum); y_pot_min = 1.5*potentiel_minimum; % permet de ne pas afficher le texte r0
% sur la courbe mais un peu au dessus
% alpha
fplot(@(x)potentiel(alpha,0,puissance_alpha,puissance_beta,x),[xmin xmax],'r',1E­5) % rouge
% ­ beta
fplot(@(x)potentiel(0,beta,puissance_alpha,puissance_beta,x),[xmin xmax],'g',1E­5) % vert 38
% alpha ­ beta
fplot(@(x)potentiel(alpha,beta,puissance_alpha,puissance_beta,x),[xmin xmax],'b',1E­5) % bleu
fplot(@(x) potentiel_minimum,[5/6*minimum minimum*7/6],'k') % affiche en noir un trait signifiant la tangente horizontale en r0
text(minimum,y_pot_min,'\uparrow r0','HorizontalAlignment','left')
title({['Minimum r0 : ',num2str(minimum),' | V0 = ',num2str(potentiel_minimum)];['\alpha = ',num2str(alpha),' & \beta = ',num2str(beta)]})
xlabel('Distance r entre la particule et le potentiel (m)');
ylabel('Energie (J)');
legend(texlabel(['alpha / r^',num2str(puissance_alpha)]),texlabel(['­ beta / r^',num2str(puissance_beta)]),texlabel(['alpha / r^',num2str(puissance_alpha),' ­ beta / r^',num2str(puissance_beta)]));
fplot(@(x) 0,[xmin xmax],'k') % affiche en noir V=0
39
Bibliographie

Classical Mechanics, Goldstein, Poole & Safko

Springer Handboox of Atomic, Molecular and Optical Physics

Mécanique, Landau et Lifchitz

Atom­Molecule collision theory, Bernstein
Webographie

http://www.nucleaire­info.com/maple/trajectoire_maple_1.html

http://www.ipr.univ­rennes1.fr

http://www.ks.uiuc.edu/Research/vmd/
Téléchargement