• Aucun résultat trouvé

Méthodes numériques et simulations

N/A
N/A
Protected

Academic year: 2021

Partager "Méthodes numériques et simulations"

Copied!
215
0
0

Texte intégral

(1)

SIMULATIONS

par

David SÉNÉCHAL

Ph.D., Professeur Titulaire

UNIVERSITÉ DESHERBROOKE

Faculté des sciences Département de physique

(2)

Ce manuel électronique fut utilisé dans le cadre du cours PHQ404/PHQ405 (Méthodes numé-riques et simulations) à l’Université de Sherbrooke, de 2011 à 2020. Il fait partie d’une collec-tion de manuels électroniques diffusés par des professeurs du département de physique de l’Université de Sherbrooke. Il a été revisité pour une diffusion sous licence libre en collabo-ration avec la fabriqueREL en mars 2020. Il est diffusé sous licence Creative Commons dans sa version BY-NC, sauf indications contraires.

L’auteur, David Sénéchal, est professeur titulaire à l’Université de Sherbrooke. Son domaine de recherche est la modélisation numérique des matériaux quantiques. C’est dans un esprit de partage et de collaboration qu’il a décidé de partager cette ressource éducative libre. La liste de ses publications est disponible surGoogle Scholar.

Sauf indications contraires, le contenu de ce manuel électro-nique est disponible en vertu des termes de laLicence Creative Commons Attribution - Pas dutilisation commerciale 4.0 Inter-national.

Vous êtes encouragé à :

Partager – copier, distribuer et communiquer le matériel par tous moyens et sous tous formats.

Adapter – remixer, transformer et créer à partir du matériel. Selon les conditions suivantes :

Paternité – Vous devez citer le nom de l’auteur original.

Pas d’utilisation commerciale – Vous n’avez pas le droit d’utiliser le matériel à des fins commerciales.

(3)

1 Approche numérique aux problèmes physiques 9

A Introduction. . . 9

B Grands types de problèmes . . . 10

1 Évolution temporelle de variables discrètes. . . 10

2 Problèmes aux limites . . . 10

3 Problèmes spatio-temporels . . . 11

4 Problèmes linéaires extrêmes . . . 11

5 Échantillonage. . . 11

6 Optimisation . . . 11

2 Représentation des nombres sur ordinateur 13 A Nombres entiers . . . 13

B Nombres à virgule flottante . . . 14

1 Dépassements de capacité . . . 15

C Erreurs d’arrondi . . . 15

D Types fondamentaux en C, C++ et Python . . . 16

3 Équations différentielles ordinaires 19 A Exemple : Mouvement planétaire . . . 20

B Méthode d’Euler . . . 21

1 Précision de la méthode d’Euler . . . 21

2 Stabilité de la méthode d’Euler . . . 21

3 Méthode prédicteur-correcteur . . . 22

C Méthode de Runge-Kutta . . . 23

1 Méthode du deuxième ordre . . . 23

2 Méthode du quatrième ordre . . . 24

3 Contrôle du pas dans la méthode de Runge-Kutta . . . 24

D Méthode de Richardson . . . 26

E Méthode d’Adams. . . 27

1 Méthode d’Adams-Bashforth . . . 27

2 Méthode d’Adams-Moulton. . . 28

4 Simulation de particules I : méthode de Verlet 29 A Algorithme de Verlet. . . 29

1 Exemple : force constante . . . 30

B Complexité algorithmique des simulations de particules . . . 31

C Aspects quantiques et statistiques. . . 32

5 Transformées de Fourier rapides 33 A Introduction. . . 33

(4)

C Algorithme de Danielson et Lanczos (ou Cooley-Tukey) . . . 35

1 Description de l’algorithme. . . 35

2 Cas des dimensions supérieures . . . 37

3 Fonctions réelles . . . 38

6 Simulation de particules II : écoulement d’un plasma 41 A Description de la méthode . . . 41

1 Mise à l’échelle du problème . . . 42

2 Algorithme . . . 42

B Plasma en deux dimensions en présence d’un champ magnétique . . . 45

7 Opérations matricielles 47 A Systèmes d’équations linéaires. . . 48

1 Système général et types de matrices . . . 48

2 Système triangulaire . . . 48

3 Élimination gaussienne . . . 49

4 Décomposition LU . . . 50

5 Système tridiagonal. . . 51

6 Décomposition Q R et procédure de Gram-Schmidt. . . 52

7 Procédure de Householder . . . 54

B Valeurs et vecteurs propres . . . 56

1 Généralités . . . 56

2 Méthode de Jacobi . . . 57

3 Algorithme QR. . . 58

4 Méthode de Householder . . . 58

5 Problème aux valeurs propres généralisé. . . 60

C Décomposition en valeurs singulières . . . 61

8 Méthodes pour matrices creuses 65 A Matrices creuses . . . 65

B Méthode du gradient conjugué. . . 66

1 Directions conjuguées. . . 66

2 Algorithme du gradient . . . 67

3 Minimisation le long de directions conjuguées . . . 68

C Méthode de Lanczos. . . 69

1 Convergence vers les valeurs propres extrêmes . . . 71

2 Calcul des vecteurs propres. . . 73

D Application : chaînes de spins et modèle de Heisenberg . . . 74

1 Produits tensoriels . . . 74

2 Modèle de Heisenberg. . . 75

3 Chaîne de spin 1/2 : analyse des effets de taille. . . 76

4 Chaîne de spin 1 : gap de Haldane . . . 77

5 Annexe : algorithme epsilon. . . 79

9 Interpolation des fonctions 83 A Polynômes interpolants . . . 83

(5)

C Approximants de Padé . . . 87

10 Polynômes orthogonaux 91 A Généralités . . . 91

1 Polynômes de Legendre . . . 93

2 Polynômes de Tchébychev . . . 93

3 Autres polynômes classiques . . . 95

4 Théorème sur les racines. . . 95

5 Approximation d’une fonction par un polynôme. . . 96

11 Intégration numérique 99 A Formules élémentaires d’intégration d’une fonction. . . 99

1 Erreur de troncature dans la formule des trapèzes . . . 100

2 Formule de Simpson . . . 100 B Quadratures gaussiennes . . . 101 1 Quadratures de Gauss-Legendre . . . 104 2 Quadratures de Gauss-Tchébychev . . . 105 3 Quadratures de Gauss-Kronrod . . . 106 C Approximation de Tchébychev. . . 107

12 Problèmes aux limites en dimension 1 111 A Méthode du tir . . . 111

B Base de fonctions tentes . . . 113

C Méthode de Galerkin et méthode de collocation . . . 116

1 Imposition des conditions aux limites de Dirichlet . . . 117

2 Calcul du laplacien en dimension 1 . . . 118

3 Problème aux valeurs propres . . . 118

4 Exemple : équation de Helmholtz . . . 119

5 Exemple : équation de Schrödinger . . . 121

D Méthodes spectrales. . . 122

1 Bases de polynômes orthogonaux et fonctions cardinales . . . 122

2 Opérateur différentiel . . . 124

3 Quadratures de Lobatto . . . 125

4 Exemple : équation de Helmholtz . . . 126

5 Conditions aux limites périodiques . . . 128

13 Problèmes aux limites : dimension 2 131 A Triangulations . . . 131

B Fonctions tentes . . . 133

C Évaluation du laplacien. . . 135

14 Équations aux dérivées partielles dépendant du temps 139 A Introduction. . . 139

B Évolution directe en dimension un . . . 140

1 Analyse de stabilité de von Neumann . . . 140

C Méthode implicite de Crank-Nicholson. . . 141

1 Analyse de stabilité . . . 142

(6)

E Application basée sur une représentation spectrale . . . 145

F Équation de Schrödinger dépendant du temps. . . 146

G Propagation d’une onde et solitons . . . 147

1 Équation d’advection . . . 147

2 Équation de Korteweg-de Vries . . . 148

3 Solitons . . . 149

15 Nombres aléatoires 153 A Générateurs d’entier aléatoires. . . 153

1 Générateur à congruence linéaire . . . 154

2 Générateurs de Fibonacci . . . 154

B Générateurs de distributions continues. . . 155

1 Distribution uniforme . . . 155

2 Méthode de transformation. . . 155

3 Méthode du rejet. . . 156

4 Méthode du rapport des aléatoires uniformes . . . 157

16 Méthode de Monte-Carlo 159 A Intégrales multidimensionnelles . . . 159

1 Exemple simple : calcul de l’aire d’un disque . . . 162

B L’algorithme de Metropolis . . . 163

1 Chaînes de Markov . . . 164

2 Analyse d’erreur . . . 166

C Le modèle d’Ising. . . 169

1 Définition . . . 169

2 Algorithme de Metropolis appliqué au modèle d’Ising. . . 171

3 Changements de phase . . . 173

D Simulations de particules . . . 174

17 Équations non linéaires et optimisation 179 A Équations non linéaires à une variable . . . 179

1 Cadrage et dichotomie. . . 179

2 Méthode de la fausse position . . . 180

3 Méthode de la sécante. . . 180

4 Méthode d’interpolation quadratique inverse . . . 181

5 Méthode de Newton-Raphson. . . 181

B Équations non linéaires à plusieurs variables . . . 183

1 Méthode de Newton-Raphson. . . 184

2 Méthode de Broyden . . . 184

3 Méthode itérative directe. . . 185

C Optimisation d’une fonction. . . 187

1 Méthode de Newton-Raphson. . . 187

2 Méthodes de quasi-Newton. . . 188

3 Méthode de Powell . . . 189

4 Méthode du simplexe descendant . . . 190

D Lissage d’une fonction . . . 192

(7)

2 Combinaisons linéaires de fonctions de lissage . . . 193

3 Lissages non linéaires . . . 195

E La méthode du recuit simulé. . . 196

18 Dynamique des fluides 201 A Équations fondamentales. . . 201

1 Équations d’Euler et de Navier-Stokes. . . 201

2 Démonstration de l’équation d’Euler . . . 202

3 Démonstration de l’équation de Navier-Stokes . . . 204

4 Cas particulier d’un fluide incompressible . . . 204

5 Fluide incompressible en deux dimensions. . . 205

6 Écoulement irrotationnel. . . 205

B Équation de Boltzmann . . . 206

1 Moments de la distribution . . . 206

2 Équation de Boltzmann . . . 207

3 Approximation des collisions moléculaires . . . 207

4 Approximation du temps de relaxation . . . 208

C Méthode de Boltzmann sur réseau . . . 209

1 Généralités . . . 209

2 Le schéma D2Q9 : dimension 2, 9 vitesses . . . 210

3 Conditions aux limites. . . 212

4 Algorithme . . . 212

(8)
(9)

APPROCHE NUMÉRIQUE AUX PROBLÈMES

PHYSIQUES

A

Introduction

La description du monde physique repose sur plusieurs concepts représentés par des objets ma-thématiques dont la définition précise a demandé de longues réflexions aux mathématiciens des siècles passés : l’infini, les nombres réels et complexes, les fonctions continues, les distributions de probabilités, etc. Les principes de la physique sont généralement exprimés par des relations entre ces objets.

Dans plusieurs cas, ces objets mathématiques peuvent être manipulés symboliquement et les équa-tions qui les gouvernent résolues analytiquement. Les modèles les plus simples de la physique se prêtent à ces calculs, et leur solution analytique permet de comprendre l’effet des divers paramètres impliqués. Notre compréhension de base de la physique doit donc énormément à notre capacité à résoudre exactement certains modèles simples.

Dans la plupart des cas, dont les plus réalistes, les modèles ne peuvent être résolus analytiquement et tout un attirail de méthodes d’approximations analytiques a été développé, dans le but de conser-ver autant que possible les avantages d’une solution analytique, même approchée. La théorie des perturbations, que ce soit en mécanique classique ou quantique, est l’exemple le plus évident de méthode de calcul approchée.

Mais ces approches approximatives ont leurs limites. Elles reposent généralement sur des hypo-thèses, telle la petitesse de certains paramètres, qui ne sont souvent pas respectées en pratique. La vaste majorité des problèmes d’intérêt dans les sciences physiques se prêtent difficilement à une solution purement analytique, approximative ou non. On doit alors avoir recours à des méthodes numériques.

Une formation minimale sur les méthodes numériques est donc essentielle à toute personne s’in-téressant à la modélisation du monde physique. En fait, l’expression «modélisation» est parfois uti-lisée pour signifier la description d’un système physique par un modèle qui ne peut être résolu que par des méthodes numériques.

(10)

B

Grands types de problèmes

Les problèmes résolus en calcul scientifique sont très variés. Dans tous les cas, la résolution nu-mérique du problème requiert un algorithme, une méthode ; on pourrait même parler de «recette». Or, toute recette complexe fait appel à d’autres recettes, plus générales, et donc plus basiques. Par exemple, plusieurs problèmes de physique ou de génie font appel à l’intégration de fonctions. Indé-pendamment du domaine d’études précis, il est donc important de comprendre comment intégrer des fonctions numériquement. De même, les opérations courantes d’algèbre linéaire (solution d’un système d’équations linéaires, diagonalisation d’une matrice, etc.) sont omniprésentes en calcul scientifique, quel que soit le domaine d’application.

Mais tout n’est pas qu’algorithme. La représentation numérique des objets mathématiques ou phy-siques est également très importante. Prenons par exemple le concept de fonction à une variable. Dans plusieurs problèmes, on cherche à déterminer une fonctionψ inconnue a priori. Cette fonc-tion doit être représentée numériquement et la manière la plus appropriée d’y arriver peut dé-pendre de la formulation du problème : s’il s’agit d’une équation différentielle avec valeurs initiales, l’algorithme peut nous faire «avancer dans le temps» de manière à calculer la fonctionψ(t ) au fur et à mesure, sans avoir à la représenter dans son ensemble. Par contre, s’il s’agit d’une équation diffé-rentielle avec valeurs aux frontières, il peut être nécessaire de représenter l’ensemble de la fonction

ψ(x ) dans un domaine précis à chaque étape de l’algorithme. La quantité d’information requise

pour représenter les données nécessaires à l’algorithme dépend donc de l’algorithme utilisé, pas uniquement du type d’objet traité (ici, une fonction à une variable).

Les grands types de problèmes que nous allons considérer sont les suivants :

1.B.1 Évolution temporelle de variables discrètes

Dans ce type de problèmes, l’évolution dans le temps d’un ensemble de variables discrètes est ré-gie par un ensemble de règles, par exemple des équations différentielles ordinaires. Par exemple, un problème de mécanique se traduit par un système d’équations différentielles sur un nombre bien défini de variables (les positions et les vitesses des particules en jeu). Un problème d’évolution temporelle se résoud normalement en avançant dans le temps de manière discrète, en définissant un pas temporel h (pas nécessairement constant) et en déterminant les valeurs des variables au temps t + h en fonction des variables au temps t , de proche en proche, sans avoir à conserver en mémoire les valeurs calculées depuis le début. La difficulté numérique dans ce type de problème est d’assurer une précision contrôlée aux prédictions, en dépit de la valeur finie du pas temporel h .

1.B.2 Problèmes aux limites

Dans ce type de problèmes, une ou plusieurs fonctions de la positionψa(r) doivent être déterminées dans une région de l’espace de forme plus ou moins complexe, en respectant (i) certaines condi-tions aux limites exprimées en fonction des valeurs des fonccondi-tionsψa(r) à la frontière du domaine et (ii) certaines équations constitutives valables dans le domaine considéré. Un exemple simple est l’équation de Laplace∇2φ = 0 pour le potentiel électrique φ dans l’espace vide, avec des frontières

(11)

conductrices maintenues à des valeurs connues deφ. Dans une telle situation, la représentation des fonctions inconnues passe généralement par une représentation du domaine spatial considéré par une grille de points ou maillage. La détermination du maillage constitue en soi un sous-domaine important du calcul scientifique.

1.B.3 Problèmes spatio-temporels

On peut combiner les deux catégories précédentes dans un type de problème qui implique à la fois une évolution temporelle et une dépendance spatiale. C’est le cas des équations différentielles aux dérivées partielles qui dépendent du temps : l’équation d’onde, l’équation de Navier-Stokes, les équations de Maxwell, les équations de la relativité générale, etc. Appartiennent aussi à cette catégo-rie des problèmes comportants plusieurs composantes ou systèmes en interaction, dont l’exemple extrême est la modélisation météorologique ou climatique. Il s’agit d’une catégorie particulière-ment difficile et répandue de problèmes.

1.B.4 Problèmes linéaires extrêmes

L’algèbre linéaire est omniprésente en calcul scientifique. Par exemple, les équations aux dérivées partielles peuvent souvent être formulées dans le langage de l’algèbre linéaire. Par contre, la linéa-rité est une propriété fondamentale de la mécanique quantique. Les problèmes quantiques sont souvent traités à l’aide de plusieurs techniques d’algèbre linéaire numérique, notamment via l’uti-lisation de matrices creuses et l’application répétée de matrices de très grande taille sur des vecteurs représentant des états physiques.

1.B.5 Échantillonage

Plusieurs problèmes visent à calculer les valeurs moyennes de quantités définies sur des espaces de configurations très vastes, trop vastes pour permettre un calcul direct. Par exemple, on pour-rait chercher à calculer la valeur moyenne de la vitesse d’une molécule dans un gaz réel (c.-à-d. non parfait) en fonction de la température. Ou encore, le nombre moyen de particules d’un cer-tain type pouvant frapper un détecteur à un endroit précis suite à une collision de haute énergie dans un détercteur de particules. Dans ces cas, le nombre de possibilités est si grand («astrono-mique» serait un euphémisme) qu’on doit procéder à un échantillonage des possibilités en suivant une certaine loi de probabilités. La difficulté est alors de procéder efficacement à un échantillonage qui respecte précisément des probabilités connues a priori. Les méthodes de ce type sont généra-lement connues sous le qualificatif générique de Monte-Carlo. Notons qu’on désire généragénéra-lement connaître non seulement les valeurs moyennes des quantités d’intérêt, mais aussi l’erreur commise par l’échantillonage lui-même sur ces valeurs moyennes.

1.B.6 Optimisation

Plusieurs problèmes visent à trouver une configuration optimale, généralement le minimum ou le maximum d’une fonction de plusieurs variables. La détermination des paramètres d’un modèle afin

(12)

de représenter un ensemble de données (lissage de courbes) appartient à cette catégorie. Parfois les configurations ne sont pas des points dans Rn, mais des objects discrets, par exemple le problème du commis-voyageur. Parfois on cherche non pas un minimum mais une valeur précise de la fonc-tion (recherche de racines). Plusieurs algorithmes ont été mis au point pour cette catégorie de pro-blèmes ; ils procèdent généralement par une «marche» dans l’espace considéré, marche guidée par la fonction à optimiser évaluée en plusieurs points. Cette marche d’arrête lorsque certains critères de convergence sont satisfaits.

(13)

REPRÉSENTATION DES NOMBRES SUR

ORDINATEUR

Le premier problème rencontré en modélisation numérique est la représentation des objets mathé-matiques courants (nombres, fonctions, etc.) sur un ordinateur. Nous nous heurtons alors au fait qu’un ordinateur ne peut représenter ni l’infini, ni le continu.

Un calculateur électronique représente les données (y compris les instructions visant à les mani-puler) par un ensemble d’états électroniques, chacun ne pouvant prendre que deux valeurs, tel un commutateur qui est soit ouvert ou fermé. Chacun de ces systèmes abrite donc un atome d’infor-mation, ou bit, et l’état de chaque bit peut prendre soit la valeur 0, soit la valeur 1.

Le bit étant l’unité fondamentale d’information, l’octet (angl. Byte) est défini comme un ensemble de 8 bits et sert couramment d’unité pratique d’information. Le Kilooctet (ko) désigne 103octets, le Mégaoctet (Mo) désigne 106octets, le Gigaoctet (Go) 109octets, et ainsi de suite. On utilise aussi des multiples basés sur les puissances de 210= 1024, portant le même nom mais notés différemment : 1 kio= 1024 octets, 1 Mio = 1024 kio, 1 Gio = 1024 Mio, etc. En 2017, la mémoire d’un ordinateur personnel typique se situe autour de 1010octets.

A

Nombres entiers

À partir des états binaires, un nombre entier naturel (l’un des concepts les plus simples, et proba-blement le plus ancien, des mathématiques) peut être représenté en base 2. Par exemple, on a la représentation binaire des nombres entiers suivants :

57= 1110012 2532= 1001111001002 (2.1)

Les entiers relatifs (Z) sont représentés de la même manière, sauf qu’un bit supplémentaire est re-quis pour spécifier le signe (±). Bien évidemment, une quantité donnée d’information (un nombre donné de bits) ne peut représenter qu’un intervalle fini de nombres entiers. Un entier naturel de 4 octets (32 bits) peut donc prendre les valeurs comprises de 0 à 232− 1 = 4 294 967 295. Un entier relatif peut donc varier entre−2 147 483 648 et 2 147 483 647. Un entier relatif de 8 octets (64 bits) peut varier entre−263= −9 223 372 036 854 775 808 et 263− 1 = 9 223 372 036 854 775 807 ∼ −9.1018.

(14)

Les opérations élémentaires sur les entiers (addition, multiplication, etc.) ne sont donc pas fermées sur ces entiers : ajouter 1 à l’entier naturel maximum redonne la valeur 0. Les opérations sont ef-fectuées modulo la valeur maximale admissible. Il est donc important se s’assurer que les entiers manipulés dans un code soient toujours en deçà des bornes maximales permises si on désire qu’ils se comportent effectivement comme des entiers.

Un processeur ayant une architecture à 64 bits permet d’utiliser des entiers de 8 octets pour re-présenter les adresses des données en mémoire, alors qu’une architecture à 32 bits n’utilise que des entiers de 4 octets. Conséquemment, cette dernière ne peut pas adresser plus que 232= 4 Gio de mémoire, alors que la première, omniprésente de nos jours, permet d’adresser une quantité de mémoire bien au-delà des capacités courantes des ordinateurs. Tous les systèmes d’exploitation récents sont basés sur une architecture à 64 bits, mais le mode 32 bits est parfois nécessaire afin d’assurer la compatibilité avec des logiciels plus anciens. La longueur naturelle (par défaut) des entiers dans une architecture de 64 bits sera effectivement de 8 octets.

B

Nombres à virgule flottante

La représentation binaire des nombres réels pose un problème plus complexe. On introduit le concept de nombre à virgule flottante (NVF) pour représenter de manière approximative un nombre réel. Un NVF comporte un signe, une mantisse et un exposant, comme suit :

x→ ±bpbp−1. . . b1× 2±eqeq−1...e1 (2.2) où les bisont les bits de la mantisse et les eiceux de l’exposant binaire. Au total, p+ q + 2 bits sont requis pour encoder un tel nombre (2 bits pour les signes de la mantisse et de l’exposant).

Il a fallu plusieurs années avant qu’un standard soit développé pour les valeurs de p et q en 1987, fruit d’une collaboration entre l’Institute of Electrical and Electronics Engineers (IEEE) et l’American

National Standards Institute (ANSI). Ce standard, appelé IEEE 754, prend la forme suivante :

x→ ±1.f × 2e−decal. (2.3)

où f est la partie fractionnaire de la mantisse et où un décalage est ajouté à l’exposant e . L’exposant

e comporte 8 bits, de sorte que 0≤ e ≤ 255, et le décalage, pour des nombres à 32 bits (précision simple) est 127. Le fait d’utiliser un décalage nous dispense de coder le signe de l’exposant. La man-tisse comporte, elle, 23 bits, qui représentent la partie fractionnaire f de la manman-tisse. Par exemple, dans l’expression binaire à 32 bits

0  signe : 01111100    exposant : 01000000000000000000000    mantisse (2.4)

le signe est nul (donc+), l’exposant est 124 − 127 = −3 , et la mantisse est 1,012= 1,25. Le nombre représenté est donc+1.25 × 2−3= 0.15625.

Signalons que des subtilités se produisent lorsque l’exposant est nul (e= 0) ou maximum (e = 255), mais nous n’entrerons pas dans ces détails ici.1

(15)

Un NVF de 32 bits peut effectivement représenter des nombres réels compris entre 1.4× 10−45et 3.4×1038, avec 6 ou 7 chiffres significatifs (23×log

10(2) ≈ 6.9). Un tel nombre est qualifié de nombre à précision simple.

La précision simple est généralement insuffisante pour les applications scientifiques. On utilise plu-tôt la précision double, basée sur une représentation à 64 bits (8 octets) des NVF : l’exposant est codé en 11 bits et la mantisse en 52 bits, ce qui permet de représenter effectivement des nombres réels compris entre

4.9× 10−324< double précision < 1.8 × 10308 (2.5) avec 15 chiffres significatifs en base 10.

2.B.1 Dépassements de capacité

Comme la représentation en virgule flottante ne représente qu’un intervalle de nombres possibles sur l’ensemble des réels, certaines opérations sur ces nombres produisent des nombres qui sont trop grands ou trop petits pour être représentés par un NVF. C’est ce qu’on appelle un dépassement

de capacité (overflow ou underflow, en anglais). Un nombre trop grand pour être représenté par

un NVF est plutôt représenté par le symboleNaN(pour not a number). Ce symbole est aussi utilisé pour représenter le résultat d’opérations impossibles sur les réels, par exemple la racine carrée d’un nombre négatif. Les nombres trop petits sont généralement remplacés par zéro.

C

Erreurs d’arrondi

Les NVF représentent exactement un sous-ensemble des réels, en fait un sous-ensemble des nombres rationnels, ceux qui s’expriment exactement en base 2 par une mantisse de 52 bits et un exposant de 11 bits (pour un nombre à double précision). Cet ensemble n’est pas fermé sous les opérations arithmétiques habituelles (addition, multiplication, inversion). L’erreur ainsi générée dans la re-présentation des réels et dans les opérations arithmétiques est qualifiée d’erreur d’arrondi.

step

Exemple 2.1 Erreur d’arrondi dans une addition simple

Voyons comment l’erreur d’arrondi se manifeste dans l’opération simple

7+ 1 × 10−7 (2.6)

en précision simple. Chacun des deux termes s’exprime, en binaire, comme suit : 7= 0 : 10000001 : 11000000000000000000000

1× 10−7= 0 : 01100111 : 101011010111111100101001 (2.7) Expliquons : l’exposant du nombre 7 est 129, moins le décalage de 127, ce qui donne 2. La mantisse est 1+2−1+2−2=7

4, et donc on trouve bien 7

4×22= 7. Pour le deuxième nombre, l’exposant est 103−127 = −24

et la mantisse est 1+ 2−1+ 2−3+ 2−5+ 2−6+ ··· = 1.6777216, ce qui donne 1.6777216 × 2−24= 1.0 × 10−7.

Additionnons maintenant ces deux nombres. Pour ce faire, on doit premièrement les mettre au même exposant, ce qui se fait en déplaçant les bits du deuxième nombre de 26 positions vers la droite, ce qui fait

(16)

Nom type octets bool logique 1 char caractère 1 short entier 2 int entier 4 long entier 8 float NVF 4 double NVF 8 long double NVF 16 pointeur 8 TABLE2.1

Types simples en C/C++, sur une machine à 64 bits

disparaître toute la mantisse. Le deuxième nombre devient donc effectivement nul, et on trouve

7+ 1.0 × 10−7= 7 (simple précision) (2.8)

On définit la précision-machine comme le nombre le plus grand qui, ajouté à 1, redonne 1. Pour un nombre à précision simple, la précision-machine est de5.96e-08. Pour un nombre à double précision, elle est de1.11e-16.

Les erreurs d’arrondi se produisent essentiellement à chaque fois que des NVF sont l’objet d’opéra-tions arithmétiques (addid’opéra-tions, soustracd’opéra-tions, multiplicad’opéra-tions, divisions) et peuvent être aussi bien négatives que positives. Si un calcul comporte N opérations arithmétiques, il est plausible que l’er-reur d’arrondi accumulée lors de ces opérations soit de l’ordre depN fois la précision-machine,

car l’erreur se propage un peu comme une marche aléatoire. La précision-machine n’est donc pas la précision des calculs effectués, mais seulement une précision maximale théorique.

D

Types fondamentaux en C, C

++ et Python

Que l’on programme en C, C++ ou Python, on doit composer avec des types de nombres pré-définis en fonction desquels les opérations courantes sont efficaces sur les micro-processeurs courants. Les types propres à C/C++ sont indiqués dans le tableau2.1. Python n’est pas un langage à types im-plicites ; on peut y connaître les caractéristiques des types fondamentaux en invoquant les fontions suivantes :

import sys

print(sys.int_info)

print(sys.float_info)

Les nombres complexes ne constituent pas un type fondamental en C, mais font partie de la biblio-thèque standard de C++ (STL); il s’agit alors d’un type génériquecomplex<>qui peut se spécialiser

(17)

type description

bool_ booléen (True ou False), stocké dans un octet

int_ type entier par défaut (=longen C ; habituellement int64 ou int32) intc =intde C (habituellement int32 or int64)

intp entier utilisé pour l’indexation (=size_ten C ; habituellement int32 ou int64)

int8 octet (-128 à 127)

int16 entier (-32 768 à 32 767)

int32 entier (-2 147 483 648 à 2 147 483 647)

int64 entier (-9 223 372 036 854 775 808 à 9 223 372 036 854 775 807) uint8 entier non négatif (0 à 255)

uint16 entier non négatif (0 à 65 535) uint32 entier non négatif (0 à 4 294 967 295)

uint64 entier non négatif (0 à 18 446 744 073 709 551 615)

float_ = float64.

float16 NVF à demi-précision : bit de signe, exposant à 5 bits, mantisse à 10 bits float32 NVF à précision simple : bit de signe, exposant à 8 bits, mantisse à 23 bits float64 NVF à précision double : bit de signe, exposant à 11 bits, mantisse à 52 bits

complex_ = complex128.

complex64 Nombre complexe de deux NVF à 32 bits complex128 Nombre complexe de deux NVF à 64 bits

TABLE2.2

Types disponibles avec NumPy

selon la précision requise, par exemple encomplex<double>ou encomplex<int>. En Python, les complexes sont un type fondamental, représenté par deuxfloat. NumPy permet de spécifier les types utilisés de manière plus précise (tableau2.2).

(18)
(19)

ÉQUATIONS DIFFÉRENTIELLES ORDINAIRES

Ce chapitre est consacré à la solution des systèmes d’équations différentielles ordinaires, c’est-à-dire aux systèmes d’équations de la forme

dx

dt = f(x, t ) (3.1)

où x(t ) est une collection de N fonctions dépendant d’une variable indépendante t , et f est un en-semble de N fonctions de x et de t .

Remarques :

F La variable t joue typiquement le rôle du temps en mécanique, d’où la notation utilisée. Mais elle peut en général avoir une interprétation différente.

F La forme (3.1) peut sembler restrictive, car il s’agit d’un système du premier ordre en dérivées seulement. Cependant tout système d’équations différentielles d’ordre plus élevé peut être ramené à un système du type (3.1) en ajoutant des variables au besoin pour tenir la place des dérivées d’ordre sous-dominant. Par exemple, considérons une équation différentielle du deuxième ordre pour une variable y :

¨

y = f (y, ˙y , t ) (3.2)

En définissant les variables x1 = y et x2= ˙y , cette équation peut être ramenée au système suivant :

˙

x2= f (x1, x2, t) x˙1= x2 (3.3)

qui est bien de la forme (3.1) où f1(x, t ) = x2et f2= f .

F Le passage d’un système d’équations du deuxième ordre à M variables vers un système du premier ordre à N= 2M variables est justement ce qui est réalisé en passant de la mécanique de Lagrange à la mécanique de Hamilton. Les équations du mouvement de Hamilton sont de la forme (3.1), mais leur structure symplectique est spécifique, alors que la forme (3.1) est plus générale.

(20)

A

Exemple : Mouvement planétaire

Considérons premièrement un problème dont nous connaissons la solution analytique : celui du mouvement d’un corps de masse m dans le champ gravitationnel d’un objet de masse M , fixe à l’origine. Nous savons que le problème peut être limité à deux dimensions d’espace, en raison de la conservation du moment cinétique.

Adoptons les coordonnées cartésiennes(x , y ), et soit (vx, vy) les vitesses correspondantes. Les équa-tions du mouvement pour ce problème sont, en forme vectorielle,

˙r= v ˙v= −k

r3r (3.4)

où nous avons introduit la constante k = G M . Nous pouvons toujours choisir un système d’uni-tés pour le temps dans lequel cette constante vaut 1 (voir ci-dessous). Le système d’équations se ramène donc à l’ensemble suivant, si on numérote les variables dans l’ordre suivant :(x , y, vx, vy) :

˙ x1= x3 x˙2= x4 x˙3= −x1 r3 x˙4= − x2 r3 r := (x 2 1+ x 2 2)1/2 (3.5)

Choix du système d’unités

Dans la résolution numérique de problèmes physiques, il est très important d’utiliser des grandeurs relatives à certaines échelles caractéristiques du problème, de manière à ce que les nombres à vir-gules flottantes qui sont manipulés n’aient pas des exposants extravagants. Non seulement cela nous protège-t-il des limites numériques inhérentes à ces nombres, mais cela permet aussi de don-ner un sens physique plus évident aux résultats. Manipuler des valeurs relatives équivaut bien sûr à choisir un système d’unités particulier, différent d’un système standard, comme le SI.

Par exemple, supposons que le temps t soit défini en rapport avec un temps caractéristiqueτ, et les distances définies en rapport avec une longueur caractéristique a . Le temps mesuré en SI serait alorsτt , où t est maintenant un rapport ‘sans unités’, et pareillement pour la position ar. Rempla-çons alors, dans les équations (3.4), le temps t par tτ, le rayon r par r a et la vitesse v par v a/τ. On trouve alors les équations suivantes :

˙r= v ˙v= −G Mτ 2

a3r3 r (3.6)

La constante k de l’équation (3.4) vaut donc G Mτ2/a3, alors que les variables t , r et v sont sans unités, c’est-à-dire exprimées comme multiples deτ, a et a/τ, respectivement.

Si on choisit a comme étant le demi-grand axe de l’orbite de la Terre autour du soleil (une unité astronomique) etτ comme étant la période τde cette orbite, alors, étant donné la relation connue pour cette période,

τ2

= a

3(2π)2

G M (3.7)

il s’ensuit que k = (2π)2. Si, au contraire, on insiste pour que k = 1 – le choix que nous avons fait ci-dessus – alors le temps caractéristique estτ = τ/2π.

Une analyse d’échelle comme celle-ci doit en principe être faite pour chaque problème résolu de manière numérique.

(21)

B

Méthode d’Euler

La méthode la plus élémentaire pour solutionner numériquement l’équation différentielle (3.1) est la méthode d’Euler. Sa simplicité est cependant contrebalancée par son manque de précision et de stabilité. Elle consiste à remplacer l’équation (3.1) par une équation aux différences finies : l’axe du temps est remplacé par une suite d’instants également espacés t → tn = nh, (n = 0,1,2...), où h est le pas temporel. La fonction x(t ) est alors remplacée par une suite {xn} et la dérivée est estimée par l’expression1

˙x(t ) ≈xn+1− xn

h (3.8)

Le système (3.1) est alors modélisé par l’équation aux différences suivante :

xn+1= xn+ hf(xn, tn) (3.9)

Cette expression définit une application explicite xn7→ xn+1qui permet, par récurrence, d’obtenir la suite complète à partir des valeurs initiales x0.

3.B.1 Précision de la méthode d’Euler

La principale source d’erreur de la méthode d’Euler provient du pas temporel h , qui doit être pris suffisamment petit. Cette erreur est qualifiée d’erreur de troncature. Si nous avions accès aux dé-rivées d’ordre arbitraire de la fonction x(t ), nous pourrions envisager le développement de Taylor suivant : xn+1= xn+ dx dt tn h+1 2 d2x dt2 tn h2+ ··· (3.10)

Le remplacement (3.9) revient à négliger les termes en h2(ou plus grand) dans ce développement. On dit alors que la méthode d’Euler est du premier ordre en h .

3.B.2 Stabilité de la méthode d’Euler

Au-delà des considérations de précision, l’application (3.9) est aussi sujette à des erreurs d’arrondi. Supposons à cet effet qu’une telle erreur produise une déviationδxn de la solution numérique, par rapport à la solution exacte de l’équation aux différences (3.9). La méthode sera stable si cette déviation décroît avec le temps et instable dans le cas contraire. Appliquons un développement limité à l’éq. (3.9) :

δxn+1= δxn+ h

∂ xαf(xn, tn)δxα,n ou δxn+1= (I + hM)δxn (3.11) où la matrice M possède les composantes suivantes :

Mαβ= ∂ fα

∂ xβ (3.12)

(22)

et est évaluée au temps tn.

De toute évidence, la méthode d’Euler sera instable si la matrice(I + hM) possède au moins une valeur propre en dehors de l’intervalle(−1,1), de manière répétée en fonction du temps. En effet, dans ce cas, l’itération de la procédure va produire des différencesδxn de plus en plus grandes. Dans le cas d’une seule variable (N = 1), la condition de stabilité revient à

−1 < 1 + hd f dx < 1 =⇒ d f dx < 0 et d f dx < 2 h (3.13) step

Exemple 3.1 Équation linéaire à une variable

Considérons l’équation

˙

x= λx (3.14)

dont la solution analytique est x(t ) = x (0)eλt. La méthode d’Euler produit l’équation aux différences sui-vante :

xn+1= xn+ hλxn= (1 + hλ)xn (3.15)

L’analyse de stabilité produit la relation suivante pour les déviations :

δxn+1= (1 + hλ)δxn (3.16)

ce qui montre que la méthode d’Euler est stable seulement siλ < 0 (décroissance exponentielle) et instable dans le cas d’une croissance exponentielle (λ > 0) ou d’une oscillation (λ imaginaire). Elle peut même être instable dans le cas d’une décroissance exponentielle si h> 2/|λ|.

3.B.3 Méthode prédicteur-correcteur

Une façon simple d’améliorer la méthode d’Euler est de la scinder en deux étapes : 1. On procède à une prédiction sur la valeur au temps tn+1: xpr.n+1= xn+ hf(xn, tn).

2. On procède ensuite à une correction de cette prédiction, en remplaçant la dérivée évaluée à xn par la moyenne de la dérivée évaluée à(xn, tn) et (xpr.n , tn+1) :

xn+1= xn+12h f(xn, tn) + f(xpr.n+1, tn+1) (3.17) On montre que cette méthode, qui requiert manifestement deux fois plus d’évaluations de f que la méthode d’Euler simple, est cependant du deuxième ordre en h , c’est-à-dire que l’erreur de tron-cature est d’ordre h3. Voyons la démonstration : écrivons premièrement une expression explicite de l’éq. (3.17) :

xn+1= xn+12h f(xn, tn) +12h f(xn+ hf(xn, tn), tn+1) (3.18) On développe ensuite le dernier terme au premier ordre en série de puissances de h :

f(xn+ hf(xn, tn), tn+ h) = f(xn, tn) + h ∂ f ∂ xi fi+ h ∂ f ∂ t + O (h 2) = f(xn, tn) + h df dt + O (h 2) (3.19)

(23)

où les dérivées sont évaluées à(xn, tn) et la dérivée totale de f par rapport au temps est obtenue par la règle habituelle : df dt = ∂ f ∂ t + ∂ f ∂ xi dxi dt = ∂ f ∂ t + ∂ f ∂ xi fi (3.20)

car f est la dérivée de x par rapport au temps. On peut combiner les trois dernières équations en une seule : xn+1= xn+ h dx dt tn +1 2h 2d2x dt2 tn + O (h3) (3.21)

ce qui n’est rien d’autre que le développement limité de xn+1au deuxième ordre, avec les coeffi-cients appropriés. On en conclut donc que la formule (3.17) fournit donc une estimation de xn+1, correcte à l’ordre h2.

C

Méthode de Runge-Kutta

La méthode de Runge-Kutta est une amélioration notable de la méthode d’Euler, et constitue en fait une généralisation de la méthode prédicteur-correcteur. Elle consiste à évaluer la dérivée f non pas au temps tn, ni au temps tn+1, mais entre les deux en général.

3.C.1 Méthode du deuxième ordre

Commençons par démontrer la méthode de Runge-Kutta d’ordre 2. Nous allons supposer qu’une étape de la méthode prend la forme suivante :

xn+1= xn+ ak1+ b k2 k1= hf(xn, tn)

k2= hf(xn+ βk1, tn+ αh)

(3.22)

et nous allons chercher à déterminer les constantes a , b ,α et β de manière à maximiser la préci-sion de la méthode. Notons que les valeurs a = b = 12 etα = β = 1 correspondent à la méthode prédicteur-correcteur (3.17). Mais d’autres valeurs donnent aussi une prédiction du deuxième ordre.

Pour déterminer ces paramètres, appliquons encore une fois un développement limité à k2, en te-nant compte de (3.20) : xn+1= xn+ ahf + b hf xn+ hβf(xn, tn), tn+ αh + O (h3) = xn+ (a + b )hf + b βh2 ∂ f ∂ xi ∂ xi ∂ t + b αh 2∂ f ∂ t + O (h 3) (3.23)

où toutes les expressions sont évaluées à(xn, tn) dans la dernière ligne. Pour que cette dernière expression coïncide avec le développement de Taylor correct (3.21), les paramètres a , b ,α et β doivent respecter les contraintes suivantes :

(24)

La solution à ces contraintes n’est pas uniquement a = b = 12 etα = β = 1 (méthode prédicteur-correcteur). Un autre choix possible est a = 0, b = 1 et α = β = 12, qui correspond à ce qui est généralement appelé la méthode de Runge-Kutta du deuxième ordre :

k1= hf(xn, tn)

k2= hf(xn+ k1/2, tn+ h/2) xn+1= xn+ k2+ O (h3)

(3.25)

Cela revient à utiliser un prédicteur pour évaluer la dérivée au milieu de l’intervalle[tn, tn+1] et à utiliser cette dérivée pour calculer la valeur de xn+1.

3.C.2 Méthode du quatrième ordre

La version la plus utilisée de la méthode de Runge-Kutta est celle du quatrième ordre, dans laquelle l’erreur commise est d’ordre h5. La formule aux différences correspondante est la suivante :

k1= hf(xn, tn) k2= hf(xn+ k1/2, tn+ h/2) k3= hf(xn+ k2/2, tn+ h/2) k4= hf(xn+ k3, tn+ h) xn+1= xn+16k1+13k2+13k3+16k4+ O (h5) (3.26)

Voyons le sens de chacune de ces étapes :

1. Pour commencer, on évalue la dérivée k1/h au point (xn, tn).

2. On utilise cette dérivée pour obtenir un premier point médian xn+ k1/2. 3. On calcule ensuite la dérivée k2/h à ce point médian.

4. On calcule une deuxième estimation xn+k2/2 de ce point médian et on y calcule encore une fois la dérivée k3/h.

5. On calcule ensuite la dérivée k4/h à une première estimation du point final xn+ k3.

6. Enfin, le point final estimé par la méthode est obtenu par une combinaison des quatre déri-vées calculées aux étapes précédentes.

3.C.3 Contrôle du pas dans la méthode de Runge-Kutta

Un solutionneur d’équations différentielles qui procède en suivant un pas temporel h constant est condamné soit à l’inefficacité (h trop petit), soit à commettre des erreurs de troncature non contrô-lées (h trop grand). Il est impératif que le pas temporel s’adapte à chaque instant à l’erreur de tron-cature commise à chaque étape. Cette dernière peut être estimée en procédant à deux étapes de Runge-Kutta du quatrième ordre, chacune de pas h/2, et en comparant le résultat xn+1obtenu après la deuxième étape à celui obtenu en procédant directement à une étape de pas h . Si la différence est inférieure à une précision demandée à l’avance, on peut alors augmenter la valeur de h pour la prochaine itération, sinon on peut la réduire.

(25)

Des calculs supplémentaires sont bien sûr nécessaires pour évaluer l’erreur de troncature, mais l’al-gorithme au total demande moins de calculs, car son erreur est contrôlée : le pas h peut augmenter si l’erreur est tolérable, et de cette manière alléger le coût des calculs. D’un autre côté, si h doit être diminué, c’est que les calculs auraient autrement été erronés à un degré jugé inacceptable.

pas direct

ª

2 pas successifs

t

FIGURE3.1

Nombre d’évaluation des dérivées dans une étape de la méthode de Runge-Kutta adaptative. Un cercle noir représente une évaluation des dérivées et un cercle blanc une dérivée qui a été gardée en mémoire.

Une façon élémentaire de procéder au contrôle du pas est la méthode du doublement :

1. On effectue un pas temporel h à l’aide de la méthode du quatrième ordre (RK4). On obtient une variable mise à jour x(1)n+1.

2. On effectue deux pas temporels successifs h/2, à partir du même point de départ, pour arriver à une valeur x(2)n+1.

3. La différence|x(2)n+1− x(1)n+1| nous donne une estimation de l’erreur de troncature ∆1. Nous pouvons par la suite modifier h (en l’augmentant ou le diminuant) pour viser une erreur de troncature constante0. En posant que l’erreur a la forme∆ = C h5, où C est une constante indépendante de h , on trouve, pour deux valeurs différentes h0et h1, la relation

0 1 = h5 0 h15 et donc h0= h1  0 1 ‹1/5

À partir d’une erreur1, nous devons donc réajuster h ainsi afin d’espérer obtenir une erreur

0: h→ h  0 1 ‹1/5 (3.27) On peut aussi multiplier par un facteur de sécurité (par exemple 0.9) afin de tempérer quelque peu l’augmentation de h , sans jamais faire plus que de quadrupler le pas.

4. On note que le nombre d’évaluations de la dérivée dans cette procédure est de 11 par étape, alors que la méthode utilisée avec un pas de h/2 (qui nous donne une précision semblable) nécessite 8 évaluations. Il y a donc un coût (surcharge) de 118 = 1.375 dans l’estimation de l’erreur. Cependant, ce coût est largement recouvré par le contrôle accru de la méthode. Quoique la méthode du doublement soit simple à comprendre, elle est maintenant dépassée par la méthode dite de Runge-Kutta-Fehlberg, qui effectue une étape du 5e ordre en même temps qu’une étape du 4e ordre et compare les deux afin d’estimer l’erreur de troncature (la méthode est souvent désignée par son acronyme RKF45). Au total, le nombre d’évaluations nécessaire par étape est de 6, soit presque deux fois moins que la méthode de doublement.2

(26)

D

Méthode de Richardson

Une façon ingénieuse d’augmenter la précision d’une méthode est de procéder, sur un intervalle

H donné, à une subdivision en m sous-intervalles équidistants. On traite ensuite le problème pour

chacun des sous-intervalles de dimension h= H /m, de manière à obtenir un prédicteur x(t + H ) pour quelques valeurs de m (par exemple m =2, 4, 6) et on extrapole vers m → ∞ (ou h → 0). La première étape consiste à construire un prédicteur pour une valeur donnée de m . La deuxième étape, qui applique une extrapolation vers h→ 0, suppose que le prédicteur x(t +H ) est une fonction analytique de H autour de H = 0, et qu’une extrapolation, par exemple polynomiale, nous donne accès à cette limite. Le tout constitue la méthode de Richardson.

On se trouve ici à travailler avec un pas H/m fixe dans un intervalle donné, mais un contrôle de pré-cision peut aussi être appliqué subséquemment à la valeur de H elle-même, de manière à s’adapter à une précision requise.

Une façon simple de procéder avec m sous-intervalles est la méthode aux différences modifiées (angl. modified midpoint method), qui évalue la dérivée à partir de l’instant suivant et de l’instant précédent (sauf aux extrémités) :

˜x0= xn ˜x1= ˜x0+ hf(˜x0, t) h := H m ˜x2= ˜x0+ 2hf(˜x1, t + h) . . . ˜xj+1= ˜xj−1+ 2hf(˜xj, t + j h) j= 1,2,...,m − 1 . . . x(t + H ) ≈ xn+1=12(˜xm+ ˜xm−1+ hf(˜xm, t + H )) (3.28)

Nous avons introduit une série de prédicteurs ˜xj désignant la jevaleur dans le nesous-intervalle. Cette méthode requiert de conserver en mémoire non seulement la valeur courante de ˜xj, mais la valeur précédente ˜xj−1, ce qui n’est pas un problème. Par contre, les premières et dernières valeurs ( j = 0 et j = m) requièrent un traitement spécial. La dernière valeur ˜xm sert de prédicteur pour x(t + H ), qui est ensuite amélioré à la dernière équation ci-dessus.3

Suite à ce calcul pour différentes valeurs de m , on peut procéder à une extrapolation pour obtenir une estimation optimale de xn, et ensuite passer à l’intervalle H suivant. La méthode de

Bulirsch-Stoer propose une façon particulière de réaliser cette extrapolation, et pour modifier la valeur de H au besoin (pas adaptatif). Les valeurs de m utilisées dans la méthode de Bulirsch-Stoer peuvent

facilement atteindre la centaine ; donc le pas H est généralement assez grand, et correspond au pas d’affichage des résultats. Voir Numerical Recipes pour plus de détails.

3. Si cette dernière équation peut sembler mystérieuse, elle garantit par contre que l’erreur théorique commise par cette méthode, lorsque développée en puissances de h , ne contient que des termes de degré pair, c’est-à-dire des puis-sances entières de h2.

(27)

E

Méthode d’Adams

L’idée de base derrière la méthode d’Adams est d’utiliser les s points précédents d’une solution numérique afin de prédire le prochain point, à l’aide d’une extrapolation polynomiale. Il existe deux variantes :

1. la méthode d’Adams-Bashforth, qui prédit xn+1 à l’aide des s points xn, xn−1, xn−s +1 et des dérivées correspondantes fi:= f(xi, ti). C’est une méthode d’ordre s .

2. La méthode d’Adams-Moulton, qui prédit xn+1à l’aide, en plus des s points précédents, d’un prédicteur xpr.n+1sur la valeur de xn+1. C’est une méthode d’ordre s+ 1.

3.E.1 Méthode d’Adams-Bashforth

Pour s = 1, la méthode d’Adams-Bashforth coïncide avec la méthode d’Euler. Voyons ce qu’elle donne pour s = 2. Afin de simplifier la notation, posons n = 1, de sorte qu’on vise à prédire xl’aide de x1, x0, f1 et f0. On suppose en outre que les temps ti sont disposés uniformément, avec un pas temporel h . On remplace la fonction f(x(t ), t ), qui est inconnue, car x(t ) n’est pas connu explicitement, par une extrapolation linéaire obtenue des deux points précédents :

f(x(t ), t ) → P1(t ) = t− t1 t0− t1 f0+ t − t0 t1− t0 f1 =1 h[−(t − t1)f0+ (t − t0)f1] = 1 h[t (f1− f0) + t1f0− t0f1] (3.29)

Ensuite, on calcule simplement l’intégrale de cette fonction pour obtenir x(t2) : x2= x1+ ∫ t2 t1 P1(t )dt = x1+ 1 2h(f1− f0)(t 2 2− t 2 1) + 1 h(t1f0− t0f1)(t2− t1) = x1+ 1 2(f1− f0)(t2+ t1) + t1f0− t0f1 = x1+ 1 2f1(t2+ t1− 2t0) + 1 2f0(t1− t2) = x1+ 3 2h f1− 1 2h f0 (3.30)

On constate qu’on obtient un autre cas particulier de la méthode générale du deuxième ordre, avec

a=32, b= −12,α = −1 et β = −1.

À l’ordre s= 3, on devrait utiliser les trois derniers points x0,1,2, et prédire x4à l’aide du polynôme d’ordre deux unique qui passe par ces trois points, donné par la formule de Lagrange (éq. (9.1), à la page83) : f(x(t ), t ) → P2(t ) = (t − t1)(t − t2) (t0− t1)(t0− t2) f0+ (t0− t )(t − t2) (t0− t1)(t1− t2) f1+ (t1− t )(t0− t ) (t1− t2)(t0− t2) f2 (3.31) et ainsi de suite, pour les ordres supérieurs.

(28)

Au total, pour les cinq premiers ordres, on obtient les règles suivantes : s= 1 xn+1= xn+ hfn (Euler) (3.32) s= 2 xn+1= xn+ h 2 3fn− fn−1  (3.33) s= 3 xn+1= xn+ h 12 23fn− 16fn−1+ 5fn−2  (3.34) s= 4 xn+1= xn+ h 24 55fn− 59fn−1+ 37fn−2− 9fn−3  (3.35) s= 5 xn+1= xn+ h 720 1901fn− 2774fn−1+ 2616fn−2− 1274fn−3+ 251fn−4  (3.36)

3.E.2 Méthode d’Adams-Moulton

La méthode d’Adams-Moulton utilise les s points précédents et le point désiré xn+1dans l’extrapo-lation. Considérons par exemple le cas s = 1. Reprenons la formule (3.29) ci-dessus, sauf que cette fois n= 0 et x1est inconnu. Dans ce cas,

x1= x0+ ∫ t1 t0 P1(t )dt = x0+ 1 2h(f1− f0)(t 2 1− t 2 0) + 1 h(t1f0− t0f1)(t1− t0) = x0+ 1 2(f1− f0)(t1+ t0) + t1f0− t0f1 = x0+ h 2(f1+ f0) (3.37)

On reconnait dans cette dernière équation la méthode prédicteur-correcteur (3.17), pourvu que la valeur de x1utilisée dans le membre de droite soit un prédicteur, par exemple obtenu par la mé-thode d’Euler.

Pour les quatre premiers ordres, on obtient les règles suivantes par cette méthode :

s= 1 xn+1= xn+ h 2 fn+1+ fn  (3.38) s= 2 xn+1= xn+ h 12 5fn+1+ 8fn− fn−1  (3.39) s= 3 xn+1= xn+ h 24 9fn+1+ 19fn− 5fn−1+ fn−2  (3.40) s= 4 xn+1= xn+ h 720 241fn+1+ 646fn− 264fn−1+ 106fn−2− 19fn−3  (3.41) En pratique, la valeur de fn+1doit être obtenue par une méthode explicite, à l’ordre précédent, soit par la méthode d’Adams-Bashforth au même s . Ainsi, en substituant (3.32) dans (3.38) pour la va-leur de xn+1dans fn+1, on obtient la méthode prédicteur-correcteur (3.17). En substituant plutôt la valeur (3.35) de xn+1dans (3.41), on obtient une méthode d’ordre 5 qui ne demande que deux éva-luations de la fonction f par étape ! Cependant, cette méthode demande un pas temporel h constant.

(29)

SIMULATION DE PARTICULES I : MÉTHODE DE

VERLET

L’une des applications les plus répandues du calcul scientifique est la simulation du mouvement d’un grand nombre de particules sous l’influence de forces mutuelles et externes. L’objectif de ces simulations est typiquement de comprendre le comportement statistique de la matière, d’où le nom dynamique moléculaire donné à ce champ d’applications. Même s’il est en principe préfé-rable d’utiliser la mécanique quantique pour décrire le mouvement des atomes et des molécules, il est acceptable d’utiliser la mécanique classique pour ce faire si les longueurs d’onde impliquées sont suffisamment petites par rapport aux distances intermoléculaires. D’autres applications de ce genre sont aussi très éloignées du domaine quantique, par exemple en astronomie.

A

Algorithme de Verlet

La dynamique moléculaire est un domaine vaste ; il est hors de question de lui rendre justice dans cette section. Nous allons uniquement décrire l’algorithme de Verlet, utilisé pour résoudre les équa-tions du mouvement des particules impliquées. Au fond, il s’agit ici de résoudre un système d’équa-tions différentielles, représentant les équad’équa-tions du mouvement de Newton, mais à un nombre plu-tôt grand de particules. Pourquoi ne pas simplement utiliser la méthode de Runge-Kutta avec pas contrôlé ? C’est une possibilité, mais l’algorithme que nous présenterons plus bas est plus simple, du deuxième ordre, et se compare à la méthode prédicteur-correcteur. La solution ne sera peut-être pas aussi précise que celle obtenue par Runge-Kutta à pas adapté, mais le calcul sera par contre plus rapide.1Notons que l’intérêt de la simulation n’est pas ici de suivre à la trace chaque particule, mais de dégager le comportement de l’ensemble.

Soit donc un ensemble de N particules, de positions ri et de vitesses vi. Chaque particule ressent une force Fiqui dépend en principe le la position de toutes les particules, ainsi que de la vitesse vi, si on veut tenir compte de processus d’amortissement (par exemple le rayonnement ou la diffusion de chaleur). Nous avons donc à résoudre le système d’équations différentielles suivant pour les 2N vecteurs riet vi: dri dt = vi dvi dt = 1 miFi(rj, vi, t) (4.1)

(30)

La méthode de Verlet est basée sur une formule du deuxième ordre pour l’évaluation des dérivées : ri(t + h) = ri(t ) + hvi(t ) + h2 2mi Fi(t ) + O (h4) vi(t + h) = vi(t ) + h 2mi ” Fi(t + h) + Fi(t )— + O (h3) (4.2)

L’important ici est que toutes les positions doivent être mises à jour avant que les vitesses le soient, car la force Fi(t + h) doit être calculée entretemps. Ceci suppose que la force ne dépend que des positions. Noter que nous avons supposé que la masse mi peut être différente d’une particule à l’autre.

On peut aussi de cette manière traiter d’une force qui dépend linéairement de la vitesse, par exemple dans le but de modéliser un amortissement ou, éventuellement, l’effet d’un champ ma-gnétique sur des particules chargées. Voyons comment procéder dans le cas d’une force d’amor-tissement−mγv qui s’oppose linéairement à la vitesse (γ est la force d’amortissement par unité de masse). Afin d’avoir une évolution valable au deuxième ordre, on doit exprimer cette force en fonction de la vitesse moyenne aux temps t et t+ h :

vi(t + h) = vi(t ) + h 2mi [Fi(t + h) + Fi(t )] − 2 [vi(t + h) + vi(t )] (4.3) (Fi représente les forces qui ne dépendent que de la position). On peut ensuite isoler vi(t + h), à la manière d’un schéma implicite, et on trouve

vi(t + h) = 1 1+ 2 § 1− 2 ‹ vi(t ) + h 2mi [Fi(t + h) + Fi(t )] ª (4.4)

4.A.1 Exemple : force constante

Nous allons étudier par la méthode de Verlet un ensemble de particules exerçant les unes sur les autres une force centrale constante en deçà d’un certain domaine. Cette force sera dérivée du po-tentiel illustré à la figure4.1, et aura la forme suivante :

F(r ) = ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ V0− V1 r0 si r< r0 V1 rm− r0 si r0< r < rm 0 si r> rm (4.5)

Cette loi de force est une caricature simple d’une attraction à distances modérées, et d’une répul-sion à courte distance, avec une distance d’équilibre r0. Un potentiel d’interaction plus réaliste se-rait le célèbre potentiel de Lennard-Jones :

V(r ) = 4V0 •r 0 r 12 − r 0 r 6˜ (4.6)

(31)

V1 V0 rm r0 r V(r) FIGURE4.1

B

Complexité algorithmique des simulations de particules

La méthode de Verlet que nous avons présentée a, dans sa version simple, un grave défaut : le temps de calcul des forces est proportionnel au nombre de paires de particules, soit12N(N −1), qui se

com-porte commeO (N2) quand N est grand. Si on désire simuler un très grand nombre de particules, l’évaluation des forces va simplement devenir trop onéreuse et la simulation impossible.

La solution, bien sûr, est que les forces décroissent rapidement avec la distance. Donc il n’est pas nécessaire de calculer tous les détails des forces pour des particules qui sont éloignées l’une de l’autre. Deux possibilités générales se présentent :

1. Si la force est à courte portée, en particulier si elle décroît plus rapidement que 1/r2en di-mension trois, alors on peut négliger les particules qui sont trop éloignées. Supposons aux fins de l’argument qu’on peut négliger toutes les forces mutuelles au-delà d’une certaine distance R . C’est effectivement ce qui est fait dans le code présenté ci-haut. Cependant, ce code doit tout de même effectuer une boucle sur toutes les paires de particules pour vérifier si les distances sont inférieures à R , ce qui ne règle pas le problème de la complexité algo-rithmique d’ordre N2. Pour s’en sortir, il faut une représentation des données différentes, dans laquelle on peut avoir accès directement aux particules qui sont dans une région don-née, sans avoir à chercher le tableau contenant les positions des particules. Par exemple, on pourrait diviser l’espace en un réseau de cellules identiques de taille R , et construire une liste dynamique des particules qui résident à un instant donné dans chaque cellule. Dans le calcul des forces, nous n’aurions alors qu’à considérer les particules qui résident dans une cellule donnée et les cellules immédiatement voisines. La complexité algorithmique serait réduite à O (M n2) = O (N n), M = N /n étant le nombre de cellules et n le nombre de particules par cel-lule. Un tel schéma demande bien sûr à garder trace des particules qui passent d’une cellule à l’autre lors d’un pas temporel. En pratique, on définirait des cellules qui se chevauchent sur une distance égale à la portée de la force, comportant chacune une région intérieure et une région périphérique : il ne serait alors pas requis de sortir de la cellule pour calculer les forces et seules les particules de la région intérieure seraient propagées : celles de la région périphérique étant en même temps dans la région intérieure d’une cellule voisine, elles ne servent dans la cellule courante qu’au calcul des forces.

2. Si les forces sont à longue portée, comme la force gravitationnelle, alors on ne peut pas sim-plement ignorer les particules éloignées. La raison étant que même si la force décroît comme 1/r2, le nombre de particules situées à une distance d’ordre r d’un point donné croît comme

(32)

ignorant les particules éloignées. Cependant, on peut appliquer dans ce cas le développe-ment multipolaire et considérer l’influence de groupes de particules et non de particules in-dividuelles. Une façon de procéder est de construire un réseau de cellules comme au cas pré-cédent, mais en plus de les organiser en une hiérarchie de super-cellules à plusieurs niveaux : les cellules de taille R sont contenues dans des super-cellules de taille 3R , elles-mêmes conte-nues dans des super-cellules de taille 32R , et ainsi de suite. Dans le calcul des forces, on

cal-cule quelques multipôles produits par chaque cellule d’un niveau donné, qui ensuite servent à calculer les multipôles du niveau supérieur de cellules, etc. De cette manière, la complexité algorithmique du problème passe deO (N2) à O (N logN ) (le nombre de niveaux de cellules étant d’ordre log(N ). Ce qui présente est une caricature de ce qui est en fait accompli dans ces algorithmes dits de multipôles rapides, mais l’idée de base est la même.

C

Aspects quantiques et statistiques

Dans le domaine microscopique, on peut se demander si la mécanique classique est appropriée pour décrire le mouvement des molécules. En réalité, seul le mouvement des ions est déterminé classiquement ; les forces intermoléculaires dépendent cependant des configurations électroniques qui, elles, ne peuvent être déterminées que par la mécanique quantique. Les véritables simulations de dynamique moléculaire tiennent donc compte de la mécanique quantique, à un certain degré d’approximation, dans le calcul des forces. Une avancée considérable a été accomplie dans ce do-maine par Car et Parinello en 1985 avec l’introduction d’une méthode rapide permettant d’avancer dans les temps les configurations électroniques en même temps que les positions des ions. Lors-qu’un calcul quantique – même approximatif – des forces inter ioniques est effectué, on parle de

dynamique moléculaire ab initio. Sinon, il s’agit de dynamique moléculaire classique.

Les systèmes simples qui sont simulés par le code décrit plus haut sont décrits par l’ensemble mi-crocanonique : le nombre de particules et l’énergie du système sont constants (sauf si on inclut un amortissement). Il peut être cependant plus réaliste, en simulant un système complexe, de suppo-ser que ce système est lui-même un sous-ensemble d’un système encore plus grand, avec lequel il échange de l’énergie et, à la rigueur, des particules. Autrement dit, on peut simuler le système en le mettant en contact avec un environnement caractérisé par une température T (ensemble cano-nique). La simulation doit alors comporter une procédure pour communiquer aux particules qui parviennent à la frontière du domaine étudié une signature de leur interaction avec l’environne-ment, par exemple une variation de l’énergie, caractéristique de l’ensemble canonique. On peut aussi ajouter une force aléatoire agissant sur chaque particule qui, combinée à un terme d’amortis-sementγ, permet de reproduire une distribution canonique (dynamique de Langevin).

Références

Documents relatifs

, 512, 1024 calculer l’erreur exacte pour chaque méthode et tracer sur un même graphique à double échelle logarithmique (n,

(3) Déterminer le nombre N de sous-intervalles qu’il faudrait utiliser pour avoir une approximation de I par la méthode composite de Simpson avec une erreur inférieure à. ε

[r]

En cas d'impossibilité (ce qui ne peut apparaître que pour une grille (2n+1)x(2n+1) ), II peut marquer toute case choisie dans un rectangle dont les deux cases sont

Deux jolies variations autour du théorème de Rolle ne présentant pas de difficultés particulières : à chaque fois, un raisonnement par récurrence permet de conclure.. Nous

Le but de cet exercice est d’étudier quelle est la précision qu’il serait raisonnable d’attendre pour la valeur de ξ et d’employer ce théorème, pour tester des

[r]

[r]