Licence de Mathématiques - Espace Pédagogique Claroline

publicité
Université de Montpellier II
Année Universitaire 2013-2014
Faculté des Sciences
Mathématiques
Licence de Mathématiques : Troisième Année
GLMA 506 Analyse Numérique des Équations
différentielles ordinaires
Pascal Azerad - Michel Cuer
13 décembre 2013
1
2
3
Table des matières
0.1
0.2
0.3
Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Motivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Signification des termes utilisés dans le programme . . . . . . . . . . . . . . . . . . . . . . . .
1 Représention des nombres en machines et arithmétiques des ordinateurs
1.1 La représentation des nombres en machine . . . . . . . . . . . . . . . . . . . .
1.1.1 Le codage des entiers relatifs . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Le codage des flottants . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Quelques particularités des calculs en flottants illustrées par des exemples . .
1.2.1 Calcul d’une somme évidente . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Calcul de π par la méthode d’Archimède . . . . . . . . . . . . . . . . .
1.2.3 Un autre exemple d’élimination catastrophique de décimales. . . . . .
1.2.4 Un dernier exemple : un calcul rapide d’intégrales . . . . . . . . . . . .
1.3 Appendice A Le code float.gui . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
8
8
10
10
11
11
15
15
16
18
18
20
2 Résolution des équations scalaires non linéaires
2.1 Quelques rappels d’analyse réelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Deux démonstrations du théorème des valeurs intermédiaires . . . . . . . . . . . . . .
2.1.1.1 Première démonstration théorique. . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1.2 Deuxième démonstration constructive. . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Le théorème du point fixe de Banach et la méthode des approximations successives . .
2.2 La méthode de Newton (ou de Newton-Raphson) . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Première démonstration. Cas où f est de classe C 2 , strictement monotone et convexe
ou concave et change de signe sur un intervalle [a, b] . . . . . . . . . . . . . . . . . . .
2.2.2 Deuxième démonstration : convergence locale au voisinage d’un zéro ξ où f ′ (ξ) 6= 0
qui englobe le cas d’un zéro qui est un point d’inflexion . . . . . . . . . . . . . . . . .
2.3 Quelques procédés d’accélération de convergence de suites qui font plutôt parties de notions
élémentaires d’analyse numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 La méthode d’accélération de convergence appelée ∆2 d’Aitken . . . . . . . . . . . . .
2.3.2 Le procédé ∆2 diagonal et la méthode de Aitken-Steffensen . . . . . . . . . . . . . . .
2.4 Les méthodes de la fausse position, de la sécante et l’algorithme de Dekker-Brent . . . . . . .
2.4.1 Les méthodes de la fausse position et de la sécante . . . . . . . . . . . . . . . . . . . .
2.4.1.1 La méthode de la fausse position . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1.2 La méthode de la sécante . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 L’algorithme de Dekker-Brent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Compléments : notions sur le calcul de zéros multiples . . . . . . . . . . . . . . . . . . . . . .
2.6 Appendice Le code fzerotx.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 TD et TP des deux premiers chapitres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
23
23
24
24
26
3 Interpolation.
3.1 Interpolation polynomiale . . . . . . . .
3.1.1 Existence et unicité du polynôme
3.1.2 Interpolation et approximation .
3.1.3 Phénomène de Runge . . . . . .
60
60
60
60
62
. . . . . . . . .
d’interpolation.
. . . . . . . . .
. . . . . . . . .
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
27
30
30
30
31
32
32
33
37
38
40
43
3.2
3.3
3.4
Polynômes de Lagrange. . . . . . .
Polynômes de Newton. . . . . . . .
Splines cubiques naturelles. . . . .
3.4.1 Spline= tige souple . . . . .
3.4.2 Calcul des splines cubiques
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
64
67
67
68
4 Quadrature.
4.1 Méthodes élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Principe d’intégration numérique : poids et noeuds. . . . . . . . . . . .
4.1.2 Rectangle, Trapèze, Simpson . . . . . . . . . . . . . . . . . . . . . . .
4.1.3 Ordre et Formules d’erreur . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Méthodes à pas multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Principe des méthodes composées. . . . . . . . . . . . . . . . . . . . .
4.2.2 Accélération de la convergence. Extrapolation de Romberg-Richardson.
4.2.3 Methode de Montecarlo . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Méthode de Gauss et polynômes orthogonaux. . . . . . . . . . . . . . . . . . .
4.3.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Méthode de Gauss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
70
70
70
70
71
74
74
75
76
76
76
77
5 Méthode des moindres carrés.
5.1 Présentation du problème. Régression linéaire. . .
5.1.1 Droite des moindres carrés. . . . . . . . .
5.2 Interprétation géométrique et écriture matricielle.
5.2.1 Moindres carrés pondérés. . . . . . . . . .
5.3 Algorithme de résolution numérique. . . . . . . .
5.4 TD et TP des chapitres 3, 4, 5 . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
80
80
80
82
84
85
87
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Résolution de systèmes d’équations différentielles ordinaires (problèmes de Cauchy)
103
6.1 Le problème de Cauchy pour les systèmes d’équations différentielles ordinaires . . . . . . . . . 103
6.2 Introduction aux méthodes numériques de résolution des problèmes de conditions initiales
(problème de Cauchy) pour les équations différentielles ordinaires . . . . . . . . . . . . . . . 107
6.2.1 Les méthodes à un pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.2.1.1 Erreurs de consistance (locales) et erreurs globales . . . . . . . . . . . . . . . 108
6.2.1.2 Lemme fondamental de propagation-accumulation et résultat de convergence
de la méthode d’Euler et des méthodes à un pas consistantes. . . . . . . . . . 108
6.2.1.3 Les premières méthode de Runge-Kutta : des méthodes d’ordre deux . . . . . 110
6.2.1.4 un schéma d’ordre 3 : le schéma de Heun . . . . . . . . . . . . . . . . . . . . 113
6.2.1.5 Méthode de Runge-Kutta classique, notions sur les méthodes de Runge-Kutta
plus générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.1.6 Notions sur les estimations d’erreurs utilisées dans les codes adaptatifs . . . . 116
6.2.2 Les méthodes multipas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.2.2.1 Quelques méthodes : Adams (Adams-Bashforth, Adams-Moulton), Nyström,
Milne-Simpson, différentiation rétrograde (BDF pour backward differentiation formula en anglais) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.2.2.2 Un exemple d’instabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.2.2.3 Notions sur le résultat général . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.2.3 Notions sur les problèmes raides (stiff en anglais) . . . . . . . . . . . . . . . . . . . . . 123
6.3 TD et TP du chapitre 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5
6
Introduction
0.1
Organisation
Ce cours de 51h (21h de cours ; 12h de TD ; 18h de TP) est une introduction au calcul scientifique qui complète, par l’étude des méthodes de résolutions numériques des équations différentielles, les notions d’analyse
numérique matricielle vues en deuxième année, ces notions ne constituant pas un pré requis. La description
succincte du programme officiel est constituée des mots clés : “quadratures, problème de conditions initiales,
mise en oeuvre en MATLAB et FORTRAN”. Ce module fait suite et approfondit les notions vues au module
GLMA303 de deuxième année, introduction au calcul scientifique et à la modélisation et prépare à certains
cours de Master (modules GMMA102 : Analyse numérique des équations aux dérivées partielles, GMMA205 :
Optimisation numérique ainsi que FMMA109 : Transformée de Fourier et Radon, Imagerie) qui complètent la
formation de base en analyse numérique par notamment les méthodes de résolution numérique des équations
aux dérivées partielles, les algorithmes d’optimisation et une introduction aux problèmes d’imagerie.
Voici un planning prévisionnel :
1. Représentation des nombres en machines et arithmétiques sur ordinateurs [1.5 séances]
2. Résolution des équations scalaires non linéaires [2 séances]
3. Interpolation polynomiale [1.5 séances]
4. Méthodes de quadrature [3 séances]
5. Méthode des moindres carrés. [1 séance]
6. Résolution d’équations différentielles ordinaires (problème de Cauchy) [4 séances]
Notre emploi du temps cette année :
le cours a lieu le vendredi matin de 9h45 à 11h15 en salle SC 12.01, Les salles, susceptibles de modifications,
apparaissent sur le site de la faculté des sciences, onglet emploi du temps.
Les séances de TP sont une illustration et une mise en oeuvre des points précédents avec l’utilisation de
programmes FORTRAN et les logiciels Matlab, Scilab, Octave, Maple.
Les TP ont lieu le vendredi, une semaine sur deux en général, de 15h à 18h15 en salle multimedia 5.12
(à vérifier sur le site de la faculté). Les thèmes et dates des 6 TP de 3h seront :
Jour
Thème
Jour
Thème
vendredi 20/09/2013
Initiation/Équations
vendredi 15/11/2013
Quadratures/Moindres carrés
vendredi 04/10/2013
Équations/Interpolation
vendredi 06/12/2013
Equations différentielles
vendredi 18/10/2013
Interpolation/Quadrature
vendredi 20/12/2013
Epreuve pratique
Les TD seront constitués d’exercices pour chacun des 6 thèmes du programme. Les séances auront lieu
le mardi matin, une semaine sur deux en général, de 8h à 9h30 en salle TD 4.04. Les thèmes et dates de ces
TD de 1h30 seront :
Jour
Thème
Salle
Jour
Thème
Salle
Mardi 24/09/2013
Représentation des nombres en machine
TD 4.04
mardi 19/11/2013
Contrôle continu
TD 4.04
Mardi 08/10/2013
Equations non linéaires
TD 4.04
mardi 26/11/2013
Moindres carrés
TD 4.04
Mardi 22/10/2013
Interpolation
TD 4.04
mardi 10/12/2013
Equations différentielles ordinaires
TD 4.04
Mardi 05/11/2013
Quadratures
TD 4.04
mardi 17/12/2013
Equations différentielles ordinaires
TD 4.04
7
Pour le contrôle des connaissances, il y aura une interrogation écrite le mardi 19/11/2013, une épreuve
pratique en TP le vendredi 20/12/2013, un problème à faire à la maison et bien sûr une épreuve écrite en
janvier. Si on note :
– T P la note de l’épreuve pratique ;
– Dev la note de devoir à la maison ;
– Int la note de l’interrogation écrite ;
– E la note de l’écrit ;
la note finale sera : max(E, (3 ∗ E + 2 ∗ CC)/5) où CC = (T P + Dev + Int)/3.
0.2
Motivations
Les outils de l’analyse numérique sont utilisés dans toutes les disciplines et sont appliqués dans toutes les
technologies : bureau d’étude pour la conception des appareils ou machines que nous rencontrons dans la vie
courante (four à micro ondes, automobiles, avions, smartphones...), appareils médicaux comme les scanners,
contrôle dans les machines de travaux publics, prévision du temps etc ... Une formation mathématique
équilibrée devrait comporter une initiation aux techniques du calcul scientifique, quel que soit l’emploi auquel
on se destine.
0.3
Signification des termes utilisés dans le programme
Dans le premier thème, représentation des nombres en machine, on s’intéresse aux effets du codage des
nombres en machine sur la précision des calculs. Il faut être conscient du fait qu’il n’est pas possible de
représenter en machine tous les nombres réels (un nombre réel peut contenir une infinité de décimales) ; il
faut faire des approximations et il y a des erreurs d’arrondis. Les systèmes de calculs formels comme MAPLE
manipulent des symboles sans introduire d’erreur d’arrondis, mais il est impossible de traiter ainsi tous les
problèmes de mathématiques ; il faut faire des approximations à un moment ou à un autre.
Dans le deuxième thème, très classique, et déjà rencontré dans le secondaire, on traite les méthodes
numériques de calcul des racines d’une équation f (x) = 0 où f est une fonction réelle de variable réelle.
Dans le troisième thème, interpolation, on s’intéresse à la question de l’approximation par un polynôme
en général, d’une fonction réelle de variable réelle, connue en un nombre fini de points.
Dans le quatrième
thème, quadrature, on traite les méthodes numériques pour évaluer des intégrales
Rb
définies I = a f (x)dx .
Dans le cinquième thème on traite de la méthode des moindres carrés, autrement dit de la meilleure
l’approximation d’une suite de points par un polynôme.
Dans le sixième et dernier thème on traite des méthodes numériques pour approcher la solution
y : t ∈ R → y(t) ∈ Rn
d’une équation différentielle ordinaire :
y′ (t) = f (t, y(t))
La fonction f : (t, y) ∈ R × Rn → f (t, y) ∈ Rn est donnée et ainsi que y(t0 ) ∈ Rn (problème de Cauchy).
Les équations différentielles interviennent dans de nombreuses disciplines sont utilisées pour décrire les
mouvements des systèmes de points matériels comme le pendule, les planètes idéalisées en des points matériels
ainsi que les variations de courants ou de différences de potentiels dans les circuits électriques ou encore
l’évolution des espèces en écologie. . .
terminons cette introduction par une liste non exhaustive de livres à consulter. Aucun de ces livres n’est
indispensable, d’autres seront peut être utilisés. Je vous encourage à ouvrir les livres de la bibliothèque
lorsque vous avez besoin de mieux comprendre quelque chose ou chercher la solution d’un exercice.
Bibliographie sommaire.
M. Crouzeix, A.L. Mignot, 1984, Analyse numérique des équations différentielles : Masson, Paris.
M. Crouzeix, A.L. Mignot, 1986, Exercice d’analyse numérique des équations différentielles : Masson,
Paris.
J.P. Demailly, 1996, Analyse numérique et équations différentielles : EDP Sciences, Grenoble.
8
E. Hairer, S.P. Norsett, G. Wanner, 2009, Solving Ordinary Differential Equations I : Nonstiff Problems, Springer, Berlin. Voir aussi le cours polycopié en ligne de G. Wanner à l’université de Genève.
http://www.unige.ch/˜wanner/Numi.html
P. Henrici, 1982, Essential of numerical analysis : John Wiley & Sons, New York.
N.J. Higham, 1996, Accuracy and stability of numerical algorithms : Siam, Philadelphia.
C.B. Moler, 2004, Numerical computing with MATLAB : Siam, Philadelphia (disponible gratuitement
sur internet sur http ://www.mathworks.fr/moler).
M. Schatzman, 1991, Analyse numérique : Cours et exercices pour la licence : Inter Édition, Paris.
A. Iserles, 2009, A First course in the numerical analysis of differential equations, Cambridge University
press.
9
Chapitre 1
Représention des nombres en machines et
arithmétiques des ordinateurs
Dans ce chapitre, nous allons traiter successivement :
– la représentation des nombres en machine ;
– quelques particularités des calculs en flottants illustrées par des exemples.
1.1
La représentation des nombres en machine
Dans tous les ordinateurs actuels le système de numération utilisé est le système à base 2. Il y a eu des
machines utilisant d’autres systèmes de numération, mais les mémoires élémentaires utilisées, appelés bits,
étant des dispositifs électroniques à deux états, il est peu probable que cela change. Il faut donc un peu
compter en base 2 où par exemple 37 (≡ 3 ∗ 10 + 7) = 25 + 22 + 1 (penser à 24 = 16) s’écrit 100101 (en base
2). D’une manière générale on écrira un entier dans une base b (entier ≥ 2) particulière sous la forme d’une
suite de chiffres an an−1 ...a1 a0 ≡ an bn + an−1 bn−1 + ...a1 b + a0 où les décimales ai sont des entiers compris
entre 0 et b − 1 (bien sûr an > 0) et les chiffres sont rangées de DROITE à GAUCHE (le chiffre des unités
a0 est à droite) et pour se remémorer cela on peut commencer par un exercice.
Exercice. On remarque que des divisions successives par 10 d’un entier et des quotients obtenus donnent
des restes qui sont les décimales de ce nombre (en base 10). Par exemple 1027 = 10 ∗ 102 + 7 et 7 est le
chiffre des unités, 102 = 10 ∗ 10 + 2 et 2 est le chiffres des dizaines ... À partir de là faire un code (MATLAB
par exemple, utilisant les fonctions mod (reste) et floor (quotient)) qui affiche les décimales en base b d’un
entier positif quelconque.
Réponse. Un code MATLAB possible est :
function chiffres=developpement_base_b_d_un_entier(k,b)
%DEVELOPPEMENT_BASE_B_D_UN_ENTIER
% chiffres(dernier)...chiffres(premier) sont les décimales de l’entier k
% supposé positif pour simplifier dans la base b
% Il faudrait améliorer cela pour utiliser la notation a, b, c, d, e, f
% en base 16 (hexadécimal)
k=abs(k); b=abs(b);
if b<2, disp(’Base impossible’), return, end
chiffres=[]; q=k;
while q~=0, chiffres=[mod(q,b),chiffres]; q=floor(q/b); end
Souvent, pour simplifier, on utilise le codage en base 16, hexadécimal, car il est facile de passer des
chiffres hexadécimaux 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f au binaire (un chiffre hexadécimal occupe 4bits)
avec la table :
0 : 0000 4 : 0100 8 : 1000 c : 1100
1 : 0001 5 : 0101 9 : 1001 d : 1101
2 : 0010 6 : 0110 a : 1010 e : 1110
3 : 0011 7 : 0111 b : 1011 f : 1111
10
Dans la mémoire des ordinateurs les bits sont rassemblés en groupes appelés mots et chaque mot a une
adresse : on lit ou on écrit en bloc sur tous les bits du mots. Tous les ordinateurs actuels ont des mots de 8
bits appelés octets, et on peut manipuler des entiers sans signe (on dit entiers non signés) qui occupent
8, 16, 32 ou 64 bits (un, deux, quatre ou huit octets) et donc :
– un entier non signé sur 8 bits varie de 0 à 27 + 26 + 25 + 24 + 23 + 22 + 2 + 1 = 28 − 1 = 255 ce qui
fait 256 valeurs (penser à 22 = 4, 24 = 16, 162 = 256 et aussi 29 = 512, 210 = 1024) ;
– un entier non signé sur 16 bits varie de 0 à 215 + ... + 2 + 1 = 216 − 1 = 65535 ;
– un entier non signé sur 32 bits varie de 0 à 231 + ... + 2 + 1 = 232 − 1 = 42949672295
– un entier non signé sur 64 bits varie de 0 à 263 + ... + 2 + 1 = 264 − 1 = 1.8447 1019 ce nombre est si
grand que son approximation en flottants ... voir plus loin ... ne peut pas être exacte, sa valeur exacte
est 18446744073709551615).
On décrit maintenant le codage des entiers signés (qui peuvent être aussi bien positifs que négatifs, donc
sont des entiers relatifs) et celui des flottants qui sont des réels représentés par une mantisse et un exposant.
On précise cela plus loin.
1.1.1
Le codage des entiers relatifs
Il faut retenir essentiellement que le dernier bit (le plus à gauche) sert à coder le signe : le nombre est
positif si ce bit est 0 et négatif si ce bit est 1. De plus si ce nombre est négatif, pour obtenir sa valeur absolue
nombre de bits . En clair :
il faut retrancher l’entier obtenu en base 2 avec les bits
restants6 à 2 5
b6 2 + b5 2 + ... + b1 2 + b0 si b7 = 0
si bien
pour un entier signé codé sur 8 bits b7 b6 ...b1 b0 =
8
−(2 − b7 27 − b6 26 − ... − b1 2 − b0 ) si b7 = 1
que cet entier peut varier de −27 (= −(28 − 27 )) = −128 à 27 − 1 = 127 ((= 26 + 25 + ... + 2 + 1) (si b7 = 1,
la formule est aussi −b7 27 + b6 26 + ... + b1 2 + b0 ; on parle
à 2) ;
de complément
14
b14 2 + b13 213 + ... + b1 2 + b0 si b15 = 0
pour un entier signé codé sur 16 bits b15 b14 ...b1 b0 =
16
−(2 − b15 215 − b14 214 − ... − b1 2 − b0 ) si b15 = 1
si bien que cet entier peut varier de −215 (= −(216 − 215 )) = −32768 à 215 − 1 = 32767 ((= 26 + 25 + ...+ 2+ 1)
(remarque analogue au premier cas) ;
b30 230 + b29 229 + ... + b1 2 + b0 si b31 = 0
pour un entier signé codé sur 32 bits b31 b30 ...b1 b0 =
−(232 − b31 231 − b30 230 − ... − b1 2 − b0 ) si b31 = 1
31
32
31
si bien que cet entier peut varier de −2 (= −(2 − 2 )) = −2147483648 à 231 − 1 = 2147483647 ((=
230 + 229 + ... + 2 + 1) (remarque analogue au premier cas) ;
b62 262 + b61 261 + ... + b1 2 + b0 si b63 = 0
pour un entier signé codé sur 64 bits b63 b62 ...b1 b0 =
64
−(2 − b63 263 − b62 262 − ... − b1 2 − b0 ) si b63 = 1
si bien que cet entier peut varier de −263 (= −(264 −263 )) = −9223372036854775808 à 263 −1 = 9223372036854775807
((= 262 + 261 + ... + 2 + 1) (remarque analogue au premier cas).
1.1.2
Le codage des flottants
Les nombres utilisés pour la plupart des calculs sont des flottants constitués d’une mantisse et d’un
exposant. Précisons cela en base 10 :
l’approximation de 346.58 avec une mantisse à 4 chiffres est 3.466 102 ;
l’écriture de 0.0000456 avec une mantisse à 6 chiffres est 4.56000 10−5 ;
l’approximation de π = 3.141592653589793... avec une mantisse à 8 chiffres est 3.1415927 100 .
−4
Il faut en retenir que la précision relative est à peu près constante ( 5110à 9 en base 10 pour une mantisse à 4
chiffres) mais que l’erreur absolue peut être proportionnelle, en valeur absolue, au nombre qu’on “approxime”.
Depuis 1985 environ 1 , tous les ordinateurs utilisent ce qu’on appelle la norme de l’arithmétique flottante
IEEE dont on va décrire le codage le plus fréquent. Cette norme permet encore des différences entre marques
de processeurs mais elles sont petites.
Avant de rentrer dans les détails on peut dire que :
– le dernier bit sert encore à coder le signe ;
– qu’un certain nombre de bits (8 en simple précision, 11 bits en double précision) servent à coder
l’exposant signe compris, mais les valeurs extrêmes de l’exposant ne sont pas utilisées pour coder des
1. la situation avant cette date était très variable d’une marque à une autre
11
nombres “ordinaires” mais servent à coder des résultats d’opérations impossibles comme 00 , 0×∞ (NaN :
“not a number ”) ou des dépassements de capacité par le haut en valeur absolue comme 01 (overflow :
±∞) ou des dépassements de capacité vers le bas (underflow : flottants dits non normalisés) ;
– lorsque l’exposant e est strictement compris entre ses bornes le nombre ou bien est nul ou bien vaut
(1 + f ) 2e où f qui vérifie 0 ≤ f < 1 est codé dans les bits restants (qui sont les premiers : 23 bits en
| {z }
mantisse
simple précision, 52 bits en double précision).
Voici les détails.
En simple précision ces flottants sont codés en général sur 32 bits (4 octets de 8 bits) en une mantisse et
un exposant : si b31 , b30 , ..., b0 représente ces bits le nombre est défini comme suit : “si b30 27 + ... + b23 = 255
mais b22 ...b0 6= 0, la machine dit NaN (not a number : cas d’overflow) ; si b30 27 + ... + b23 = 255 et b22 ...b0 = 0,
7
on convient de dire
que le nombre
est +∞ si b31 = 0 et −∞ si b31 = 1 ; si 1 ≤ b30 2 + ... + b23 ≤ 254,
7
+ si b31 = 0
0
)2b30 2 +...+b23 −127 ; si b30 ...b23 = 0 et b22 ...b0 = 0, le
le nombre vaut :
(1 + b22
+ ... + 2b23
2
− si b31 = 1
nombre est zéro (on dit ± zéro selon que b
; si b30 ...b23 = 0 et b22 ...b0 6= 0, le nombre est
31 est 0 ou 1) + si b31 = 0
b0
−126 mais dans les opérations
dit dénormalisé (underflow), sa “valeur” est
( b22
2 + ... + 223 )2
− si b31 = 1
habituelles on considère que ce nombre est nul” ; ainsi en simple précision, le plus petit nombre machine non
négligeable devant 1, pour l’addition, est ǫ = 2123 ≃ 1.2 10−7 , le plus petit nombre machine en valeur absolue
−24
est 1 ∗ 21−127 ≃ 1.2 10−38 et le plus grand 1−21 2254−127 ≃ 3.4 1038 .
2
En double précision, les flottants sont codés sur 64 bits (8 octets) et la règle, les bits étant b63 b62 ...b0 , est
(l’exposant et la mantisse apparaissent dans un même octet comme plus haut) : “si b62 210 + ... + b52 = 2047
mais b51 ...b0 6= 0, la machine dit NaN (not a number) ; si b62 210 + ... + b52 = 2047 et b51 ...b0 = 0, on convient
de dire que le nombre
est +∞ si b63 = 0 et −∞ si b63 = 1 ; si 1 ≤ b62 210 + ... + b52 ≤ 2046, le nombre vaut :
+ si b63 = 0
10
0
(1 + b251 + ... + 2b52
)2b62 2 +...+b52−1023 ; si b62 ...b52 = 0 et b51 ...b0 = 0, le nombre est zéro (on
− si b63 = 1
dit ±
zéro selon que
b63 est 0 ou 1) ; si b62 ...b52 = 0 et b51 ...b0 6= 0, le nombre est dit dénormalisé, sa “valeur”
+ si b63 = 0
b0
−1022 mais dans les opérations habituelles on considère que ce nombre
est
( b51
2 + ... + 252 )2
− si b63 = 1
est nul” : ainsi en double précision, le plus petit nombre machine non négligeable devant 1, pour l’addition,
est ǫ = 2152 ≃ 2.2 10−16 , le plus petit nombre machine en valeur absolue est 21−1023 ≃ 2.25 10−308 et le plus
grand 2(1 − 2153 )21023 ≃ 1.8 10308 .
Il faut bien insister sur le fait qu’en double (respectivement simple) précision 1 + 2152 > 1 (respectivement
1 + 2123 > 1) alors que 1 + 2153 (respectivement 1 + 2124 ) vaut 1 en machine. Mais attention si 1 + 2153 fait 1 en
machine ni 1 − 2153 ni 1 − 2153 − 2154 ne font 1, avec quelque chose du même genre en simple précision. Cela
provient du fait que dans le processeur, avant de faire une opération addition ou soustraction entre deux
flottants, on utilise une ou des décimales de garde comme indiqué dans l’exemple suivant de soustraction de
1.111 20 à 1.000 21 (base 2) où on suppose que la mantisse , 1 compris n’utilise que 4 chiffres binaires, et où
le chiffre de garde est utilisé lors du décalage du nombre le plus petit en valeur absolue :
21 1.000
- 21 0.1111
21 0.0001 = 2−3 1.000
Avec ces chiffres de garde, on peut garantir que en notant f l le résultat calculé en machine d’une opération
op :
1
f l(a op b) = (a op b)(1 + δ) avec |δ| ≤ ǫ et op = +, −, ∗, /.
2
On peut remarquer à ce propos qu’il y a eu des machines (Cray 1,2, X-MP, Y-MP, C90) qui ne comportaient pas de décimales de garde — cela a changé en 1995 — et pour lesquelles la règle précédente n’était
plus vraie pour les opérations addition et soustraction.
À noter aussi qu’il existe aussi des précisions encore plus grande (80 bits sur Intel et Motorola) et qu’il
existe des systèmes de calcul par intervalles qui restent assez spécialisés.
Voici un code MATLAB qui permet de controler ce codage en flottants.
function Controle_du_code_des_flottants
12
%CONTROLE_DU_CODE_DES_FLOTTANTS
% Dans cette manipulation on contrôle le code des flottants en simple et
% double précision (ne pas oublier que 255 (base 10)
%
= 11111111 (base 2)
%
= ff (base 16)
% et que la table de conversion hexadécimal-binaire est:
% 0=0000 4=0100 8=1000 c=1100
% 1=0001 5=0101 9=1001 d=1101
% 2=0010 6=0110 a=1010 e=1110
% 3=0011 7=0111 b=1011 f=1111)
%
format
% En SIMPLE PRÉCISION, successivement NaN, +Inf, -Inf (exposant=255)
%
flottants normalisés (1<=exposant<=254)
%
zero (exposant=mantisse=0)
%
flottants dénormalisés (exposant=0,
%
mantisse non nulle)
% signe b_31
% exposant b_30...b_23 (8 bits)
% mantisse b_22 ... b_0 (23 bits)
x=single(0)/single(0) % exemple NaN
format hex, x, format % on constate que ffc00000=NaN
% et les bits sont bien (mantisse non nulle):
% 1111 1111 1100 0000 0000 0000 0000 0000
x=single(1)/0
% cas Inf
format hex, x, format % on constate que 7f800000=Inf
% et les bits sont bien (mantisse nulle):
% 0111 1111 1000 0000 0000 0000 0000 0000
x=single(-1)/0
% cas -Inf
format hex, x, format % on constate que ff800000=-Inf
% et les bits sont bien (mantisse nulle):
% 1111 1111 1000 0000 0000 0000 0000 0000
% flottants normalisés ensuite
realmax(’single’)
% au delà on dit OVERFLOW (qui fait +ou- Inf)
format hex, realmax(’single’), format
% on constate que realmax~=3.4028e+38
% =2*(1-1/2^24)*2^(254-127)
% =7f7fffff
% et les bits sont bien:
% 0111 1111 0111 1111 1111 1111 1111 1111
realmin(’single’)
% en dessous on dit UNDERFLOW (qui produit des
% dénormalisés)
format hex, realmin(’single’), format
% on constate que realmin~=1.1755e-38
% =2^(1-127)
% =00800000
% et les bits sont bien:
% 0000 0000 1000 0000 0000 0000 0000 0000
x=single(1); y=eps(’single’);% la PRÉCISION MACHINE est y~=1.1921e-07
% =2^(-23)
z1=x+y; z2=x+y/2; z3=x-y/2; z4=x-y/2-y/4; z5=x-y/2-y/4-y/8;
% z1=x+y; z2=x+y/2; z3=x-y/2; z4=x-(y/2+y/4);z5=x-(y/2+y/4+y/8);%même
%résultat
13
[x,y,z1,z2,z3,z4,z5] format hex, [x,y,z1,z2,z3,z4,z5], format
% on constate que 1+y>1 mais 1+y/2=1
% ... normal (précision machine) ...
% mais 1-y/2-y/4-y/8=1-y/2-y/4<1-y/2<y
% il semble qu’il y a il y a au moins DEUX CHIFFRES
% BINAIRES DE GARDE pour les retenues dans
% les soustractions
% Avec cela fl(a op b)=a op b (1+u)
% où |u| <=eps(’single’) et op =+,-,*,/
% qu’on peut aussi écrire fl(a op b)= (a op b)/(1+v)
% où |v| <=eps(’single’)
%
%
flottants dénormalisés enfin pour lesquels il faut
%
noter que le nombre de chiffres binaires
%
significatifs diminue
x=single(2^(-126-1)), format hex, x, format
% on constate que 2^(-127)=00400000, c’est à dire
% en binaire 0000 0000 0100 0000 0000 0000 0000 0000
x=single(2^(-126-23)), format hex, x, format
x=single(2^(-126-24)), format hex, x, format % on trouve zéro
% En DOUBLE PRÉCISION, successivement NaN, +Inf, -Inf (exposant=2047)
%
flottants normalisés (1<=exposant<=2046)
%
zero (exposant=mantisse=0)
%
flottants dénormalisés (exposant=0,
%
mantisse non nulle)
% signe b_63
% exposant b_62...b_52 (11 bits)
% mantisse b_51 ... b_0 (52 bits)
x=0/0
% exemple NaN
format hex, x, format% on constate que fff8000000000000=NaN
% et les bits sont bien (mantisse non nulle):
% 1111 1111 1111 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
% 0000 0000
x=1/0
% cas Inf
format hex, x, format% on constate que 7ff0000000000000=Inf
% et les bits sont bien (mantisse nulle):
% 0111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
% 0000 0000
x=-1/0
% cas -Inf
format hex, x, format% on constate que fff0000000000000=-Inf
% et les bits sont bien (mantisse nulle):
% 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
% 0000 0000
%
flottants normalisés ensuite
realmax
% au delà on dit OVERFLOW (qui fait +ou- Inf)
format hex, realmax, format
% on constate que realmax~=1.7977e+308
% =2*(1-1/2^53)*2^(2046-1023)
% =7fefffffffffffff
% et les bits sont bien:
% 0111 1111 1110 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
% 1111 1111
realmin
% en dessous on dit UNDERFLOW (qui produit des
14
% dénormalisés)
format hex, realmin, format
% on constate que realmin~=2.2251e-308
% =2^(1-1023)
% =0010000000000000
% et les bits sont bien:
% 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
% 0000 0000
x=1; y=eps;
% la précision machine est y~=2.2204e-16
%
=2^(-52)
z1=x+y; z2=x+y/2; z3=x-y/2; z4=x-y/2-y/4; z5=x-y/2-y/4-y/8;
[x,y,z1,z2,z3,z4,z5]
format hex, [x,y,z1,z2,z3,z4,z5], format
% on constate que 1+y>1 mais 1+y/2=1
% ... normal (précision machine) ...
% mais 1-y/2-y/4-y/8=1-y/2-y/4<1-y/2<y
% il y a au moins DEUX CHIFFRES BINAIRES DE GARDE pour
% les retenues dans les soustractions
% Avec cela
% fl(a op b)=a op b (1+u) avec |u| <=eps et op =+,-,*,/
% qu’on peut aussi écrire:
% fl(a op b)= (a op b)/(1+v) avec |v| <=eps
% En double précision sous MATLAB on peut encore faire des choses avec
% la commande hex2num mais il n’y a pas de version simple précision de
% hex2num
On peut se reporter au code MATLAB floatgui.m, extrait du livre de C.B. Moler disponible sur internet
comme indiqué dans le chapitre précédent d’introduction, pour observer la distribution des flottants dans
des cas très simples de petites mantisses et petits exposants. On a mis ce code en appendice du chapitre.
1.2
Quelques particularités des calculs en flottants illustrées par des exemples
On vient de voir que le codage des flottants, qui d’une certaine manière est bien naturel ... on garde une
précision relative à peu près constante et on prend quelques précautions peu coûteuses avant de faire une
soustraction..., et l’usage de chiffres de garde, font que si ǫ est le plus petit nombre > 0 tel que f l(1 + ǫ) > 1,
alors on a :
f l(1 + ǫ) 6= 1, f l(1 + 2ǫ ) = 1, f l(1 − 2ǫ ) 6= 1, f l(1 − 2ǫ − 4ǫ ) 6= 1 , f l(1 − 2ǫ − 4ǫ − 8ǫ ) = f l(1 −
f l(a op b) = (a op b)(1 + δ) avec |δ| ≤ 21 ǫ et op = +, −, ∗, /
ǫ
2
− 4ǫ ) 6= f l(1 − 2ǫ )
Il en résulte par exemple que f l((1 + 2ǫ ) + 2ǫ ) n’est pas égal à f l((1 + ( 2ǫ + 2ǫ )) si bien que par exemple,
l’ensemble des flottants ne forme pas un corps : il n’y a pas toujours associativité des opérations bien sûr à
cause des erreurs d’arrondi.
1.2.1
Calcul d’une somme évidente
P
1
1
1
= k(k+1)
Un autre exemple concerne le calcul de la somme sn = 1 + nk=1 k(k+1)
qui puisque k1 − k+1
1
. Le code MATLAB suivant montre que pour n = 1000, le calcul de sn dans le sens des indices
vaut sn = 2 − n+1
k croissants ne donne pas le même résultat que dans l’autre sens. Il n’y a pas commutativité des sommes
d’un grand nombre de termes.
function [sc,sd,se] = somme_evidente(n)
%SOMME_EVIDENTE
% On calcule ici 1+somme(1/k/(k+1)) où k=1:n
% dans le sens des k croissants (sc) puis décroissants (sd)
15
% et en simple précision
% Cette somme vaut 2-1/(n+1) (se) car 1/k-1/(k+1)=1/k/(k+1)
% Les résultats sont affichés en format long et hexadécimal
% (faire par exemple somme_evidente(1000))
se=single(2)-1/(n+1);
sc=single(1); for k=1:n, sc=sc+1/k/(k+1); end;
sd=single(0); for k=n:-1:1, sd=sd+1/k/(k+1); end; sd=sd+1;
disp(’Affichage décimal’), format long, disp([sc,sd,se])
disp(’Affichage hexadécimal’), format hex, disp([sc,sd,se])
Le résultat affiché est :
Affichage décimal
1.9990020 1.9990010 1.9990010
Affichage hexadécimal
3fffdf4c 3fffdf44 3fffdf44
1.2.2
Calcul de π par la méthode d’Archimède
Dans ce cas précédent seules les dernières décimales sont touchées et cela n’est pas grave, mais voici un
exemple très connu de phénomène qu’on peut qualifié de “cancellation” où c’est beaucoup plus grave. Il s’agit
du calcul de π par la méthode d’Archimède. Le demi-périmètre d’un polygone régulier de 2k cotés inscrit
π
dans un disque de rayon 1 est yk = |{z}
2k sin( k ) et bien sûr yk →k→∞ π. On a y1 = 2 et les formules
2
|{z}
1/2 2k .2
1 2π
2 .2k
p
π
de trigonométrie 1 − 2 sin2 ( α2 ) = cos(α) et | cos(α)| =
1 − sin2 (α), donnent yk+1 = 2k+1 sin( 2k+1
) =
r
q
q
2k+1 12 (1 − cos( 2πk )) = 2k+1 12 (1 − 1 − sin2 ( 2πk )) et donc la suite {yk }k≥1 vérifie :
s
r
yk
1
k+1
y1 = 2, yk+1 = 2
(1 − 1 − ( k )2 ),
(1.1)
2
2
q
et aussi, puisque, procédé bien connu de multiplication et division par la quantité “conjuguée”, 1− 1 − ( y2kk )2 =
(1−
q
yk 2
y
) )(1+ 1−( kk )2 )
2k
2
q
y
1+ 1−( kk )2
2
1−(
q
y
=
( k )2
q 2k y
1+ 1−( kk )2
:
2
y1 = 2, yk+1
v
u
= yk u
t
1+
q
2
1 − ( y2kk )2
.
Voici un code MATLAB où les deux formules sont utilisées.
function calcul_de_pi_par_Archimede
%CALCUL_DE_PI_PAR_ARCHIMEDE
% La suite y_k=2^k sin(pi/2^k) converge évidemment vers pi si k tend vers
% l’infini ... c’est le demi périmètre d’un polygone de 2^k cotés inscrit
% dans un cercle de rayon 1 ...
% Au moyen des formules de trigonométrie, cos(\alpha)=1-2 sin(\alpha/2)^2,
% abs(cos(\alpha))=sqrt(1-sin(\alpha)^2), on peut démontrer que cette
% suite peut être calculée par les formules de récurrence
% y_1=2; y_(k+1)=2^(k+1) sqrt((1-sqrt(1-(y_k/2^k)^2))/2)
% ou encore, ce qui est équivalent si les calculs sont exacts:
% y_1=2; y_(k+1)=y_k/sqrt(2/(1+sqrt(1-(y_k/2^k)^2)))
% Et bien à cause de l’accumulation des erreurs d’arrondi les formules
% ne donnent pas les mêmes résultats : la première est très mauvaise.
clear, close all
n=34; ya(1)=2; z=2;
for k=1:n, ya(k+1)=2*z*sqrt((1-sqrt(1-(ya(k)/z)^2))/2); z=2*z; end
16
(1.2)
yb(1)=2; z=2;
for k=1:n, yb(k+1)=yb(k)*sqrt(2/(1+sqrt(1-(ya(k)/z)^2))); z=2*z; end
format long e;
[ya’,yb’], pi
plot(1:35,ya,1:35,yb)
legend(’formule instable’,’formule stable’,’Location’,’NorthWest’)
L’affichage obtenu, figure non comprise, est :
2.000000000000000e+00 2.000000000000000e+00
2.828427124746190e+00 2.828427124746190e+00
3.061467458920719e+00 3.061467458920719e+00
3.121445152258053e+00 3.121445152258053e+00
3.136548490545941e+00 3.136548490545940e+00
3.140331156954739e+00 3.140331156954753e+00
3.141277250932757e+00 3.141277250932773e+00
3.141513801144145e+00 3.141513801144301e+00
3.141572940367883e+00 3.141572940367091e+00
3.141587725279961e+00 3.141587725277160e+00
3.141591421504635e+00 3.141591421511200e+00
3.141592345611077e+00 3.141592345570118e+00
3.141592576545004e+00 3.141592576584872e+00
3.141592633463248e+00 3.141592634338563e+00
3.141592654807589e+00 3.141592648776985e+00
3.141592645321215e+00 3.141592652386591e+00
3.141592607375720e+00 3.141592653288992e+00
3.141592910939673e+00 3.141592653514593e+00
3.141594125195191e+00 3.141592653570993e+00
3.141596553704820e+00 3.141592653585093e+00
3.141596553704820e+00 3.141592653588618e+00
3.141674265021758e+00 3.141592653589499e+00
3.141829681889202e+00 3.141592653589719e+00
3.142451272494134e+00 3.141592653589774e+00
3.142451272494134e+00 3.141592653589788e+00
3.162277660168380e+00 3.141592653589792e+00
3.162277660168380e+00 3.141592653589793e+00
3.464101615137754e+00 3.141592653589793e+00
4.000000000000000e+00 3.141592653589793e+00
0
3.141592653589793e+00
0
3.141592653589793e+00
0
3.141592653589793e+00
0
3.141592653589793e+00
0
3.141592653589793e+00
0
3.141592653589793e+00
ans =
3.141592653589793e+00
La première formule parvient difficilement à l’approximation 3.141596553704820e+00 de π ∼
=3.141592653589793e+
et finit par donner 0( ! ! !), alors que la seconde formule donne la bonne approximation. Ceci est tout à fait
normal puisque {yk }k≥1 , qui devrait converger vers π, reste borné et donc 2ykk →k→∞ 0, si bien que dans la
q
q
première formule f l( 1 − ( y2kk )2 ) →k→∞ 1 donc f l(1 − 1 − ( 2ykk )2 ) finit par s’annuler (le 2k+1 ne suffit pas
r
q 2 y
) →k→∞ 1 et yk finit
pour rétablir la bonne valeur). Par contre dans la seconde formule f l(
k 2
1+
1−(
2k
)
par se stabiliser à une bonne valeur. Tout s’explique par le fait dans la première formule, la valeur de ( y2kk )2
17
est, à partir d’un certain rang non significative devant 1 (comme 8ǫ devant 1) et donc dans la soustraction
q
q
1 − 1 − ( y2kk )2 il y a “cancellation” des décimales de 1 et 1 − ( 2ykk )2 .
1.2.3
Un autre exemple d’élimination catastrophique de décimales.
qui se simplifie algébriquement en f (x) = 1. Nous allons
Soit la fonction élémentaire f (x) = (1+x)−1
x
étudier le comportement de la première expression lorsque x est très petit. Voici un petit code MATLAB qui
trace la fonction pour x est très petit.
function cancel(digits)
clf;
d=(1:digits);
deltax=10.^(-d);
cancel=((1+deltax) -1)./deltax;
plot(deltax,cancel);
xlim([10.^(-digits) 10.^(-digits+3)]);
pause;
disp(’frappez une touche pour continuer’);
semilogx(deltax,cancel);
err_rel= abs(cancel -1);
pause;
disp(’frappez une touche pour continuer’);
semilogx(deltax,err_rel);
end
graphe de fx): echelle log sur x
erreur relative: echelle log sur x
1.4
1
0.9
1.2
0.8
1
0.7
0.6
0.8
0.5
0.6
0.4
0.3
0.4
0.2
0.2
0.1
0
−20
10
−15
10
−10
10
−5
10
Figure 1.1 – gauche : graphe de f (x) =
0
−20
10
0
10
(1+x)−1
x
−15
10
−10
10
−5
10
0
10
droite : l’erreur |f (x) − 1|, échelle log sur x.
Que s’est-il passé ? En dessous du seuil de précision de la machine, 1 + x = 1 et donc f (x) = 0 au lieu de
1, on commet une erreur relative de 100% ! Pour x s’approchant du seuil de précision, les résultats fluctuent
notablement autour de la valeur exacte. Evidemment pour x > 10−15 , le résultat est correct.
1.2.4
Un dernier exemple : un calcul rapide d’intégrales
Il s’agit de calculer la suite d’intégrales Ek =
R1
0
xk e|x−1
|{z}
{zdx}, quantité positive puisque la fonction intégrée
v
du
est positive. Il est clair que (formule de récurrence obtenue par une intégration par parties) :
18
E0 =
ex−1 |x=1
x=0
1
= 1 − , Ek = xk ex−1 |x=1
x=0 − k
e
Z
0
1
xk−1 ex−1 dx = 1 − kEk−1 pour k ≥ 1
(1.3)
On doit comprendre aussi que Ek →k→∞ 0. Pour justifier cela on peut d’abord remarquer que xk ex−1 →k→∞
0 quel que soit x vérifiant 0 ≤ x < 1. Alors dans le cours d’analyse de L2 on découpe [0, 1] en deux morceaux,
un premier [0, 1 − N1 ] avec N > 1 entier sur lequel xk ex−1 converge uniformément vers zéro et donc pour
R 1− 1
lequel 0 N xk ex−1 dx →k→∞ 0 et un second [1 − N1 , 1] sur lequel xk ex−1 est bornée, en valeur absolue, par
R1
1, si bien que 1− 1 xk ex−1 dx ≤ N1 , la longueur de l’intervalle. En L2 donc, en choisissant d’abord N assez
N
grand puis k assez grand on voit que Ek peut être rendu aussi petit qu’on veut donc converge vers 0 si k
tend vers l’infini. En L3, cours de théorie de la mesure, vous allez apprendre le théorème de convergence
dominée de Lebesgue : puisque xk ex−1 →k→∞ 0 presque partout sur [0, 1] et est borné par quelque chose
dont l’intégrale existe
On peut maintenant revenir à notre petit problème de calcul numérique. Dans le code MATLAB (encore lui)
suivant, on a fait le calcul de Ek 0 ≤ k ≤ 20, avec un programme de quadrature (voir chapitre Quadrature),
puis avec la formule de récurrence dans le sens des k croissants et enfin on a fait l’approximation E32 = 0 et
utilisé la formule de récurrence dans le sens des k décroissants.
function Exemple_d_integrale
%EXEMPLE_D_INTEGRALE
% E_k= Intégrale de 0 à 1 de x^k exp(x-1) pour k=0,1,...,20
% on peut penser à utiliser la formule de récurrence:
% E_0=1-1/e; E_k=1-k E_(k-1)
% Il se trouve que E_k tend vers zéro si k tend vers l’infini, alors
% la formule est mauvaise dans le sens des k croissants, mais elle est
% très bonne dans l’autre sens au point qu’on peut poser “brutalement”
% E_32=0 et ...
format long e
tic, e(1,1)=1-1/exp(1); for k=2:21, e(k,1)=quad(@(x)f(x,k),0,1,1e-12); end, toc
tic, e(1,2)=1-1/exp(1); for k=2:21, e(k,2)=1-(k-1)*e(k-1,2); end, toc
tic, e(33,3)=0; for k=33:-1:2, e(k-1,3)=(1-e(k,3))/(k-1); end, toc
[e(1:21,1) e(1:21,2) e(1:21,3)]
function y=f(x,k)
y=x.^(k-1).*exp(x-1);
et le résultat affiché est :
Elapsed time is 0.286808 seconds.
Elapsed time is 0.000008 seconds.
Elapsed time is 0.000007 seconds.
ans =
6.321205588285577e-01 6.321205588285577e-01 6.321205588285577e-01
3.678794411714425e-01 3.678794411714423e-01 3.678794411714423e-01
2.642411176571156e-01 2.642411176571153e-01 2.642411176571153e-01
2.072766470286543e-01 2.072766470286540e-01 2.072766470286539e-01
1.708934118853855e-01 1.708934118853840e-01 1.708934118853843e-01
1.455329405730884e-01 1.455329405730801e-01 1.455329405730786e-01
1.268023565615501e-01 1.268023565615195e-01 1.268023565615284e-01
1.123835040695699e-01 1.123835040693635e-01 1.123835040693008e-01
1.009319674456464e-01 1.009319674450921e-01 1.009319674455933e-01
9.161229298979662e-02 9.161229299417073e-02 9.161229298966059e-02
8.387707010432331e-02 8.387707005829270e-02 8.387707010339417e-02
7.735222886293644e-02 7.735222935878028e-02 7.735222886266420e-02
7.177325364810797e-02 7.177324769463667e-02 7.177325364802957e-02
6.694770257575389e-02 6.694777996972334e-02 6.694770257561571e-02
6.273216394145026e-02 6.273108042387321e-02 6.273216394138015e-02
5.901754088001835e-02 5.903379364190187e-02 5.901754087929777e-02
19
5.571934593393736e-02 5.545930172957014e-02 5.571934593123560e-02
5.277111916989722e-02 5.719187059730757e-02 5.277111916899477e-02
5.011985495840781e-02 -2.945367075153627e-02 5.011985495809426e-02
4.772275579632686e-02 1.559619744279189e+00 4.772275579620910e-02
4.554488407640699e-02 -3.019239488558378e+01 4.554488407581805e-02
Il est clair que la meilleure façon de faire est la récurrence dans le sens des k décroissants à partir de
E32 = 0 : c’est plus précis et plus rapide. De plus la récurrence dans le sens des k croissants donnent des
résultats aberrants.
La conclusion de ces exemples est qu’avant de programmer une formule en flottants il faut prendre la
précaution de choisir si possible, la forme la moins sensible à la propagation des erreurs d’arrondis. Tous les
codes d’analyse numérique matricielle, par exemple la stratégie du pivot dans l’élimination de Gauss, ou la
bonne façon de programmer les transformations de Householder et tous les calculs de fonctions élémentaires
et spéciales (voir sur internet la bibliothèque SLATEC ; une source d’information très intéressante est aussi
http://gams.nist.gov/) ont été faits avec cela à l’esprit.
1.3
Appendice A Le code float.gui
function floatgui(callbackarg)
%FLOATGUI Show structure of floating point numbers.
% The set of positive model floating point numbers is determined
% by three parameters: t, emin, and emax. It is the set of rational
% numbers of the form x = (1+f)*2^e where f = (integer)/2^t,
% 0 <= f < 1, e = integer, and emin <= e <= emax.
%
% IEEE 754 double precision has t = 52, emin = -1022, emax = 1023.
% Initialize parameters
if nargin == 0
t = 3; emin = -4; emax = 2; logscale = 0;
else
t = round(get(findobj(’tag’,’t’),’value’));
emin = round(get(findobj(’tag’,’emin’),’value’));
emax = round(get(findobj(’tag’,’emax’),’value’));
logscale = get(findobj(’style’,’check’),’value’);
end
% Position figure window
shg
clf reset
set(gcf,’pos’,[50 300 900 250],’name’,’floatgui’, ...
’numbertitle’,’off’,’menubar’,’none’)
% Generate and plot floating point numbers
f = (0:2^t-1)/2^t; F = [];
for e = emin:emax
F = [F (1+f)*2^e];
end
for x = F
text(x,0,’|’)
end
20
% Set axes
set(gca,’pos’,[.05 .6 .9 .2])
if logscale
set(gca,’xscale’,’log’)
xmin = 1/2^(-emin+.5);
xmax = 2^(emax+1.5);
else
set(gca,’xscale’,’linear’)
xmin = 0;
xmax = 2^(emax+1);
end
axis([xmin xmax -1 1])
% Set tick marks
fmin = min(F);
fmax = max(F);
xtick = 1;
xticklab = ’1’;
if fmin < 1
xtick = [1/2 xtick];
xticklab = [’1/2|’ xticklab];
end
if logscale & (fmin < 1/4)
xtick = [1/4 xtick];
xticklab = [’1/4|’ xticklab];
end
if fmin < 1/2
xtick = [fmin xtick];
xticklab = [’1/’ int2str(1/fmin) ’|’ xticklab];
end
if 2 < fmax
xtick = [xtick 2];
xticklab = [xticklab ’|2’];
end
if 4 < fmax
xtick = [xtick 4];
xticklab = [xticklab ’|4’];
end
if max(xtick) < fmax
xtick = [xtick fmax];
if fmax == round(fmax)
fmaxlab = int2str(fmax);
else
over = 2^(emax+1);
fmaxlab = [int2str(over) ’-1/’ int2str(1/(over-fmax))];
end
xticklab = [xticklab ’|’ fmaxlab];
end
set(gca,’xtick’,xtick,’xticklabel’,xticklab,’xminortick’,’off’,’ytick’,[])
% Create uicontrols
21
uicontrol(’style’,’slider’,’tag’,’emin’,’value’,emin, ...
’min’,-8,’max’,0,’pos’,[160 70 120 15],’sliderstep’,[1/8 1/8],...
’callback’,’floatgui(1)’);
uicontrol(’style’,’slider’,’tag’,’t’,’value’,t, ...
’min’,0,’max’,8,’pos’,[400 70 120 15],’sliderstep’,[1/8 1/8], ...
’callback’,’floatgui(1)’);
uicontrol(’style’,’slider’,’tag’,’emax’,’value’,emax, ...
’min’,0,’max’,8,’pos’,[640 70 120 15],’sliderstep’,[1/8 1/8], ...
’callback’,’floatgui(1)’);
uicontrol(’style’,’text’,’string’,[’emin = ’ int2str(emin)], ...
’pos’,[160 90 120 20],’fontweight’,’bold’)
uicontrol(’style’,’text’,’string’,[’t = ’ int2str(t)], ...
’pos’,[400 90 120 20],’fontweight’,’bold’)
uicontrol(’style’,’text’,’string’,[’emax = ’ int2str(emax)], ...
’pos’,[640 90 120 20],’fontweight’,’bold’)
uicontrol(’style’,’check’,’string’,’logscale’,’value’,logscale, ...
’pos’,[390 20 140 20],’fontweight’,’bold’, ...
’callback’,’floatgui(1)’);
uicontrol(’style’,’push’,’pos’,[800 10 60 20], ...
’string’,’close’,’callback’,’close(gcf)’)
% eps
if fmax > 1
eps = 2^(-t);
text(1,0,’|’,’color’,’r’)
text(1+eps,0,’|’,’color’,’r’)
if eps < 1
text(1.0,1.5,[’eps = 1/’ int2str(1/eps)], ...
’fontweight’,’bold’)
else
text(1.0,1.5,’eps = 1’,’fontweight’,’bold’)
end
end
% Number of numbers
%
%
%
%
Exercise:
How many "floating point" numbers are in the set?
Complete this statement.
text(.9*xmax,2,num2str(???))
22
Chapitre 2
Résolution des équations scalaires non
linéaires
Dans ce chapitre nous allons décrire successivement :
– quelques rappels d’analyse réelle ;
– la méthode des approximations successives
– la méthode de Newton
– les méthodes de la fausse position, de la sécante et l’algorithme de Dekker-Brent ;
– en complément facultatif, quelques notions sur le calcul de zéros multiples.
2.1
Quelques rappels d’analyse réelle.
Ces quelques précisions sont l’occasion d’insister sur les propriétés fondamentales de l’ensemble des
nombres réels R : convergence des suites monotones bornées, existence de la borne supérieure (respectivement inférieure) d’un ensemble de réels non vide et majoré (respectivement minoré), propriété des suites
d’intervalles emboîtés et complétude.
2.1.1
Deux démonstrations du théorème des valeurs intermédiaires
Le théorème des valeurs intermédiaires dit qu’étant donnée une fonction réelle h définie continue sur un
intervalle réel fermé borné I = [a, b] et un réel y compris entre h(a) et h(b) alors il existe au moins un réel
c ∈ I tel que 1 h(c) = y.
Nous allons donner deux démonstrations assez élémentaires de ce résultat mais utilisant des propriétés
d’une certaine manière assez profondes de R : le fait que tout ensemble de réels majoré (respectivement
minoré) non vide admet une borne supérieure (respectivement inférieure)
et la propriété (qui est
T
(k) d’intervalles fermés
équivalente en fait) des intervalles emboîtés qui dit que toute intersection ∞
I
k=0
I (k) = [a(k) , b(k) ] emboîtés (I (k+1) ⊆ I (k) ) est non vide
2.1.1.1
Première démonstration théorique.
Dans les cas triviaux h(a) = y ou h(b) = y, il n’y a rien à démontrer. Dans les cas restants, en changeant
au besoin le signe de h et de y on peut toujours supposer que h(a) < y < h(b). Alors on introduit l’ensemble
E = {x ∈ I = [a, b] : h(x) ≤ y} ; cet ensemble de réels est non vide puisque a ∈ E et majoré puisque
x ≤ b quelque soit x ∈ E. Cet ensemble E a donc une borne supérieure xb et comme h est continue, de
h(x) ≤ y quel que soit x ∈ E, c’est à dire quel que soit x ≤ xb , on déduit h(xb ) ≤ y. Mais forcément h(x) > y
quel que soit x ∈]xb , b] (cet intervalle est non vide car h(xb ) ≤ y < h(b)) car si non xb ne serait pas la
borne supérieure de E. Donc en considérant une suite de points {x(k) }k≥0 de ]xb , b] qui converge vers xb , par
exemple x(k) = min(xb + k1 , b), on voit que h(xb ) = limk→∞ h(x(k) ) ≥ y et finalement h(xb ) = y. cqfd.
1. Il n’est pas inutile de préciser à ce propos que ce théorème est un cas particulier d’un théorème de topologie plus général
qui dit que, étant donnés deux espaces topologiques E et F et une application continue h de E dans F , l’image h(C) d’un
ensemble connexe C ⊂ E par h est un ensemble connexe.
23
2.1.1.2
Deuxième démonstration constructive.
Comme précédemment, après avoir traité les cas triviaux h(a) = y ou h(b) = y, on peut toujours se
ramener aux cas où h(a) < y < h(b). On définit alors une suite d’intervalles emboîtés I (k) = [a(k) , b(k) ], k ≥ 0
au moyen de l’algorithme de dichotomie (on dit bisection en anglais) :
[a(0) , b(0) ] = [a, b] et pour k = 0, 1, ...
(k)
(k)
et le nouveau intervalle est défini par :
on calcule c′ = a +b
2

si h(c′ ) = y, a(k+1) = b(k+1) = c′ ;

si (h(a(k) ) − y)(h(c′ ) − y) < 0, a(k+1) = a(k) , b(k+1) = c′ ; .

si (h(a(k) ) − y)(h(c′ ) − y) > 0, a(k+1) = c′ , b(k+1) = b(k)
On notera que les suites {a(k) }k≥0 et {b(k) }k≥0 sont telles que ou bien a(k) = b(k) = c′ avec h(c′ ) = y à
partir d’un certain k, ou bien sont telles que pour tout k ≥ 0, on a h(a(k) ) < y < h(b(k) ). Il est clair que le
théorème est démontré avec c = c′ tel que h(c) = y si a(k) = b(k) = c′ à partir d’un certain rang. Si non on
remarque que [a(k+1) , b(k+1) ] ⊂ [a(k) , b(k) ] et que (b(k+1) −a(k+1) ) = 12 (b(k) −a(k) ) = 212 (b(k−1) −a(k−1) ) = ... =
1
(b−a) →k→∞ 0. La suite d’intervalles [a(k) , b(k) ] est donc emboîtée et a une intersection forcément réduite
2k+1
à un point c = limk→∞ a(k) = limk→∞ b(k) . Mais alors la continuité de h et la propriété h(a(k) ) < y < h(b(k) )
montrent que h(c) ≤ y ≤ h(c) et donc h(c) = y .
Remarque. L’algorithme de dichotomie converge aussi vite que la suite géométrique de raison 1/2 :
a(k) ≤ c ≤ b(k) et (b(k) − a(k) ) = O(1/2k ).
En gros, à chaque itération, on gagne une "décimale" binaire. On dit que la convergence est linéaire.
2.1.2
Le théorème du point fixe de Banach et la méthode des approximations successives
Théorème 1 Soit une fonction g continue sur un intervalle I = [a, b] ayant les propriétés :
I est stable par g :
∀x ∈ I,
g(x) ∈ I
(2.1)
La fonction g est contractante : Il existe une constante L avec 0 ≤ L < 1 telle que
∀x, y ∈ I,
|g(x) − g(y)| ≤ L|x − y|
(2.2)
alors l’équation x = g(x) a une racine ξ et une seule dans I, cette racine étant limite de la suite {x(k) }k≥0
définie par :
et on a la majoration d’erreur :
x(k+1) = g(x(k) ), k ≥ 0,
x(0) ∈ Idonné
|x(k) − ξ| ≤ const · Lk
(2.3)
(2.4)
Preuve. Cette démonstration utilise la propriété de R d’être complet qui dit que toute suite de Cauchy
de réels est convergente ; une suite {r (k) }k≥0 est dite de Cauchy si quel que le nombre ǫ > 0 donné (par
exemple ǫ = 10−p où p ≥ 1), on peut trouver un entier N (ǫ) ≥ 0 tel que m ≥ N (ǫ) et n ≥ N (ǫ) impliquent
|r (m) − r (n) | ≤ ǫ (autrement dit quel que soit le rang p on peut trouver un enter N (10−p ) tel que les p − 1
premières décimales de tous les nombres r (k) avec k ≥ N (10−p ) sont les mêmes ou encore sont stabilisées.
L’intervalle I étant stable par g, par récurrence sur k on a x(k) ∈ I. Montrons que la suite (x(k) ) est de
Cauchy. La fonction g étant lipschitzienne de rapport L, |x(k+1) −x(k) | = g(x(k) )−g(x(k−1) )| ≤ L·|x(k) −x(k−1) |
et donc en itérant |x(k+1) −x(k) | ≤ Lk |x(1) −x(0) |. Cela montre aussi que |x(k+p) −x(k)| ≤ |x(k+p) −x(k+p−1)|+
p
k (1) − x(0) | en
|x(k+p−1) − x(k+p−2) | + ... + |x(k+1) − x(k) | ≤ (Lk+p−1 + Lk+p−1 + ... + Lk )|x(1) − x(0) | = 1−L
1−L L |x
sommant la série géométrique de raison L. On a donc |x(k+p) − x(k) | →k→∞ 0 quel que soit l’entier p ≥ 0 ce
qui signifie bien que {x(k) }k≥0 est de Cauchy. Donc {x(k) }k≥0 converge vers un réel ξ appartenant forcément
24
à I puisque x(k) ∈ I et que I est fermé. Maintenant, grace à la continuité de g, en passant à la limite dans la
p
k (1) − x(0) |
relation x(k+1) = g(x(k) ) on obtient ξ = g(ξ). Enfin revenant à l’inégalité |x(k+p) − x(k) | ≤ 1−L
1−L L |x
k
L
on peut faire tendre p vers l’infini et il vient |ξ − x(k) | ≤ 1−L
|x(1) − x(0) | ≤ const · Lk .
Prouvons enfin l’unicité du point fixe ξ dans I : si η est un autre point fixe dans I, de ξ = g(ξ) et η = g(η)
et de 2.2on déduit |ξ − η| = |g(ξ) − g(η)| ≤ L|ξ − η| < |ξ − η| si ξ 6= η ce qui est absurde et donc la seule
possibilité est ξ = η cqfd.
Remarques. (i) La méthode consiste donc simplement à itérer une fonction. La vitesse de convergence est
la même que celle de la suite géométrique de raison L vers 0 car
|x(k) − ξ| = O(Lk )
La convergence est donc d’autant plus rapide que L est petit devant 1. Si L ≥ 1/2 la méthode est moins
performante que la simple dichotomie.
Si on passe au logarithme on voit que le nombre de décimales exactes augmente linéairement avec k :
on dit que l’algorithme du point fixe converge à vitesse linéaire. Si par exemple L = 10−d , Lk = 10−k d , à
chaque itération on gagne d décimales.
(ii) Lorsque la fonction g est C 1 , on peut estimer la vitesse de convergence :
g(x(k ) − g(ξ)
(x(k+1 − ξ)
=
→ g′ (ξ).
(x(k − ξ)
x(k − ξ
La convergence est d’autant plus rapide que |g ′ (ξ)| est petit devant 1. Si g′ (ξ) = 0, la convergence est très
rapide, on dit qu’elle est superlinéaire, i.e. mieux que linéaire.
iii) La généralisation de la preuve au cas d’une fonction g d’un espace métrique complet, en particulier Rn
ou un espace vectoriel normé complet (un espace de Banach) dans lui même est simple ; il suffit de remplacer
partout les valeurs absolues de différences |x − y| par d(x, y) (ou kx − yk) . Le théorème du point fixe de
Banach a une portée considérable et permet en particulier d’établir un théorème d’existence et d’unicité de
la majorité des problèmes d’équations différentielles ordinaires avec conditions initiales posées en pratique.
iv) Dans notre cas d’une fonction g réelle de variable réelle il peut être plus élémentaire de distinguer les
cas g croissante de pente majorée par L < 1 (cas de l’escalier) qui conduit à une suite {x(k) }k≥0 monotone
(croissante majorée ou décroissante minorée selon que x(0) < ξ ou x(0) > ξ) et g décroissante de pente minorée
par −L > −1 (cas de l’escargot) qui conduit à une suite {x(k) }k≥0 constituée de deux suites adjacentes de
même limite ξ. On est conduit ainsi à d’autres démonstrations utilisant la propriété de R qui dit que toute
suite de réels monotone bornée est convergente.
v) Il faut insister sur le fait qu’il ne suffit pas que la fonction g soit une application continue de l’intervalle
I dans lui même pour que la méthode des approximations successives converge. Il faut aussi que g soit
contractante (0 ≤ L < 1). On peut évoquer ici, bien que les détails de ce sujet soient complètement en
dehors du programme de L3 de mathématiques, les questions qui le comportement chaotique de certaines
suites ou systèmes dynamiques. L’exemple de Feigenbaum 2 concerne la fonction dite logistique x → gk (x) =
kx(1 − x). Lorsque le paramètre k est compris entre 0 et 4, la fonction gk est une application de [0, 1] dans
lui même, mais selon les valeurs de k, le comportement de la suite {x(n) }n≥0 , où x(0) ∈ [0, 1] est quelconque
et x(n+1) = kx(n) (1 − x(n) ) si n ≥ 0, change. Lorsque 0 < k ≤ k1 = 1, x = 0 est l’unique point fixe et la suite
x(n) →n→∞ 0. Si 1 < k, il y a deux points fixes dans [0, 1], x = 0 et x = 1 − k1 , mais pour 1 < k < k2 = 3,
le point fixe x = 0 est répulsif (dérivée g′ (0) = k de module > 1) alors que le point fixe x = 1 − k1 est
attractif (dérivée g′ (1 − k1 ) = 2 − k de module < 1) si bien que pour 0 < x(0) < 1, la suite x(n) →n→∞ 1 − k1
(évidemment, si x(0) = 0 ou 1, x(n) = 0 pour n ≥ 1). Pour k = k2 = 3, il y a encore convergence (très lente)
de {x(n) }n≥0 vers 1 − 13 (pour 0 < x(0) < 1) mais pour k > k2 = 3, les deux points fixes sont répulsifs et la
suite {x(n) }n≥0 qui reste bornée n’est plus convergente.
2. La référence est M.J. Feigenbaum, 1979, The universal metric properties of nonlinear transformations : J. Stat. Phys., 21,
669 – 706.
25
y(x)=kx(1−x) avec k=3.5
1
0.8
0.8
y’(x)
y
0.4
x(3841:4096)
2
0.6
0
−2
0.2
0
Diagramme de bifurcation
1
4
0
0.5
x
−4
1
0.6
0.4
0.2
0
x(0)=0.054199
0.5
x
0
1
x(0)=0.73845
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0.5
x
1
4
y
0.8
y
1
y
1
0
2
k
x(0)=0.63557
1
0
0
0
0
0.5
x
1
0
0
0.5
x
1
Revenant à notre sujet principal, pour trouver des racines d’équations x = g(x) qu’on peut mettre sous
la forme f (x) = 0 en posant f (x) = h(x)(x − g(x)) pour une fonction h(x) “bien choisie” , la méthode la
plus rapide lorsqu’elle converge est celle de Newton. C’est l’objet de ce qui suit.
2.2
La méthode de Newton (ou de Newton-Raphson)
La méthode de Newton pour résoudre f (x) = 0, où f est une fonction de R (ou d’un intervalle I ⊂ R) dans
R dérivable, consiste à définir, à partir d’une première approximation x(0) de la racine, une suite {x(k) }k≥0
telle que x(k+1) soit le zéro de “l’approximation au premier ordre de f en x(k) ” x → f (x(k) )+f ′ (x(k) )(x−x(k) ),
ou encore l’abscisse où la tangente au graphe de f passant par le point (x(k) , f (x(k) )) rencontre l’axe des x,
si bien que :
x(k+1) = x(k) −
f (x(k) )
.
f ′ (x(k) )
(2.5)
Nous allons donner deux démonstrations assez élémentaires de convergence de cette méthode avec différents domaines de validité.
2.2.1
Première démonstration. Cas où f est de classe C 2 , strictement monotone et
convexe ou concave et change de signe sur un intervalle [a, b]
Théorème 2 Si est une fonction réelle f définie sur un intervalle [a, b], de classe C 2 (deux fois continûment
dérivable), change de signe sur [a, b] (vérifie f (a)f (b) < 0) a une dérivée f ′ (x) 6= 0 pour tout x ∈ [a, b] (c’est
à dire est strictement monotone sur [a, b]) et est soit convexe (f ′′ (x) ≥ 0 pour tout x ∈ [a, b]) soit concave
(0) )
(f ′′ (x) ≤ 0 pour tout x ∈ [a, b]) sur [a, b], alors, étant donné x(0) ∈ [a, b] tel que x(1) = x(0) − ff′(x
∈ [a, b],
(x(0) )
la suite {x(k) }k≥0 engendrée par la méthode de Newton (formule (2.5)) est bien définie (tout entière contenue
26
dans [a, b]), converge vers l’unique racine ξ de f sur [a, b] et de plus (x(k+1) − ξ) ∼k→∞
dit que la convergence est quadratique).
1 f ′′ (ξ) (k)
2 f ′ (ξ) (x
− ξ)2 (on
Preuve. En changeant au besoin 3 le signe de x et (ou) f , on peut toujours supposer que f (a) < 0,
f (b) > 0, f ′ (x) > 0 pour x ∈ [a, b] et f ′′ (x) ≥ 0 pour x ∈ [a, b].
Bien évidemment la fonction continue strictement croissante f a un zéro unique ξ ∈]a, b[ et on peut remar(0) )
∈ [a, b], on peut
quer que {x ∈ [a, b], f (x) ≥ 0} ⇔ {ξ ≤ x ≤ b}. Comme par hypothèse x(1) = x(0) − ff′(x
(x(0) )
f (x(0) )
écrire, en appliquant la formule de Taylor-Lagrange à l’ordre deux, f (x(1) ) = f (x(0) ) + f ′ (x(0) )(− ′ (0) )
f (x )
{z
}
|
0
+ 12 f ′′ (η (0) )(x(1) − x(0) )2 ≥ 0 où η (0) est entre x(0) et x(1) , et donc ξ ≤ x(1) ≤ b.
Montrons par récurrence que ξ ≤ x(k+1) ≤ x(k) ≤ b pour k ≥ 0. Supposons donc cette propriété vraie
(k) )
(k) )
, avec ff′(x
≥ 0, on a bien x(k+1) ≤ x(k) ≤ b. D’autre
jusqu’au rang k ; comme x(k+1) = x(k) − ff′(x
(x(k) )
(x(k) )
part la convexité de f donne que le graphe de f est au dessus de la tangente en un point quelconque :
f (x(k+1) ) ≥ f (x(k) ) + f ′ (x(k) )(x(k+1) − x(k) ) = 0 d’où x(k+1) ≥ ξ. Ainsi la propriété est vraie pour tout k ≥ 0.
Finalement la suite {x(k) }k≥1 est monotone décroissante minorée par ξ, donc converge vers un nombre
µ ∈ [ξ, b], mais comme la limite de (2.5) donne (car f et f ′ sont continues et f ′ (x) > 0 sur [a, b]) µ =
(k) = ξ. Enfin la formule de Taylor-Lagrange à l’ordre
µ − ff′(µ)
(µ) forcément f (µ) = 0 ce qui prouve limk→∞ x
deux donne aussi, avec ζ (k) ∈ [ξ, x(k) ] : 0 = f (ξ) = f (x(k) ) + f ′ (x(k) )(ξ − x(k) ) + 21 f ′′ (ζ (k) )(ξ − x(k) )2 =
′′ (ζ (k) )
f (x(k) )
(k) )2 ). Comme f ′ ne s’annule pas par hypothèse,
f ′ (x(k) )( ′ (k) + ξ − x(k) + 21 ff ′ (x
(k) ) (ξ − x
f (x )
{z
}
|
ξ−x(k+1)
ξ − x(k+1) = −
(k+1)
′′
(k)
1 f ′′ (ζ (k) )
(ξ − x(k) )2 )
2 f ′ (x(k) )
′′
x
−ξ
1 f (ζ )
1 f (ξ)
et donc on a (x
(k) −ξ)2 = 2 f ′ (x(k) ) →k→∞ 2 f ′ (ξ) . cqfd.
Remarques.
i) On peut voir la méthode de Newton comme l’application de la méthode des approximations successives
à la fonction x → g(x) = x − ff′(x)
(x) et le fait que la convergence est quadratique (donc superlinéaire, voir
remarque alinéa précédent) vient de l’annulation de la constante de Lipschitz en x = ξ, puisque g′ (ξ) =
′
f (ξ)f ′′ (ξ)
1 − ff ′ (ξ)
(ξ) + (f ′ (ξ))2 = 0.
ii) La convergence quadratique signifie qu’en pratique le nombre de décimales exactes "double" à chaque
itération. En effet, si x(k) a d décimales exactes, on a |(x(k) − ξ)| ∼ 10−d , alors |(x(k+1) − ξ)| = O(x(k) − ξ)2
sera de l’ordre de 10−2d et donc aura en gros 2d décimales exactes.
iii) Cette démonstration ne se généralise pas directement au cas d’une application f de Rn dans Rn avec
n > 1 et ne permet
 pas de traiter le cas d’un zéro ξ qui est un point d’inflexion (cas où par exemple f (ξ) = 0,
 < 0 si x > ξ
′
′′
f (ξ) > 0, f (x)
= 0 si x = ξ ).

> 0 si x < ξ
2.2.2
Deuxième démonstration : convergence locale au voisinage d’un zéro ξ où f ′ (ξ) 6= 0
qui englobe le cas d’un zéro qui est un point d’inflexion
Théorème 3 Étant donnée une fonction f continûment différentiable de R (ou d’un intervalle I de R) dans
R ayant un zéro ξ en lequel f ′ (ξ) 6= 0, il existe δ > 0 tel que si |x(0) − ξ| < δ la suite {x(k) }k≥0 engendrée
par la méthode de Newton (formule (2.5)) converge vers ξ.
3. Si f ′′ (x) ≥ 0, dans le cas où f ′ (x) > 0 il n’y a rien à changer et dans le cas où f ′ (x) < 0, il suffit de changer x en −x pour
obtenir sur l’intervalle [−b, −a] une fonction x → f (−x) qui est bien convexe strictement croissante. Si f ′′ (x) ≤ 0, après avoir
changé f en −f , on est ramené au cas précédent.
27
Preuve. Choisissons 0 < α < 1, montrons par récurrence que la suite {x(k) }k≥0 engendrée par la méthode
de Newton vérifie |x(k) − ξ| ≤ αk |x(0) − ξ| ce qui prouvera bien que x(k) →k→∞ ξ puisque αk →k→∞ 0 pour
0 < α < 1. Cette inégalité est vraie pour k = 0 et si elle est vraie jusqu’au rang k (|x(k) − ξ| ≤ αk |x(0) − ξ|),
on peut écrire :
x(k+1) − ξ = x(k) − (f ′ (x(k)
))−1 f (x(k) ) − ξ

= −(f ′ (x(k) ))−1 f (x(k) ) − f (ξ) −f ′ (x(k) )(x(k) − ξ)
|{z}
0
Ecrivons sous forme d’intégrale l’expression
f (x
(k)
′
) − f (ξ) − f (x
(k)
)(x
(k)
− ξ) =
On obtient ainsi :
x
(k+1)
′
− ξ = −(f (x
On considère la fonction
(k)
−1
))
Z
ξ
Z
x(k)
x(k)
ξ
(f ′ (t) − f ′ (x(k) )) dt
(f ′ (t) − f ′ (x(k) )) dt
(x, y) ∈ R2 → ϕ(x, y) = |(f ′ (x))−1 ||f ′ (y) − f ′ (x)|∈ R.
Cette fonction est définie continue au voisinage de (ξ, ξ) et vérifie ϕ(ξ, ξ) = 0, donc, définition de la continuité
en (ξ, ξ), pour tout α > 0, il existe δ = δ(α) tel que {|x − ξ| < δ(α), |y − ξ| < δ(α)} ⇒ |ϕ(x, y)| < α. Donc
si |x(k) − ξ| ≤ αk |x(0) − ξ| et 0 < α < 1, on a
| − (f ′ (x(k) ))−1 (f ′ (t) − f ′ (x(k) ))| = ϕ(x(k) , t) < α
puisque |x(k) − ξ| ≤ αk |x(0) − ξ| < αk δ(α) < δ(α) et |t − ξ| ≤ |x(k) − ξ| < δ(α) et :
|x
(k+1)
− ξ| ≤
Z
x(k)
ξ
ϕ(x(k) , t) dt ≤ α|x(k) − ξ| ≤ αk+1 |x(0) − ξ|
si bien que l’inégalité est vraie au rang k + 1 donc à tous les rangs. cqfd.
Remarques. (i) Si on suppose f de classe C 2 , dans le cas de convergence de la méthode, on a la vitesse de
convergence quadratique, par le même raisonnement que dans la preuve du théorème précédent. Cependant,
même si f est seulement de classe C 1 , on voit que la convergence est plus rapide que toute suite géométrique
αk , car α est arbitraire dans la preuve. On retrouve la superconvergence de la méthode, même dans ce cas.
ii) Cette démonstration se généralise au cas d’une application f de Rn dans Rn avec n > 1, la méthode de
Newton devenant dans ce cas, si f (x1 , x2 , ..., xn ) = (f1 (x1 , x2 , ..., xn ), f2 (x1 , x2 , ..., xn ), ..., fn (x1 , x2 , ..., xn ))T :
x(k+1) = x(k) − (Df (x(k) ))−1 f (x(k) ),
où (Df (x(k)
))−1 est l’inverse de la matrice
Jacobienne de f en x(k) (matrice n × n)

∂f1
∂f1
∂f1
∂x2 · · ·
∂xn
1
 ∂x
∂f2
∂f2 
∂f2
·
·
·

∂x1
∂x2
∂xn 
(k) (k)
(k) T
(k)
(k)
(k)

Df (x ) =  .
..
.. 
..
 (x ) et bien sûr x = (xn , xn , ..., xn ) . Il suffit de remplacer les
.
.
.
. 
 .
∂fn
∂fn
∂fn
∂x1
∂x2 · · ·
∂xn
valeurs absolues |.| par une norme k.k dans Rn .
iii) Cette démonstration permet de traiter le cas d’un zéro ξ qui est un point d’inflexion ; il y aura
convergence si f ′ est continue sous réserve que l’approximation initiale soit assez proche de ξ. Mais si
l’approximation initiale n’est pas assez proche de ξ, il y a des cas où on peut observer des suites avec
38 3
5
plusieurs points d’accumulation. Par exemple dans le cas de la fonction polynôme 4 f (x) = 11
91 x − 91 x + x,
4. Exemple trouvé dans le livre R. Fletcher, 1980, Practical methods of optimization, Vol 1, Unconstrained Optimization :
John Wiley & Sons, New York ... il est très facile de fabriquer d’autres exemples.
28
x = 0 est un zéro qui est un point d’inflexion (f (0) = 0,f ′ (0) = 1, f ′′ (0) = 0) et on a x(0) = 1 ⇒ x(1) =
1−
f (1)
f ′ (1)
= 1−
64
91
32
91
f (−1)
f ′ (−1) = −1
d’accumulation x∞ = ±1,
= −1 ⇒ x(2) = −1 −
−
64
− 91
32
91
= 1. Alors si x(0) = 1.01 par exemple la suite
x(k) présente deux points
alors que si x(0) = 0.9 il y a convergence vers 0. À
noter que si la fonction f (x) n’est pas dérivable en le zéro ξ il se peut qu’il y ait toujours
plusieurs points
√
p x si x ≥ 0
.
d’accumulation quel que soit x(0) 6= ξ. C’est ce qu’on observe 5 avec la fonction f (x) =
− (−x) si x < 0
La figure suivante obtenue avec le code MATLAB :
% Polynôme présentant un point d’inflexion en la racine 0
p=[11/91 0 -38/91 0 1 0]; q=polyder(p); x=-1.2:0.01:1.2; y=polyval(p,x);
% cas x^(0)=1.01 (divergence)
xn=1.01; u=xn; v=0;
for k=1:10
pxn=polyval(p,xn); u=[u;xn]; v=[v;pxn]; xn=xn-pxn/polyval(q,xn); u=[u;xn]; v=[v;0];
end
subplot(2,2,1); plot(x,y,x,0,u,v);
title({’Méthode de Newton appliquée au’;’polynôme 11/91*x^5-38/91*x^3+x’;...
[’avec x^{(0)}=1.01, x^{(10)}=’,num2str(xn)]});
% cas x^(0)=0.9 (convergence)
xn=0.9; clear u,v; u=xn; v=0;
for k=1:10
pxn=polyval(p,xn); u=[u;xn]; v=[v;pxn]; xn=xn-pxn/polyval(q,xn); u=[u;xn]; v=[v;0];
end
subplot(2,2,2); plot(x,y,x,0,u,v);
title({’Méthode de Newton appliquée au’;’polynôme 11/91*x^5-38/91*x^3+x’;...
[’avec x^{(0)}=0.9 x^{(10)}=’,num2str(xn)]});
%
% Fonction sqrt(abs(x)) (exemple perverse)
f=@(x) sqrt(abs(x)).*sign(x); fp=@(x) 0.5./sqrt(abs(x));
y=f(x);
% cas x^(0)=1
xn=1; clear u,v; u=xn; v=0;
for k=1:10
fxn=f(xn); u=[u;xn]; v=[v;fxn]; xn=xn-fxn/fp(xn); u=[u;xn]; v=[v;0];
end
subplot(2,2,3); plot(x,y,x,0,u,v);
title({’Méthode de Newton appliquée à’;’la fonction signe(x) \surd|x|’;...
[’avec x^{(0)}=1 x^{(10)}=’,num2str(xn)]});
% cas x^(0)=0.5
xn=0.5; clear u,v; u=xn; v=0;
for k=1:10
fxn=f(xn); u=[u;xn]; v=[v;fxn]; xn=xn-fxn/fp(xn); u=[u;xn]; v=[v;0];
end
subplot(2,2,4); plot(x,y,x,0,u,v);
title({’Méthode de Newton appliquée à’;’la fonction signe(x) \surd|x|’;...
[’avec x^{(0)}=0.5 x^{(10)}=’,num2str(xn)]});
illustre ce point.
5. Exemple appelé “exemple pervers” trouvé dans le livre C.B. Moler, 2004, Numerical computing with MATLAB : Siam,
Philadelphia (disponible gratuitement sur internet sur http ://www.mathworks.fr/moler).
29
Méthode de Newton appliquée au
5
3
polynôme 11/91*x −38/91*x +x
(0)
(10)
avec x =1.01;... x =1
Méthode de Newton appliquée au
5
3
polynôme 11/91*x −38/91*x +x
(0)
(10)
avec x =0.9;... x =0
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−2
−1
0
1
−1
−2
2
Méthode de Newton appliquée à
la fonction signe(x) √|x|
avec x(0)=1;... x(10)=1
2
1
1
0
0
−1
−1
2.3
−1
0
1
0
1
2
Méthode de Newton appliquée à
la fonction signe(x) √|x|
avec x(0)=0.5;... x(10)=0.5
2
−2
−2
−1
−2
−2
2
−1
0
1
2
Quelques procédés d’accélération de convergence de suites qui font
plutôt parties de notions élémentaires d’analyse numérique
2.3.1
La méthode d’accélération de convergence appelée ∆2 d’Aitken
Ce procédé consiste, à partir d’une suite de réels {x(k) }k≥0 qui converge vers une limite ξ mais vérifie
6= ξ pour tout k, à calculer une suite {x′(k) }k≥0 définie par :
x(k)
x′(k) = x(k) −
(x(k+1) − x(k) )2
.
x(k+2) − 2x(k+1) + x(k)
(2.6)
On note d’ordinaire ∆x(k) = x(k+1) − x(k) et donc ∆2 x(k) = ∆(x(k+1) − x(k) ) = x(k+2) − 2x(k+1) + x(k) d’où
la terminologie ∆2 . Montrons que si la suite convergente {x(k) }k≥0 de limite ξ est telle que la suite {θ (k) }k≥0
définie par x(k+1) − ξ = θ (k)(x(k) − ξ) vérifie θ (k) →k→∞ θ avec |θ| < 1, alors :
x′(k) − ξ
= 0,
k→∞ x(k) − ξ
(2.7)
lim
(la suite {x′(k) }k≥0 converge vers ξ plus rapidement que {x(k) }k≥0 ).
Preuve. C’est un simple calcul :
x′(k) − ξ = x(k) − ξ −
(θ (k) − 1)2
(x(k+1) − ξ − (x(k) − ξ))2
=
(1
−
)(x(k) − ξ),
x(k+2) − ξ − 2(x(k+1) − ξ) + (x(k) − ξ)
θ (k+1) − 2θ (k) + 1
et comme θ (k) →k→∞ θ 6= 1, on peut affirmer que
2.3.2
(θ (k) −1)2
θ (k+1) −2θ (k) +1
→k→∞
(θ−1)2
θ 2 −2θ+1
= 1, d’où le résultat.
Le procédé ∆2 diagonal et la méthode de Aitken-Steffensen
Bien entendu, on peut réitérer le procédé précédent pour fabriquer successivement, au moyen de la formule
(2.6) et à partir de la suite {x(k) ≡ x(k,0) }k≥0 , les suites {x(k,1) ≡ x′(k) }k≥0 puis {x(k,2) }k≥0 , ..., {x(k,p) }k≥0 ,
... (avec x(k,p) = x(k,p−1) −
(x(k+1,p−1) −x(k,p−1) )2
).
x(k+2,p−1) −2x(k+1,p−1) +x(k,p−1)
On n’étudiera pas les conditions sous lesquelles ce
procédé améliore la convergence. On notera simplement qu’on peut s’intéresser à la diagonale {x(k,k) }k≥0 du
30
tableau de suites ainsi formé et dans le cas où la suite initiale {x(k) }k≥0 est obtenue à partir de la méthode
des approximations successives appliquée à une fonction g (x(k+1) = g(x(k) )), on se contentera de signaler
que {x(k,k) }k≥0 est la suite obtenue en appliquant la méthode des approximations successives non pas à la
fonction g mais à la fonction G qui est :
G(x) = x −
(g(x) − x)2
g(g(x)) − 2g(x) + x
(2.8)
La méthode qui, pour résoudre x = g(x), consiste à appliquer la méthode des approximations successives
(g(x)−x)2
à x = G(x) avec G(x) = x− g(g(x))−2g(x)+x
, s’appelle méthode de Aitken-Steffensen et en général elle converge
aussi rapidement que la méthode de Newton. Cette rapidité de convergence s’explique assez facilement une
fois qu’on a pu calculer les dérivées G′ (x) et G′′ (x) en x = ξ le point fixe de g (g(ξ) = ξ). Ce calcul n’est pas
si facile “à la main” et les instructions maple :
g:=x->g(x);
G:=x->x-(g(x)-x)^2/(g(g(x))-2*g(x)+x);
taylor(G(x),x=xi,3);
ne permettent pas d’y arriver car il faut faire un développement de Taylor de g au voisinage x = ξ pour lever
des indéterminations 00 . On peut utiliser, par exemple à la suite des précédentes, les instructions maple :
g:=x->xi+a*(x-xi)+b*(x-xi)^2/2+c*(x-xi)^3/6;
G(x);
limit(subs(x=xi+delta,diff(G(x),x)),delta=0);
limit(subs(x=xi+delta,diff(G(x),x,x)),delta=0);
limit(subs(x=xi+delta,diff(G(x),x,x,x)),delta=0);
ou encore, plus simplement :
g:=x->xi+a*(x-xi)+b*(x-xi)^2/2+c*(x-xi)^3/6;
simplify(taylor(G(x),x=xi,4));
pour obtenir (entre parenthèse il y a les expressions fournie par les instructions maple) 6 :
G′ (ξ) = 0, G′′ (ξ) = (
G′′′ (ξ) = (
ab
g′ (ξ)g′′ (ξ)
)= ′
a−1
g (ξ) − 1
1 2ca3 − 3a2 b2 − 2ac − 3b2
1 2g ′′′ (ξ)g′ (ξ)3 − 3g′ (ξ)2 g′′ (ξ)2 − 2g′ (ξ)g′′′ (ξ) − 3g′′ (ξ)
)=
2
2
(a − 1)
2
(g ′ (ξ) − 1)2
Ainsi la méthode de Aitken-Steffensen a le même ordre de convergence que la méthode de Newton et
ne nécessite pas le calcul d’une dérivée. Cette méthode peut même converger si le point fixe de g n’est pas
attractif (cas g(ξ) = ξ avec |g ′ (ξ)| > 1) 7 . Mais il n’y a pas de généralisation à plusieurs dimensions.
2.4
Les méthodes de la fausse position, de la sécante et l’algorithme de
Dekker-Brent
Le but de ce paragraphe est de décrire les principes de construction des algorithmes de calcul des zéros
des fonctions réelles d’une variable réelle lorsqu’on connaît a priori un intervalle d’encadrement de la racine
sur lequel la fonction change de signe et lorsqu’on préfère ou lorsqu’on ne peut pas calculer de dérivée. On
trouve ces algorithmes 8 dans le logiciel MATLAB (fonction fzero) et dans la plupart des bibliothèques de
calcul comme SLATEC, NAG, IMSL. Le calcul d’un zéro d’ordre pair ne peut pas être fait de cette façon et avec
MATLAB on peut conseiller l’usage de la fonction fminbnd pour le calcul d’un minimum local.
6. En exercice on peut vérifier que si g ′ (ξ) = 1, on trouve G′ (ξ) = 21 et calculer G′′ (ξ).
7. Il est intéressant de l’appliquer à la fonction logistique.
8. Dans le logiciel SCILAB (fonction fsolve) l’algorithme utilisé est le même que celui à plusieurs variables et est donc bien
plus compliqué (dérivée de MINPACK).
31
2.4.1
2.4.1.1
Les méthodes de la fausse position et de la sécante
La méthode de la fausse position
Étant donnée une fonction réelle f définie continue sur un intervalle [a, b], telle que f (a)f (b) < 0, on
conviendra ici d’appeler méthode de la fausse position la méthode qui consiste à approcher le zéro de f
sur [a, b] par le zéro du polynôme d’interpolation de f aux points a et b et de degré inférieur ou égal à
1, ceci permettant soit d’arrêter les calculs soit de trouver un intervalle plus petit contenant le zéro et
x−a
de recommencer. L’expression de ce polynôme étant p1 (x) = x−b
a−b f (a) + b−a f (b) (c’est bien une fonction
polynôme de degré au plus 1 qui vaut f (a) si x = a et f (b) si x = b) ce zéro est :
c=
a(f (b) − f (a)) + af (a) − bf (a)
af (b) − bf (a)
=
=a−
f (b) − f (a)
f (b) − f (a)
f (a)
f (b)−f (a)
b−a
On obtient ainsi l’algorithme :
[a(0) , b(0) ] = [a, b] et pour k = 0, 1, ...
(k)
f (a )
et on définit le nouveau intervalle par :
on calcule c = a(k) − f (b(k)
)−f (a(k) )
(k)
(k)
b
−a
 (k+1)
.
= b(k+1) = c si f (c) = 0
 a
a(k+1) = a(k) , b(k+1) = c si f (a(k) )f (c) < 0
 (k+1)
a
= c, b(k+1) = b(k) si f (a(k) )f (c) > 0
(2.9)
On pourrait penser que si f est assez régulière c’est à dire ici ”convenablement approchée par un polynôme
de degré 1, ce qui est le cas si f est de classe C 2 (deux fois continûment dérivable)”, alors on obtient ainsi
un algorithme plus performant que la méthode de dichotomie ou la méthode des approximations successives
appliquée à la recherche d’un point fixe de g(x) = x + f (x) ou x − f (x) (dans les cas où cela fonctionne).
Et bien ce n’est pas forcément le cas et si par exemple f ′ (x) > 0, f ′′ (x) ≥ 0 pour x ∈ [a, b] et si l’algorithme
est infini, alors b(k) = b pour tout k ≥ 0 et a(k+1) = a(k) −
f (a(k) )
f (b)−f (a(k) )
b−a(k)
→k→∞ ξ, l’unique zéro de f sur [a, b],
si bien qu’on obtient la méthode des approximations successives appliquée à la fonction g(x) = x −
(qui est aussi g(x) = b −
f (b)
f (b)−f (x)
b−x
) et la convergence n’est que linéaire, plus précisément
a(k+1) −ξ
a(k) −ξ
f (x)
f (x)−f (b)
x−b
→k→∞ g′ (ξ)
où 0 < g′ (ξ) < 1 en général.
Preuve. On utilise d’abord la convexité de f sur [a, b] (le graphe de f (x) sur un intervalle est en dessous
de la corde qui joint les extrémités du graphe sur cet intervalle) dont la traduction analytique est f (θx +
(1 − θ)y) ≤ θf (x) + (1 − θ)f (y) pour 0 ≤ θ ≤ 1 et x, y ∈ [a, b]. Cette inégalité se déduit de f ′′ (x) ≥ 0 comme
suit. On écrit, en utilisant la formule des accroissements finis sur f puis sur f ′ (ϕ(v) − ϕ(u) = ϕ′ (w)(v − u)
où w ∈]u, v[ si ϕ : [u, v] → R est continue et ϕ : ]u, v[→ R dérivable) :
f (θx + (1 − θ)y) − (θf (x) + (1 − θ)f (y)) = θ(f (θx + (1 − θ)y) − f (x)) + (1 − θ)(f (θx + (1 − θ)y) − f (y))
|
{z
}
{z
}
|
= θ(1 − θ)(y
x+(1−θ)(y−x)
− x)(f ′ (η1 ) −
y−θ(y−x)
f ′ (η2 )),
avec x < η1 < θx + (1 − θ)y < η2 < y, et donc, avec η1 < η3 < η2 :
f (θx + (1 − θ)y) − (θf (x) + (1 − θ)f (y)) = θ(1 − θ)(y − x)(η1 − η2 )f ′′ (η3 ) ≤ 0 cqfd.
Revenant à notre problème on note que si a(k) < b(k) , ce qui est vrai pour k = 0, c = a(k) −
f (a(k) )
f (b(k) )−f (a(k) )
b(k) −a(k)
qui appartient à [a(k) , b(k) ] (car le polynôme de degré 1, p1 vérifie p1 (a(k) ) < 0 < p1 (b(k) )), s’écrit aussi
(k)
b(k) − c
b(k) −c
(k) + c − a
(k) ) + c−a(k) f (b(k) ) =
a
b(k) et comme f est convexe f (c) ≤ b(k)
c = (k)
(k) f (a
(k)
(k)
(k)
−a
b(k) −a(k)
−a }
−a }
|b {z
|b {z
θ tel que 0<θ<1
1−θ
p1 (c) = 0 si bien que, si l’algorithme est infini, cette inégalité est toujours stricte et on a b(k+1) = b(k) = b
32
et a(k+1) = c = a(k) −
f (a(k) )
f (b)−f (a(k) )
b−a(k)
f (b)
(qui est aussi b −
f (b)−f (a(k) )
b−a(k)
). L’algorithme est bien la méthode des
approximations successives appliquée à x = g(x) avec g(x) = x −
f (x)
f (b)−f (x)
b−x
ou encore g(x) = b −
f (b)
f (b)−f (x)
b−x
.
Il est clair que la suite {a(k) }k≥0 est croissante et converge vers l’unique zéro ξ de f sur [a, b] et comme
a(k+1) − ξ = g(a(k) ) − ξ = g(a(k) ) − g(ξ) = g ′ (η (k) )(a(k) − ξ) où a(k) < η (k) < ξ, il vient
Il ne reste plus qu’à exprimer cette dérivée pour montrer que 0 < g ′ (ξ) < 1. Or :
g ′ (ξ)
= (x −
f (x)
′
f (b)−f (x) )x=ξ
b−x
=
=1−
f (b)−(b−ξ)f ′ (ξ)
f (b)
=
f ′ (ξ)
f (b)−f (ξ)
b−ξ
+(
(x) ′
f (x)( f (b)−f
)
b−x
(x) 2
)
( f (b)−f
b−x
|
{z
f (b)−f (ξ)−(b−ξ)f ′ (ξ)
f (b)
0
=
a(k+1) −ξ
a(k) −ξ
→k→∞ g′ (ξ).
f ′ (ξ)
)x=ξ = 1 − (b − ξ)
f (b)
{z
} ,
} |
(b−ξ)2 f ′′ (η
2f (b)
<1
≥0
la dernière assertion résultant de la convexité de f . Ainsi cette méthode n’est pas performante et peut même
être moins efficace que la méthode de dichotomie si g ′ (ξ) > 12 .
2.4.1.2
La méthode de la sécante
Cette méthode repose sur la même formule que la précédente mais vue cette fois comme une approximation
(k) )
est approchée par
de la méthode de Newton où la dérivée f ′ (x(k) ) dans la formule x(k+1) = x(k) − ff′(x
(x(k) )
f (x(k) )−f (x(k−1) )
.
x(k) −x(k−1)
x
L’algorithme est donc :
(0)
= a, x
(1)
= b, x
(k+1)
=

 x(k) −

f (x(k) )
f (x(k) )−f (x(k−1) )
x(k) −x(k−1)
si f (x(k) ) 6= 0
x(k) si non
, pour k ≥ 1.
(2.10)
Il se trouve que, lorsqu’il converge, cet algorithme, dans lequel on abandonne la tâche de conserver un
encadrement de la racine, est performant et utilisé en pratique. Une modification convenable conduisant à
l’algorithme de Dekker-Brent permettra de retrouver un encadrement et sera décrite dans la sous section
suivante. Nous allons étudier cette méthode qui est très employée et dont la généralisation à plusieurs variables
est la méthode de Broyden (voir (ancien) cours de M1) sous la forme d’un problème avec des questions et
des réponses.
1) Quelques majorations d’erreur
a) Étant donnés deux réels distincts x(k−1) et x(k) , montrer que si x ∈ R → f (x)∈ R est une fonction
(k)
x−x(k−1)
(k−1) ) est
f (x(k) ) + x(k)x −x−x
réelle de classe C 2 (deux fois continûment dérivable) et si p(x) = x(k)
(k−1) f (x
−x(k−1)
le polynôme d’interpolation de f de degré inférieur ou égal à 1 aux points x(k−1) et x(k) , alors :
f (x) − p(x) =
(x − x(k−1) )(x − x(k) ) ′′ (k)
f (η ) où η (k) ∈] min(x, x(k−1) , x(k) ), max(x, x(k−1) , x(k) )[,
2
Indication pour ne pas refaire la démonstration vue plus haut. Lorsque x 6= x(k−1) et x 6= x(k) et avec
(t−x(k−1) )(t−x(k) )
ǫ(t) = f (t) − p(t), on appliquera le théorème de Rolle à la fonction ϕ(t) = ǫ(t) − ǫ(x) (x−x
(k−1) )(x−x(k) ) et à
sa première dérivée.
Réponse. Si x = x(k−1) ou x = x(k) la formule est vraie (ǫ(x) = 0 et η (k) est quelconque). Si non la
fonction ϕ(t) est bien définie, de classe C 2 et vérifie ϕ(x) = ϕ(x(k−1) ) = ϕ(x(k) ) = 0. D’après le théorème
de Rolle qui dit que dans l’intervalle ouvert situé entre deux abscisses distinctes où une fonction réelle de
variable réelle dérivable s’annule, il y a un point où la dérivée s’annule, on peut affirmer qu’il existe deux
réels y (1) et y (2) distincts 9 en lesquels ϕ′ (y (1) ) = ϕ′ (y (2) ) = 0. En appliquant encore le théorème de Rolle
à la dérivée première ϕ′ on voit qu’il existe η (k) ∈]y (1) , y (2) [⊂] min(x, x(k−1) , x(k) ), max(x, x(k−1) , x(k) )[ tel
que ϕ′′ (η (k) ) = 0. Or ϕ′′ (t) = f ′′ (t) − ǫ(x) (x−x(k−1)1)(x−x(k) ) et en portant t = η (k) on obtient le résultat. On
9. On peut toujours supposer, question de notation, x(k−1) < x(k) . Alors si x < x(k−1) < x(k) on a x < y (1) < x(k−1) < y (2) <
x(k) , si x(k−1) < x < x(k) on a x(k−1) < y (1) < x < y (2) < x(k) et enfin si x(k−1) < x(k) < x on a x(k−1) < y (1) < x(k) < y (2) < x.
33
notera que dans cette démonstration, contrairement à la précédente, il n’est pas indispensable que x soit
entre x(k−1) et x(k) .
b) Toujours sous l’hypothèse x ∈ R → f (x)∈ R fonction réelle de classe C 2 , en déduire que si ξ est un
zéro de f et si x(k−1) et x(k) sont deux réels tels que f (x(k−1) ) 6= f (x(k) ), alors en notant e(k−1) = ξ − x(k−1) ,
(x(k) )
, on a :
e(k) = ξ − x(k) , e(k+1) = ξ − x(k+1) et x(k+1) = x(k) − f (x(k)f)−f
(x(k−1) )
x(k) −x(k−1)
e(k+1) = −
1 f ′′ (η (k) )
2 f ′ (ζ (k) )
e(k) e(k−1) où η (k) , ζ (k) ∈] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[
Indication. Pour x = ξ, la formule précédente donne f (ξ) −p(ξ) =
|{z}
(2.11)
(ξ−x(k) )(ξ−x(k−1) ) ′′ (k)
f (η )
2
où η (k) ∈
0
] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[ et on a aussi p(ξ) = ...
(ξ − x(k) )(ξ − x(k−1) ) ′′ (k)
f (η ) où η (k) ∈
Réponse. Pour x = ξ, la formule précédente donne f (ξ) −p(ξ) =
|{z}
2
{z
}
|
0
] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[
et on a
aussi 10
1 (k) (k−1)
e e
2
(k+1)
p(ξ) = p(x
| {z
0
d’après la formule des accroissements finis
f (x(k) )−f (x(k−1) )
x(k) −x(k−1)
)+
}
p′ (.)
|{z}
f (x(k) )−f (x(k−1) )
x(k) −x(k−1)
(ξ − x(k+1) ). Or
|
{z
}
e(k+1)
= f ′ (ζ (k) ) où ζ (k) ∈] min(x(k−1) , x(k) ), max(x(k−1) , x(k) )[⊆
′′
(k)
(η ) (k) (k−1)
] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[ et donc on a bien e(k+1) = − 12 ff ′ (ζ
e
où η (k) , ζ (k) ∈
(k) ) e
] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[.
2) Convergence locale et convergence “superlinéaire”
Déduire du 1)b) qu’étant donnée une fonction f deux fois continûment différentiable 11 de R dans R
ayant un zéro ξ en lequel f ′ (ξ) 6= 0, il existe δ > 0 tel que si dans (2.10), les deux points x(0) et x(1) sont
choisis distincts et dans l’intervalle [ξ − δ, ξ + δ] alors la suite {x(k) }k≥0 converge vers ξ, la convergence étant,
si 12 e(k) 6= 0 pour tout k ≥ 0, “superlinéaire”, ce qui signifie limk→∞
Indication. Si x(k) et x(k−1) sont assez voisins de ξ, alors − 12
f ′′ (η(k) )
|e(k+1) |
|e(k) |
f ′ (ζ (k) )
= 0.
′′
(ξ)
est voisin de − 12 ff ′ (ξ)
et si |x(k) −ξ| ≤ δ
et |x(k−1) − ξ| ≤ δ avec α = δ majorant de || < 1...
′′ (η)
′′ (ξ)
Réponse. Il est clair que 13 − 12 ff ′ (ζ)
→
, donc on peut trouver 14 un réel δ > 0 tel que si
− 21 ff ′ (ξ)
η→ξ
ζ→ξ
|η (k) − ξ| ≤ δ et |ζ (k) − ξ| ≤ δ alors | −
faire en sorte que ce réel δ > 0 vérifie :
|η (k) − ξ| ≤ δ et |ζ (k) − ξ| ≤ δ ⇒ | −
1 f ′′ (η(k) )
2 f ′ (ζ (k) ) |
≤|−
f ′′ (ξ)
f ′ (ξ) |
et en diminuant au besoin δ, on peut toujours
1 f ′′ (η (k) )
f ′′ (ξ)
f ′′ (ξ)
|
≤
max(1,
|
−
|),
ET
α
≡
δ
max(1,
|
−
|) < 1.
2 f ′ (ζ (k) )
f ′ (ξ)
f ′ (ξ)
On doit remarquer aussi que sur le segment [ξ − δ, ξ + δ], f ne s’annule qu’en ξ car ici (η, ζ) ∈ [ξ − δ, ξ +
′′ (η)
δ] × [ξ − δ, ξ + δ] → − 21 ff ′ (ζ)
est bornée, donc f ′ ne s’annule pas sur [ξ − δ, ξ + δ] et f est strictement monotone
sur ce segment.
10. À noter la différence avec la preuve dans la remarque du paragraphe précédent.
11. C’est un bon exercice que d’essayer d’étendre le résultat au cas d’une fonction f une fois continûment différentiable à
dérivée Lipschitzienne, par exemple en s’inspirant du théorème de convergence locale de la méthode de Newton.
12. Si non la convergence est finie et il n’y a rien à ajouter.
13. Pour le voir, on peut dire qu’il s’agit de prouver que si deux suites de réels {η (k) }k≥0 et {ζ (k) }k≥0 sont telles que
′′
(k)
′′
(η
)
′′
1 f (ξ)
η (k) →k→∞ ξ et ζ (k) →k→∞ ξ alors − 21 ff ′ (ζ
et f ′ qui donnent A(k) ≡
(k) ) →k→∞ − 2 f ′ (ξ) . Or ceci résulte des continuités de f
− 21 f ′′ (η (k) ) →k→∞ − 12 f ′′ (ξ) et B (k) ≡ f ′ (ζ (k) ) →k→∞ f ′ (ξ) et des propriétés des limites de suites (limk→∞
si limk→∞ A(k) et limk→∞ B (k) existent et limk→∞ B (k) 6= 0).
14. Dans la formulation “pour tout ǫ > 0 il existe δ > 0” choisir ǫ = | −
que traduire le fait que
de ξ.
′′ (k)
(η
)
− 21 ff ′ (ζ
(k) )
est voisin de
′′
(ξ)
− 21 ff ′ (ξ)
′′
1 f (ξ)
|;
2 f ′ (ξ)
=
limk→∞ A(k)
limk→∞ B (k)
il est essentiel de comprendre que ceci ne fait
(par exemple avec une précision | −
34
A(k)
B (k)
′′
1 f (ξ)
|)
2 f ′ (ξ)
pour η (k) et ζ (k) voisins
Choisissons donc x(0) et x(1) distincts tels que |x(0) − ξ| ≤ δ et |x(1) − ξ| ≤ δ et montrons alors que la
suite {x(k) }k≥0 vérifie |x(k) − ξ| ≤ αk−1 δ pour k ≥ 1. Cette propriété est vraie pour k = 1. Supposons la vraie
jusqu’au rang k et montrons là au rang k + 1. Si f (x(k) ) = 0, x(k+p) = x(k) = ξ pour p ≥ 0 et la propriété
est toujours vraie puisqu’elle l’est pour p = 0. Si non, on remarque que forcément f (x(k) ) − f (x(k−1) ) 6= 0
car sinon la dérivée f ′ s’annulerait entre x(k−1) et x(k) ce qui est impossible. Par conséquent, si f (x(k) ) 6= 0,
(x(k) )
est parfaitement défini et on peut appliquer le 1)b) qui dit que ξ − x(k+1) =
x(k+1) = x(k) − f (x(k)f)−f
(x(k−1) )
x(k) −x(k−1)
′′ (η (k) )
− 12 ff ′ (ζ
(k) ) (ξ
−
x(k) )(ξ
− x(k−1) ) où η (k) , ζ (k) ∈] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[. Il en résulte que (on
note que pour k = 1, |ξ − x(0) | ≤ δ et pour k > 1, |ξ − x(k−1) | ≤ αk−2 δ ≤ δ) :
1 f ′′ (η (k) ) (k−1)
f ′′ (ξ)
(k)
|x(k+1) − ξ| = | −
|) αk−1 δ = αk δ,
|x
−
ξ|
≤
δ
max(1,
|
−
|x
−
ξ|
|
{z
} | {z }
2 f ′ (ζ (k) ) |
f ′ (ξ)
|
{z
}
{z
}
|
≤δ
≤αk−1 δ
α
f ′′ (ξ)
≤max(1,|− f ′ (ξ) |)
et donc |x(k) − ξ| ≤ αk−1 δ pour tout k ≥ 1 et la suite {x(k) }k≥0 converge vers ξ. Pour démontrer que
|e(k+1) |
= 0 si e(k) 6= 0 pour tout k ≥ 0 il suffit de se reporter à
|e(k) |
η (k) , ζ (k) ∈ ] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[, pour obtenir, dans ce
limk→∞
f ′′ (η(k) )
1
(k−1) |
2 f ′ (ζ (k) ) e
= 0.
′′
(k)
(η ) (k) (k−1)
e(k+1) = − 21 ff ′ (ζ
e
où
(k) ) e
cas limk→∞
|e(k+1) |
|e(k) |
= limk→∞ | −
√
3) Le nombre d’or p = 1+2 5 = 1.61803398874989... est l’ordre de convergence de la méthode de
la sécante
Sous les hypothèses précédentes sur f (de classe C 2 avec un zéro ξ en lequel f ′ (ξ) 6= 0), on suppose ici
que la suite {x(k) }k≥0 converge vers le zéro ξ de f (unique dans [ξ − δ, ξ + δ] avec δ > 0) et on va montrer
que (lorsque f ′′ (ξ) 6= 0) :
√
1 |f ′′ (ξ)| p1
1+ 5
|e(k+1) |
=(
) où p =
(plus grande racine de p2 − p − 1 = 0) et e(k) = ξ − x(k) .
lim
k→∞ |e(k) |p
2 |f ′ (ξ)|
2
a) Montrer que la suite {y (k) }k≥1 définie par y (k) =
− p1
y (k+1) = c(k) (y (k) )
|e(k) |
|e(k−1) |p
où c(k) = |
vérifie :
1 f ′′ (η (k) )
| pour k ≥ 1.
2 f ′ (ζ (k) )
Indication. On pourra utiliser p2 − p − 1 = 0 sous la forme p − 1 − 1p = 0.
Réponse. C’est un calcul facile qui utilise le résultat du 1)b) et p − 1 = p1 :
y (k+1) =
(k−1) |p 1
1
|e(k+1) |
1 f ′′ (η (k) ) |e(k) ||e(k−1) |
(k) |e
=
|
|
=
c
(
) p = c(k) (y (k) )− p .
(k)
p
′
(k)
(k)
p
(k)
2 f (ζ )
|e |
|e |
|e |
b) Vérifier que la suite {z (k) }k≥1 définie par z (k) = ln(y (k) ) (ln : logarithme népérien) satisfait :
k−2
z
(k)
X
1
1
α(k−j−1) (− )j si α(k) = ln(c(k) ).
= (− )k−1 z (1) + S (k) pour k ≥ 2 avec S(k) =
p
ϕ
j=0
Réponse. En effet avec z (k) = ln(y (k) ), α(k) = ln(c(k) ), la relation précédente s’écrit :
z (k+1) = α(k) −
1 (k)
z ,
ϕ
si bien que, pour k ≥ 2, les relations suivantes, multipliées par les facteurs indiqués :
35
facteur : 1 = (− p1 )0
z (k) = − p1 z (k−1) + α(k−1)
z (k−1) = − p1 z (k−2) + α(k−2)
facteur : (− 1p )1
..
..
.
.
1 (k−j−1)
(k−j)
(k−j−1)
z
= −pz
+α
facteur : (− 1p )j
..
..
.
.
z (2) = − p1 z (1) + α(1)
donnent par sommation :
facteur : (− p1 )k−2
k−2
z
(k)
X
1
1
α(k−j−1) (− )j cqfd.
= (− )k−1 z (1) +
p
p
j=0
c) Étant données deux suites de réels {a(k) }k≥0 et {b(k) }k≥0 telles que limk→∞ a(k) = a et
Pk−2 (k−j−1) (j)
montrer que la suite 15 {σ (k) }k≥2 définie par σ (k) = j=0
a
b vérifie :
lim σ (k) = ab avec b =
k→∞
∞
X
P∞
j=0 |b
(j) |
< ∞,
b(j) .
j=0
Pk−2
P∞
(k−j−1) − a)b(j) − a
(j) on pourra d’abord
Indications. En écrivant que σ (k) − ab =
j=0 (a
j=n−1 b
montrerPqu’on peut toujours
a = 0. Ensuite pour k grand, on pourra majorer les deux termes de
Psupposer
k−2
(k−j−1) b(j) +
(k−j−1) b(j) (où k − 2 ≥ m + 1) moyennant un choix convenable de m.
σ (k) = m
a
a
j=0
j=m+1
Réponse. En effet on peut toujours supposer a = 0Pcar si on a prouvé le résultat pour a = 0, considérant
k−2 (k−j−1)
le couple de suites {a(k) − a}k≥0 et {b(k) }k≥0 on a j=0
(a
− a)b(j) →k→∞ 0 et donc σ (k) − ab =
Pk−2 (k−j−1)
P
(j) →
(k) →
− a)b(j) − a ∞
k→∞ 0. Dans le cas où a = 0, les hypothèses sont a
k→∞ 0
j=0 (a
j=k−1 b
P
∞
(k)
(j)
(ce qui implique, bien sûr que les nombres |a | sont bornés par une constante A) et j=0 |b | < ∞ ce
P
(j)
(k)
qui signifie que ∞
j=m+1 |b | →m→∞ 0 (et bien sûr implique que les nombres |b | sont bornés par une
constante B) et on peut toujours écrire :
|σ
(k)
|=|
m
X
(k−j−1) (j)
a
b
+
k−2
X
(k−j−1) (j)
a
b
j=m+1
j=0
|≤B
m
X
j=0
(k−j−1)
|a
|+A
∞
X
j=m+1
|b(j) |.
Alors il est clair que σ (k) →k→∞ 0 car en choisissant m assez grand, il est facile de rendre le deuxième
terme du dernier membre de droite de l’inégalité précédente inférieur disons à 2ε (dans la traduction de
P∞
P∞
(j)
(j)
j=m+1 |b | →m→∞ 0 qui est “pour tout η > 0, il existe M (η) tel que m ≥ M (η) ⇒
j=m+1 |b | ≤ η”,
ε
choisir η = 2A ) et ce m étant fixé, on peut choisir k assez grand pour que le premier terme de ce dernier
membre de droite soit aussi inférieur à 2ε (dans la traduction de a(k) →k→∞ 0 qui est “pour tout η > 0 , il
ε
existe K(η) tel que k ≥ K(η) ⇒ |a(k) | ≤ η”, choisir η = 2(m+1)B
et k ≥ m + 1 + K(η)) cqfd.
d) Conclure.
On en déduit la relation annoncée :
1 |f ′′ (ξ)| p1
|e(k+1) |
=
(
) .
k→∞ |e(k) |p
2 |f ′ (ξ)|
lim
En effet des questions 3)c) et 3)b) on déduit, puisque p =
√
1+ 5
2
′′
(k)
(η )
> 1, α(k) = ln(c(k) ), c(k) = | 12 ff ′ (ζ
(k) ) | où
η (k) , ζ (k) ∈] min(x(k−1) , x(k) , ξ), max(x(k−1) , x(k) , ξ)[ et x(k) →k→∞ ξ, que :
(k)
k−2
∞
j=0
j=0
X
1
1
1 f ′′ (ξ) X 1 j
z (k) = (− )k−1 z (1) +
α(k−j−1) (− )j →k→∞ ln(|
(− ) .
|)
p
p
2 f ′ (ξ)
p
|e |
) et
Or z (k) = ln( |e(k−1)
|p
P∞
1 j
j=0 (− p )
=
1
1+ p1
=
1
p
(car p2 − p − 1 = 0 ou mieux p − 1 −
15. La contrainte k ≥ 2 est imposée par commodité compte tenu de la question précédente.
36
1
p
= 0). Ainsi :
ln(
|e(k) |
1
1 f ′′ (ξ)
1 f ′′ (ξ) p1
)
→
ln(|
|)
=
ln(|
| ),
k→∞
p
2 f ′ (ξ)
2 f ′ (ξ)
|e(k−1) |p
d’où le résultat.
Cette démonstration est tirée de l’article (en changeant f (x) en f (x) + ǫ(x − ξ)2 avec ǫ très petit, on doit
pouvoir étendre par continuité le résultat au cas f ′′ (ξ) = 0) :
M. Vianello, Zanovello, 1992, On the superlinear convergence of the secant method : Amer. Math.
Monthly, 758 – 761, et la démonstration “classique”, qui s’applique aussi à l’interpolation quadratique inverse
utilisée dans le paragraphe suivant, se trouve dans 16 :
A.M. Ostrowski, 1970, Solution of equations in Euclidean and Banach spaces : Acad. Press., N.Y.
2.4.2
L’algorithme de Dekker-Brent
Étant donnés un intervalle [a, b] ⊂ R et une fonction réelle f telle que f (a)f (b) < 0, il est possible de
modifier la méthode de la sécante, en la combinant à la méthode de dichotomie, afin d’obtenir à chaque
itération un encadrement de la racine et ceci sans altérer la vitesse de convergence, ni augmenter le nombre
d’évaluations de f . C’est la modification de Dekker 17 qui peut être décrite succinctement comme suit, les
détails devant être cherchés dans le code MATLAB fzerotx.m placé en appendice et extrait du livre de C.B.
Moler disponible sur internet comme indiqué dans le chapitre d’introduction :
à chaque pas de l’algorithme :
1. on dispose d’un encadrement [a, b] de la racine, on fait en sorte que |f (b)| ≤ |f (a)|, la précédente valeur
de b étant conservée et notée c (au départ on pose c = a mais ensuite c est en général différent de b et
a) et on fait en sorte que f (a)f (b) < 0 ;
2. ensuite on calcule l’approximation x(k+1) de la racine donnée par la formule (2.10) avec x(k−1) = c,
x(k) = b, puis on pose c = b et selon que x(k+1) est (“approximativement” : voir code pour plus de
détails) dans l’intervalle [a, b] ou non on retient comme nouveau b l’approximation x(k+1) ou le point
milieu a+b
2 donné par la méthode de dichotomie.
On retiendra la simplicité du procédé.
Mais dans les cas où on dispose de trois points a, b, c distincts, on peut obtenir, en général, une approximation encore meilleure que celle donnée par la méthode de la sécante en effectuant une interpolation
à trois points. Il existe une méthode, c’est la méthode de Muller, dans laquelle on calcule comme nouvelle
approximation de la racine le zéro du polynôme de degré deux au plus qui interpole f en ces trois points et
est choisi pour que l’approximation soit assez voisine de la précédente. Mais cette méthode nécessite le calcul
d’une racine carrée et on va voir plus loin comment éviter cela sans altérer l’ordre de convergence. Donnons
quand même ici les formules correspondantes puisque la méthode est dans certaines bibliothèques (comme
IMSL).
Si les trois approximations disponibles de la racine sont notées x(k−2) , x(k−1) , x(k) (pour nous a, b, c) alors écrivant le
polynôme d’interpolation en ces points sous la forme :
p2 (x) =
(x − x(k−2) )(x − x(k) )
(x − x(k−1) )(x − x(k−2) )
(x − x(k−1) )(x − x(k) )
f (x(k−2) )+ (k−1)
f (x(k−1) )+ (k)
f (x(k) ),
(k−1)
(k−2)
(k)
(k−2)
(k−1)
(k)
−x
)(x
−x )
(x
−x
)(x
−x )
(x − x(k−1) )(x(k) − x(k−2) )
(x(k−2)
l’équation du second degré en x, p2 (x) = 0, se simplifie un peu en faisant le changement d’inconnue x → λ avec x = x(k) +
(x(k) − x(k−1) )λ et après des choix convenables de notations (poser par exemple h(k) = x(k) − x(k−1) , h(k−1) = x(k−1) − x(k−2) ),
on trouve 18 :
16. Ce serait peut être un projet tutoré que d’essayer d’adapter le procédé précédent à l’interpolation quadratique inverse.
17. La référence est : T.J. Dekker, 1969, Finding zeros by means of successive linear interpolation, dans “Constructive Aspects
of the Fundamental Theorem of Algebra, B. Dejon and P. Henrici (editors), Wiley-Interscience, New York, pages 37 – 48.
18. J’ai trouvé ces formules et cette façon de les obtenir dans le livre M.K. Jain, S.R.K. Iyengar, R.K. Jain, 1991(sixth printing),
Numerical methods for scientific and engineering computation : Wiley Eastern Limited, New Dehli, Bangalore, Bombay, Calcutta,
Madras, Hyderabad, Pune, Lucknow, Guwahati. C’est un bon exercice que de faire le calcul à la main ... et un exercice serait
d’essayer de se servir de maple ... et de comparer les deux “efforts” ...
37
(k)
(k)
2δ
√ f (x2 )
x(k+1) = x(k) − (x(k) − x(k−1) ) (k)
g
+signe(g (k) ) g (k) −4δ (k) f (x(k) )c(k)
 (k)
δ = 1 + λ(k)



 λ(k) = x(k) −x(k−1)
x(k−1) −x(k−2)
où
2
(k)
(k)2

g
=
λ
f (x(k−2) ) − δ (k) f (x(k−1) ) + (λ(k) + δ (k) )f (x(k) )


 (k)
(k)
(k)
(k−2)
c = λ (λ f (x
) − δ (k) f (x(k−1) ) + f (x(k) ))
(2.12)
Revenant à notre propos de construction d’une approximation de la racine à partir de trois autres x(k) ,
(x(k) )
x(k−1) , x(k−2) , on peut d’abord remarquer que la formule de la sécante x(k+1) = x(k) − f (x(k)f)−f
(x(k−1) )
x(k) −x(k−1)
peut aussi être vue comme donnant la valeur en y = 0 de la fonction polynôme y → q(y) de degré un
qui vaut x(k) si y = f (x(k) ) et x(k−1) si y = f (x(k−1) ) puisque (c’est évident sur une figure, question de
f (x(k) )−y
(x(k−1) )
(k) donne effectivex(k−1) + f (xy−f
(k) )−f (x(k−1) ) x
f (x(k) )−f (x(k−1) )
(k)
(k)
(k−1) )
f (x(k) )x(k−1) −f (x(k) )x(k) +(f (x(k) )−f (x(k−1) ))x(k)
(k) − f (x )(x −x
=
x
(k)
(k−1)
(k)
(k−1)
f (x )−f (x
)
f (x )−f (x
)
fonctions réciproques de fonctions affines) q(y) =
(k)
(k−1)
(k−1)
(k)
−f (x
)x
ment q(0) = f (x f)x
=
(x(k) )−f (x(k−1) )
. Appliqué à trois valeurs, ce procédé porte le nom d’interpolation quadratique inverse et on parle aussi d’interpolation inverse en général avec plus de trois points. La formule obtenue est bien sûr différente de celle de
Muller mais on peut montrer, et on l’admet 19 , que l’ordre de convergence c’est à dire le plus grand nombre
(k+1)
p tel que |e|e(k) |p | reste borné lorsque k tend vers l’infini et dans les cas où f est assez régulière (de classe C 3
convient) et e(k) 6= 0 pour tout k ≥ 0, avec e(k) = ξ − x(k) où ξ est la racine, est le même (p ≃ 1.84 est la plus
grande racine de p3 − p2 − p − 1 = 0). La formule de l’interpolation quadratique inverse est donc contenue
dans :
x(k+1) = q2 (0), où
q2 (y) =
(y−f (x(k−1) ))(y−f (x(k) ))
(f (x(k−2) )−f (x(k−1) ))(f (x(k−2) )−f (x(k) ))
(y−f (x(k−2) ))(y−f (x(k) ))
+ (f (x(k−1) )−f (x(k−2) ))(f (x(k−1) )−f (x(k) )) x(k−1)
(k−1)
x(k−2)
.
(2.13)
(k−2)
(x
))(y−f (x
))
+ (f (x(k)(y−f
x(k)
)−f (x(k−1) ))(f (x(k) )−f (x(k−2) ))
et on appelle algorithme de Dekker-Brent 20 la modification suivante de l’algorithme décrit plus haut :
à chaque pas de l’algorithme :
1. on dispose d’un encadrement [a, b] de la racine, on fait en sorte que |f (b)| ≤ |f (a)|, la précédente valeur
de b étant conservée et notée c (au départ on pose c = a mais ensuite c est en général différent de b et
a) et on fait en sorte que f (a)f (b) < 0 ;
2. ensuite on calcule l’approximation x(k+1) de la racine donnée par la formule (2.13) si c’est possible c’est
à dire si les trois points a, b, c sont différents et par (2.10) si non (donc avec x(k−2) = a, x(k−1) = c,
x(k) = b), puis on pose c = b et selon que x(k+1) est (“approximativement” : voir code pour plus de
détails) dans l’intervalle [a, b] ou non on retient comme nouveau b l’approximation x(k+1) ou le point
milieu a+b
2 donné par la méthode de dichotomie.
On peut proposer comme exercice d’étudier le code MATLAB fzerotx.m placé en appendice pour construire
une version de la formule (2.13) de forme analogue à (2.12) ou (2.10) (avec des indices) et comme étude
complémentaire l’étude du livre déjà cité A.M. Ostrowski, 1970, Solution of equations in Euclidean and
Banach spaces : Acad. Press., N.Y. pour prouver que les ordres de convergence des méthodes obtenues par
interpolation inverse à 4, 5, ..., n, ... points ne dépassent jamais 2.
2.5
Compléments : notions sur le calcul de zéros multiples
Pour le calcul des racines simples des polynômes orthogonaux par exemple qui seront utilisées dans
la construction des formules de quadrature de Gauss (deux chapitres plus loin), la méthode de Newton
19. Sujet pouvant faire partie d’un projet tutoré.
20. On doit ajouter la référence suivante : R.P. Brent, 1973, Algorithms for minimization without derivatives : Prentice-Hall,
Englwood Cliffs, NJ.
38
fonctionne très bien et on peut même construire une méthode à convergence cubique 21 :
x(k+1) = x(k) −
f (x(k) )
f (x(k) ) f ′′ (x(k) )
(1
+
).
f ′ (x(k) )
f ′ (x(k) ) 2f ′ (x(k) )
(2.14)
À noter que pour vérifier rapidement que la méthode de Newton est d’ordre 2 (resp. que (2.14) est d’ordre
3), il “suffit” de calculer les dérivées d’ordre 1 et 2 (resp. 1, 2 et 3) de la fonction g(x) = x − ff′(x)
(x) (resp.
′′
f (x)
f (x) f (x)
g(x) = x − ff′(x)
(x) (1 + f ′ (x) (1 + f ′ (x) 2f ′ (x) )) en le zéro de f (x) : une dérivée première nulle avec une dérivée
seconde non nulle donne une méthode d’ordre 2 et des dérivées première et seconde nulles avec une dérivée
troisième non nulle donne une méthode d’ordre 3 (faire la démonstration en exercice, en justifiant pour f
suffisamment dérivable, que si la suite {x(k) }k≥0 converge vers le zéro ξ de f , alors x(k+1) −ξ = g(x(k) )−g(ξ) =
g (p) (η(k) ) (k)
(x
p!
p
d g
(k) à préciser). Mais à la “main”
− ξ)p pour un certain entier p ≥ 2 avec g(p) (x) ≡ dx
p (x) et η
ces calculs sont fastidieux et il vaut mieux utiliser une système de calcul formel. Avec les instructions MAPLE
suivantes (on donne aussi ce qui est affiché) :
g(x):=x-f(x)/diff(f(x),x);
g(x) := x − ∂f (x)
f (x)
∂x
subs(f(x),convert(diff(g(x),x),D);
0
subs(f(x),convert(diff(g(x),x,x),D);
(D (2) )(f )(x)
D(f )(x)
on vérifie que la méthode de Newton est d’ordre 2 (d’ordre 3 si f ′′ s’annule en le zéro), et bien sûr pour
traiter l’autre méthode, les instructions MAPLE sont :
g(x):=x-f(x)/diff(f(x),x)*(1+f(x)/diff(f(x),x)*diff(f(x),x,x)/2/diff(f(x),x));
subs(f(x),convert(diff(g(x),x),D);
subs(f(x),convert(diff(g(x),x,x),D);
subs(f(x),convert(diff(g(x),x,x,x),D);
′′ (ξ))2
′′′ (ξ)
et on trouve que si ξ est un zéro de f alors g ′ (ξ) = g′′ (ξ) = 0 et g′′′ (ξ) = 3 (f
− ff ′ (ξ)
.
(f ′ (ξ))2
Mais lorsque le zéro est multiple (d’ordre r > 1) la méthode de Newton n’est plus que d’ordre 1. Si f (x) =
(k+1) −ξ|
(x − ξ)r h(x) avec r > 1, h de classe C 2 et h(ξ) 6= 0, on a, lorsque x(k) →k→∞ ξ, limk→∞ |x|x(k) −ξ|
= r−1
r . Une
démonstration de ce résultat 22 , fondée sur l’application de la formule de Taylor à l’ordre 2 au voisinage de
f (x)
x(k) à (x−ξ)
r−1 , est proposée à l’exercice 4 de la feuille de td 2. On peut aussi utiliser les instructions MAPLE
suivantes.
g(x):=x-((x-x0)^r)*h(x)/diff(((x-x0)^r)*h(x),x);
limit(convert(diff(g(x),x),D),x=x0);
(il faut utiliser limit)
On montre aussi en td que dans ce cas d’un zéro d’ordre r > 1, si on change l’itération de Newton x(k+1) =
(k) )
(k)
(k+1) = x(k) − r f (x ) alors, de nouveau, l’ordre de convergence est 2 et il est facile de le
x(k) − ff′(x
en
x
(k)
′
(x )
f (x(k) )
vérifier avec des instructions MAPLE appropriées.
Il faut quand même remarquer que les problèmes conduisant à des calculs de racines multiples sont assez
singuliers en ce sens que si l’équation f (x) = 0 est perturbée en f (x) + δf (x) = 0 la racine multiple de
f (x) = 0 va être perturbée en plusieurs racines simples de f (x) + δf (x) = 0.
Dans ce genre de problèmes plus ou moins singuliers, on ne connaît pas forcément l’ordre de la racine et il
est remarquable qu’il existe une méthode de calcul de racines de fonctions d’une variable (réelle ou complexe
d’ailleurs) dont l’ordre de convergence est 2 quel que soit l’ordre de la racine. Il s’agit de l’itération 23 :
x(k+1) = x(k) −
f (xk) )f ′ (x(k) )
(f ′ (x(k) ))2 − f (x(k) )f ′′ (x(k) )
(2.15)
21. Je l’ai trouvée dans le livre P.J. Davis, P. Rabinowitz, 1984, Methods of numerical integration (second edition) : Acad.
Press, New York, dans le sous-programme FORTRAN GRULE page 487 assez difficile à décoder.
22. qui montre aussi que la méthode de Newton converge encore pourvu que x(0) soit assez voisin de ξ
23. Je l’ai trouvé dans le livre P. Borwein, T. Erdélyi, 1995, Polynomials and polynomial inequalities : Springer, page 365
qui renvoie au livre P. Henrici, 1974, Applied and computational complex analysis, Volume I : John Wiley & Sons, New York,
exercice 5 page 533 ; la réponse avec MAPLE qui suit est facile.
39
Les instructions MAPLE qui suivent permettent de vérifier que l’ordre de convergence est 2 quelque soit
l’ordre du zéro.
f(x):=((x-x0)^r)*h(x);
g(x):=x-f(x)*diff(f(x),x)/(diff(f(x),x)^2-f1(x)*diff(f(x),x,x));
limit(convert(diff(g(x),x),D),x=x0); on trouve 0
h′ (x0 )
.
limit(convert(diff(g(x),x,x),D),x=x0); on trouve −2 rh(x
0)
Pour terminer cette sous section voici un exemple simple de manipulations en MATLAB qui illustre la
difficulté de calculer des racines multiples. Pour compter le nombre d’itérations que fait la fonction fzero
il faut l’utiliser sous la forme [x,fval,exitflag,output] = fzero(...); et le nombre d’itérations est
output.iterations. Pour afficher les itérations il faut lancer l’instruction options=optimset(’Display’,’iter’);
avant l’appel de fzero qui doit alors être de la forme fzero(fonction,[a,b],options). Alors si les instructions :
options=optimset(’Display’,’iter’);
[x,fval,exitflag,output] = fzero(@(x) sinh(x),[-2 1],options);
donne le résultat en 8 itérations, les instructions :
options=optimset(’Display’,’iter’);
[x,fval,exitflag,output] = fzero(@(x) (x.^2).*sinh(x),[-2 1],options);
donnent le résultat en 151 itérations !
2.6
Appendice Le code fzerotx.m
function b = fzerotx(F,ab,varargin)
%FZEROTX Textbook version of FZERO.
% x = fzerotx(F,[a,b]) tries to find a zero of F(x) between a and b.
% F(a) and F(b) must have opposite signs. fzerotx returns one
% end point of a small subinterval of [a,b] where F changes sign.
% Arguments beyond the first two, fzerotx(F,[a,b],p1,p2,...),
% are passed on, F(x,p1,p2,..).
%
% Examples:
% fzerotx(@sin,[1,4])
% MATLAB6: F = inline(’sin(x)’); fzerotx(F,[1,4])
% MATLAB7: F = @(x) sin(x); fzerotx(F,[1,4])
% Initialize.
a = ab(1);
b = ab(2);
fa = feval(F,a,varargin{:});
fb = feval(F,b,varargin{:});
if sign(fa) == sign(fb)
error(’Function must change sign on the interval’)
end
c = a;
fc = fa;
d = b - c;
e = d;
% Main loop, exit from middle of the loop
while fb ~= 0
% The three current points, a, b, and c, satisfy:
% f(x) changes sign between a and b.
% abs(f(b)) <= abs(f(a)).
% c = previous b, so c might = a.
% The next point is chosen from
40
%
%
%
%
Bisection point, (a+b)/2.
Secant point determined by b and c.
Inverse quadratic interpolation point determined
by a, b, and c if they are distinct.
if sign(fa) == sign(fb)
a = c; fa = fc;
d = b - c; e = d;
end
if abs(fa) < abs(fb)
c = b; b = a; a = c;
fc = fb; fb = fa; fa = fc;
end
% Convergence test and possible exit
m = 0.5*(a - b);
tol = 2.0*eps*max(abs(b),1.0);
if (abs(m) <= tol) | (fb == 0.0)
break
end
% Choose bisection or interpolation
if (abs(e) < tol) | (abs(fc) <= abs(fb))
% Bisection
d = m;
e = m;
else
% Interpolation
s = fb/fc;
if (a == c)
% Linear interpolation (secant)
p = 2.0*m*s;
q = 1.0 - s;
else
% Inverse quadratic interpolation
q = fc/fa;
r = fb/fa;
p = s*(2.0*m*q*(q - r) - (b - c)*(r - 1.0));
q = (q - 1.0)*(r - 1.0)*(s - 1.0);
end;
if p > 0, q = -q; else p = -p; end;
% Is interpolated point acceptable
if (2.0*p < 3.0*m*q - abs(tol*q)) & (p < abs(0.5*e*q))
e = d;
d = p/q;
else
d = m;
e = m;
end;
end
% Next point
c = b;
fc = fb;
if abs(d) > tol
b = b + d;
else
41
b = b - sign(b-a)*tol;
end
fb = feval(F,b,varargin{:});
end
42
2.7
TD et TP des deux premiers chapitres
TD n0 1 : Représentation des nombres en machines et arithmétiques sur ordinateurs
1) Si un ordinateur travaille en base 2 et représente les entiers (signés) sur 16 bits, quel est le plus petit
(min) et le plus grand (max) entier représentable sur cet ordinateur.
Indication : Si b0 , b1 , ..., b15 sont les 16 bits, selon que b15 = 0 ou b15 = 1, l’entier est positif ou négatif.
Plus précisément si b15 = 0 cet entier vaut b0 + b1 2 + ... + b14 214 Si b15 = 1 cet entier vaut −(216 − b0 − b1 2 −
... − b14 214 − b15 215 )
De la même manière 24 , toujours en base 2, avec un codage des entiers signés sur 32 bits, le plus grand
entier est 231 − 1 = 2147483647 et le plus petit −231 = −2147483648 et avec 64 bits cela va de −263 =
−9223372036854775808 à 263 − 1 = 9223372036854775807.
Dans la suite on note F(2, p, q) l’ensemble des flottants en base 2 avec un exposant (en base 2) à p bits
(décimales binaires) et une mantisse à q bits. Cela signifie que le nombre est codé sur q + p + 1 bits (un
bit supplémentaire pour le signe) et la “règle” est, généralisation naturelle de celle indiquée en cours pour le
format IEEE à 32 ou 64 bits (simple ou double précision) 25 , N aN signifiant “not a number” :
r = (bq+p bq+p−1 ...bq bq−1 ...b1 b0 ) =
|{z} | {z } | {z }
signe































exposant
mantisse

N aN si bq−1 bq ...b0 6= 0 
si b
b
...b = (11...1) = 2p − 1
+∞ si bq+p = 0
 q+p−1 q+p−2 q
−∞ si bq+p = 1
)
p−1
bq−1
bq−2
(1 + 2 + 22 + ... + 2b0q )2bq+p−1 bq+p−2 ...bq −(2 −1) si bq+p = 0
si 1 ≤ bq+p−1 bq+p−2 ...bq ≤ 2p − 2
bq−2
b
b0 bq+p−1 bq+p−2 ...bq −(2p−1 −1)
+
)2
si
b
=
1
−(1 + q−1
+
...
+
q+p
2
2q
22
+0 si bq+p = 0
si bq+p−1 bq+p−2 ...bq = 0 et bq−1 bq−2 ...b0 = 0
−0 si bq+p = 1
)
b
bq−2
b0 −(2p−1 −2)
+
...
+
( q−1
)2
si
b
=
0
+
q+p
´
2
2q
22
si bq+p−1 bq+p−2 ...bq = 0 et bq−1 bq−2 ...bq 6= 0 (cas dénormalise)
b
b
b0
−(2p−1 −2) si b
+
...
+
)2
=
1
−( 2q + q−1
q+p
22
2q+1
2) Donner d’abord ce qu’il est naturel d’appeler mantisse et exposant en base 10 des réels 163.24, π,
0.004748 avec la précision que vous choisirez et préciserez. Donner ensuite les mantisses et exposants en base
2, disons dans F(2, 8, 23) ... simple précision ... des réels qui en base 10 sont 0.25, 5.125, 0.1. Enfin dans
F(2, 8, 23) préciser :
a) le plus grand flottant ϕM et le plus petit (en valeur absolue) ϕm ;
b) le plus petit flottant ǫ > 0 tel que 1 + ǫ > 1 puis comment trouver la distance entre deux flottants
successifs ;
c) et si vous avez le temps, récupérer à partir de http://www.mathworks.fr/moler le code MATLAB
floatgui.m qui affichera la répartition des flottant (avec pet q petits) sur l’axe réel.
3) On considère l’ensemble des flottants F(2, p, q) et on note f l(x) la projection par arrondi sur F(2, p, q)
≤ 12 21−q . On pose ǫM = 21 21−q . En déduire que pour
de x ∈ [−ϕM , −ϕm ] ∪ [ϕm , ϕM ]. “Montrer” que |f l(x)−x|
|x|
tout x ∈ [−ϕM , −ϕm ] ∪ [ϕm , ϕM ] il existe ρ vérifiant |ρ| ≤ ǫM tel que f l(x) = x(1 + ρ). Comment interpréter
le réel ρ ? Enfin, montrer que f l(x) = f l(y), x 6= 0 ⇒ |x−y|
|x| ≤ 2ǫM .
P100 1
4) On souhaite calculer la somme
i=1 i sur un ordinateur utilisant une mantisse de longueur 2 et
travaillant en base décimale. De quelle manière vaut-il mieux effectuer la somme précédente sur cette machine :
1 1
1
1
1
+ + ... +
ou
+
+ ... + 1?
2 3
100
100 99
(les opérations arithmétiques étant effectuées de la gauche vers la droite).
1+
24. Pour faire les calculs correspondants en MATLAB qui affiche la plupart du temps des flottants, utiliser la commande format
rat.
25. En simple précision p = 8, q = 23, en double précision p = 11, q = 52.
43
TD n0 2 : Résolution des équations scalaires non linéaires
1) Étudier la suite, où a > 1 :
u(n) =
1
(n traits de fraction)
1
a+
a+
..
.
1
a+ 1
q
et en donner une interprétation graphique. On précisera en particulier si u(n) est monotone ou constituée de
deux suites adjacentes (ce qui donne un encadrement de l’erreur) et la “constante de Lipschitz”.
1
Indication : Considérer un problème de point fixe du genre x = a+1 1 ou x = a+x
.
x
2) Soit f (x) = x1 − a où a > 0 (le cas a < 0 peut aussi être considéré).
a) Exprimer x(n) uniquement avec des additions, soustractions et multiplications, {x(n) }n≥0 étant la suite
définie par la méthode de Newton pour résoudre f (x) = 0.
b) Pour certains x(0) la suite converge, lesquels et quelle est la limite ? Que cela montre-t-il ?
3) Soit f (x) la fonction de R dans R x → xex − 1.
a) Combien f possède-t-elle de racines réelles ? Montrer que f admet une unique racine strictement
positive x.
b) Peut on utiliser la méthode de Newton pour approximer x.
4) Modification de la méthode de Newton dans le cas d’un zéro multiple.
Soit x ∈ R → f (x) ∈ R une fonction suffisamment régulière qui s’annule en un point ξ. Lorsque f ′ (ξ) 6= 0,
et dans le cas où la méthode de Newton appliquée à la résolution de f (x) = 0 converge (par exemple si x(0)
est assez voisin de ξ ou dans des situations où la suite engendrée est monotone à partir d’un certain rang),
on a vu en cours que l’ordre de convergence de la méthode est au moins deux. On se place ici dans le cas où
f (ξ) = f ′ (ξ) = 0, i.e. ξ est un zéro d’ordre r > 1. On peut donc écrire :
f (x) = (x − ξ)r h(x), avec h(ξ) 6= 0,
et on suppose que la méthode de Newton appliquée à la résolution de f (x) = 0 converge avec x(k) 6= ξ pour
tout k. On suppose également h deux fois continûment différentiable.
a) Montrer que l’ordre de convergence n’est que 1 et plus précisément que :
r−1
|x(k+1) − ξ|
,
=
(k)
k→∞ |x
r
− ξ|
lim
Indications : Appliquer la formule de Taylor Lagrange à l’ordre 2 à g(x) = (x − ξ)h(x) =
f (x)
(x−ξ)r−1
f (x)
1
f (x(k) )
f (x)
f (x)
=
)′x=x(k) (ξ − x(k) ) + (
)′′ (k) (ξ − x(k) )2
+(
r−1
r−1
(k)
r−1
x→ξ (x − ξ)
(x − ξ)
2 (x − ξ)r−1 x=θ
(x − ξ)
0 = lim
Ensuite multiplier par (x(k) − ξ)r−1 et diviser par f ′ (x(k) pour obtenir :
0=r
(k)
f (x(k) )
1 (h(x) + (x − ξ)h′ (x))′x=θ(k)
(k)
−
(x
−
ξ)
+
(ξ − x(k) )2 .
2 (rh(x(k) ) + (x(k) − ξ)h′ (x(k) )
f ′ (x(k) )
(k)
)
)
par (r − 1 + 1) ff′(x
pour faire apparaître x(k+1) − ξ.
Remplacer r ff′(x
(x(k) )
(x(k) )
x(k+1) − ξ = (r − 1)
f (x(k) )
+ O(ξ − x(k) )2
f ′ (x(k) )
Enfin remarquer que f (x(k) ) ∼ 1r f ′ (x(k) )(x(k) − ξ) donc
x(k+1) − ξ ∼ (
r − 1 (k)
)(x − ξ)
r
44
b) Montrer, toujours en exploitant la formule de Taylor Lagrange de l’indication précédente, que si on
change la méthode de Newton en :
f (x(k) )
x(k+1) = x(k) − r ′ (k) ,
f (x )
alors, s’il y a convergence, l’ordre de convergence est de nouveau au moins deux.
c) Facultatif. On peut retrouver les ordres de convergence en étudiant la méthode des approximations
successives (xk+1 = g(xk )) avec :
f (x)
g(x) = x − ′ ,
f (x)
dans le cas de la méthode de Newton classique et :
g(x) = x − r
f (x)
,
f ′ (x)
dans le cas précédent. Comparer les hypothèses de différentiabilité à faire sur f avec celles des questions
précédentes.
Remarque. La portée de cet exercice est un peu limitée car il existe une méthode à convergence quadratique quel que soit l’ordre du zéro ; voir le cours rédigé sur l’espace pédagogique.
45
TP No 1: PRESENTATION DU CALCUL SUR ORDINATEUR
1 Initialisation des TP.
1.1 Connectez-vous sous Linux.
Vous avez tous un compte informatique dans les salles de l’UFR.
Vous possédez donc un nom d’utilisateur (login) et un mot de passe (password) : connectez-vous.
Un Terminal apparaît : c’est votre fenêtre de travail sous Linux. Sur une ligne se trouve votre nom
d’utilisateur suivi du numéro de la machine: c’est la ligne de commandes sur laquelle vous entrerez les
instructions. Exemple: [arimbaud@p12 ~]$.
Vous vous trouvez à présent dans votre répertoire principal.
Si le Terminal n’apparaît pas automatiquement, cliquez sur l’icône bleue forme d’écran vidéo.
Par exemple, tapez successivement les instructions suivantes (toujours suivies de la touche ’ Entrée’) :
ls ls -l pwd whoami whoareyou ( le message ’command not found’ indique que votre
commande est invalide !)
Familiarisez-vous, si ce n’est pas déjà fait, avec la manipulation du clavier, de la souris, (insertion/suppression,
copier-coller, ...), des fenêtres (déplacement, agrandissement/réduction, mise en premier plan/arrière plan,
mise en icône, fermeture,...), des bureaux virtuels, des différents menus, ...
1.2 Création des 8 répertoires de TP.
Entrez successivement les instructions suivantes (donc dans la fenêtre de travail correspondant à votre
répertoire principal) :
mkdir TP_CS
(vous créez le répertoire, ou dossier, ’ TP_CS’ qui sera utilisé pour vos TP)
cd TP_CS
(vous vous déplacez dans ce répertoire) (le fichier TP_CS.tar.gz est aussi sur l’ENT)
tar -zxvf /commun/math/cuer/L3/2011-2012/glma506/TP_CS.tar.gz
Cette dernière commande (un peu technique) a pour effet de créer vos 8 répertoires de TP à l’intérieur
du répertoire TP_CS. Ils contiennent les fichiers des programmes que vous ferez fonctionner.
Entrez la commande: ls TP* : vous listez ce que contiennent chacun des répertoires TP1,TP2, ...,
TP8.
Vous pourrez vous déplacer dans ces répertoires grace aux commandes mises en annexe de cette feuille
de TP. Vous pourrez également utiliser le gestionnaire de fichier (icône ’ Dossier personnel ’).
ATTENTION !!! Vous n’avez à effectuer cette création qu’une seule fois, uniquement lors
de ce premier TP.
1.3 Accés au répertoire du TP1 (et aux autres).
Lorsque vous vous connectez à une machine, un Terminal s’ouvre automatiquement (ou manuellement).
Voici alors comment accéder au répertoire du TP1 (et aux autres) :
- Ouvrez un nouveau Terminal et placez-vous sur la ligne de commande (éventuellement tapez ls pour
visualiser ce que contient votre compte utilisateur)
- Tapez :
cd TP_CS
(vous vous déplacez dans le répertoire TP_CS)
- Tapez :
cd TP1
(vous vous déplacez dans le répertoire TP1)
- Tapez :
ls ou encore ls -l
Apparaissent, en particulier, les fichiers de programmes écrits en langage Fortran nommés : ’ premiers.f
’ et ’ calpi.f ’. Ceux sont eux que vous allez utiliser dans le paragraphe 2. (Il s’agit du vieux et célèbre langage
’ Fortran77 ’ ...).
Remarque : le fichier ’ listings_programmes.txt ’ contient les listings - pour lecture seule - des programmes
utilisés pendant ce TP.
Remarque : Le sous-répertoire ’ Autres_programmes ’ contient des fichiers de programmes facultatifs
(en ’ Fortran90 ’, en ’ langage C ’, en ’ langage Matlab ’). Pour les voir tapez : ls Autres_programmes
. On ne les utilisera pas ...
Ainsi, en début de chaque TP vous procéderez comme auparavant. Par exemple, à la prochaine
séance, vous taperez
cd TP_CS
cd TP2
ls -l
Remarque: la commande pwd est utile. Elle localise le répertoire où vous vous trouvez (voir le guide de
langage Unix à la fin).
46
Remarque: il existe des alternatives plus sophistiquées. Par exemple :
cd ../TP2 cd; cd TP_CS/TP2 cd ~/TP_CS/TP2 (voir le guide de langage Unix).
2 Un langage de programmation pour le calcul numérique: Fortran.
2.1 Premier exercice: calcul des nombres premiers.
On se propose de calculer les 100 premiers nombres premiers au moyen d’un algorithme qui s’apparente
au crible d’Ératosthène. Pour cela on range les nombres premiers dans un tableau d’entiers à une dimension
(ou vecteur) nommé ’n’.L’entier n(i) , où i est l’indice, compris entre 1 et imax=100 , représente donc le
i-ème nombre premier calculé. Voici l’algorithme très classique et très simple que l’on utilise :
1) - On pose n(1)=2, i=1 et j=1
2) - On remplace j par j+2
3) - Dans une boucle on divise successivement j par n(k) pour k variant de 1 à i.
Si le reste d’une division est nul, on peut affirmer que j n’est pas premier, et on retourne en 2).
Si tous les restes sont non nuls, on peut affirmer que j est premier, et on passe à l’instruction 4).
4) - On remplace i par i+1 et l’on écrit : n(i)=j.
Si i=imax=100 on affiche le résultat et l’on s’arrête. Sinon on retourne à l’instruction 1).
L’organigramme de cet algorithme est donc le suivant:
n(1)=2, i=1, j=1
j=j+2
vrai
boucle
k=1,i
j divisible par n(k) ?
toujours
faux
i=i+1, n(i)=j
faux
i=100 ?
fin
Le programme Fortran correspondant, écrit dans le fichier ’ premiers.f ’ est le suivant.
Lisez-le, de préférence en l’éditant par la commande : emacs premiers.f & (vous pouvez utiliser un
autre éditeur de votre choix.)
PROgRAm premiers
Commentaire : ce programme calcule les imax premiers nombres premiers
C Un programme en Fortran commence toujours par ’PROGRAM’, suivi de son nom
C MAJUSCULES et minuscules sont equivalentes
C Toutes les INSTRUCTIONS commencent à la 7-EME COLONNE, à l’exception des commentaires, des étiquettes, ...
C Une ligne de COMMENTAIRES s’écrit en placant un ’C’ en 1-ERE COLONNE. Elle n’est PAS
LUE lors de l’execution !!!
C DECLARATION DES VARIABLES ET PARAMETRES:
C ’imax’ est déclare comme paramètre (’PARAMETER’): il ne peut plus changer dans la suite du
programme ...
47
C mais vous pourrez le modifier, et recompilier le programme.
PARAMETER (imax=100)
C les VARIABLES ’n,i,j,k’ sont déclarées de type entier (’INTEGER’), et ’n’ est un tableau (’DIMENSION’) de taille imax
INTEGER n,i,j,k
DIMENSION n(imax)
C Initialisation de certaines variables en jeu ...
n(1)=2
i=1
j=1
C Une étiquette numerotée ’n’ se place en 2ème colonne. Elle correspond au saut : ’GO TO n’
1
j=j+2
C Ce qui va suivre est une BOUCLE ITERATIVE, pour l’indice k variant de 1 à i ( boucle allant
de ’DO’ à ’ENDDO’).
C Elle contient des intructions conditionnelles ’IF’.
C .EQ. , .LT. , .LE. , .GT. , .GE. signifient respectivement : =, <, <=, >, >=,
C x**n correspond à x puissance n
C La fonction partie entière ’INT’ est facultative car Fortran considère comme entier le quotient
de deux entiers ... (!)
DO k=1,i
IF(INT(j/n(k))*n(k).EQ.j) GO TO 1
IF(j.LT.n(k)**2) GO TO 2
ENDDO
2
i=i+1
n(i)=j
IF(i.LT.imax) GO TO 1
C Ecriture à l’écran du tableau n contenant les imax nombres premiers
C (cette écriture est faite dans un format donné à l’etiquette 3 ... peu importe).
WRITE(6,3) (n(i),i=1,imax)
3
FORMAT(13(1x,I5))
C Tout programme se termine par ’STOP’ puis ’END’
STOP
END
NB: 1) Les programmes en Fortran sont contenus dans des fichiers ’sources’ dont le nom
se termine obligatoirement par l’extension: ‘ .f ’
2) Quelques indications sur la syntaxe Fortran sont données en commentaire dans ce
programme (et le suivant). Elles sont suffisantes pour les manipulations ultérieures, où l’on
ne demandera pas d’écrire des programmes, mais seulement de savoir en modifier certaines
instructions.
EXECUTION DU PROGRAMME (BIEN LIRE TOUS LES ’NB’ QUI SUIVENT) :
1) Pour compiler le fichier source ’ premiers.f ’, tapez :
ou g77 premiers.f ou ...)
gfortran premiers.f (ou f77 premiers.f
NB: ’Compiler’ un fichier source, c’est créer à partir de ce dernier - lisible et modifiable par l’utilisateur
- , un autre fichier, dit ’exécutable’. Ce dernier, non modifiable et non lisible par l’utilisateur, est écrit dans
un langage compréhensible par l’ordinateur, qui va donc pouvoir l’exécuter. Il s’agit donc d’une traduction
. Le nom par défaut de ce fichier est ’ a.out ’ .
2) Tapez ensuite: . / a.out pour exécuter le fichier (donc le programme) ’ a.out ’ : il doit donc afficher
les 100 premiers nombres premiers.
3) On se propose à présent de calculer les 1000 premiers nombres premiers. Pour cela, il faut :
48
a) Modifier convenablement le fichier Fortran : éditez-le en tapant : emacs premiers.f &. Il s’agit
de changer le paramètre ’imax’. (N’oubliez pas la perluète ’&’ après emacs . Elle permet de libérer la ligne
de commande.)
b) Sauvegarder le fichier ainsi modifié (Menu ’ File/Save ’, ou encore clic sur la disquette de la barre
de menus).
c) Compiler à nouveau ce fichier source, en tapant: gfortran premiers.f
d) Relancer l’exécution du programme, en tapant: . / a.out
NB : Cette étape 3) de modification des paramètres (ou instructions) d’un fichier Fortran
est importante. C’est essentiellement ce que vous ferez plus tard, lors des manipulations en
Fortran.
NB : LORS DE LA COMPILATION du fichier (avec f77), il ne doit y avoir AUCUN
MESSAGE D’ERREUR !! Sinon il faut RECTIFIER les erreurs, signalées lors de la compilation (mises en évidence et indiquées avec le numéro de la ligne correspondante) avec l’éditeur
de texte emacs, SAUVER puis COMPILER de nouveau le fichier jusqu’à correction de toute
erreur.
4) Le programme Fortran ne suit pas exactement les indications de l’algorithme sur papier. Voyez-vous
à quel endroit ? Quel en est l’intérêt ?
2.2 Deuxième exercice: calcul approché du nombre π, par la méthode d’Archimède, et
illustration des erreurs numériques.
Cet exercice, trouvé dans un ouvrage de Henrici, est un exemple assez clair de ce que peuvent provoquer
les erreurs d’arrondis (en virgule flottante) et des remèdes quelquefois possibles.
La méthode d’Archimède pour trouver une approximation de π consiste à calculer le périmètre d’un
polygone régulier à 2.2k cotés, et inscrit dans un disque de rayon 1. Ceci se justifie par:
yk = 2k sin(
π
) →k→∞ π
2k
.
1) En utilisant les formules de trigonométrie 1 − 2 sin2 ( α2 ) = cos(α) et | cos(α)| =
que la suite {yk } vérifie:
s r
yk 2
1
k+1
y1 = 2, yk+1 = 2
1− 1−( k) ,
2
2
p
1 − sin2 (α), montrer
(2.16)
et aussi:
y1 = 2, yk+1
v
u
= yk u
t
1+
q
2
1 − ( y2kk )2
.
(2.17)
2) Exécuter le programme Fortran correspondant contenu dans le fichier source ’ calpi.f ’, et observez
les valeurs de la suite {yk } produite par ces deux formules.
3) Pourquoi la première suite ne converge-t’elle pas numériquement vers π, mais vers 0 ?
Montrez-le.
4) D’après vous, comment remédier à ce problème ?
5) Modifier le programme pour passer en double précision, et relancez-le. Modifiez aussi la valeur de ’
n ’. Commentez.
49
Voici le texte du programme en Fortran ’calpi.f ’:
PROGRAM calpi
C Ce programme calcule Pi de 2 manieres mathematiquement equivalentes, mais non numeriquement :
C les resultats obtenus (stockes dans les variables y1 et y2) le montrent bien !
INTEGER n,k
CCC Tous les commentaires ’C’ ici correspondent aux lignes qu’il faudrait
CCC ecrire pour avoir des calculs en ’DOUBLE PRECISION’ (deux fois plus de decimales).
CCC Dans sa forme presente, le programme calcule en simple precision: ’REAL’
C
DOUBLE PRECISION y1,y2,z
REAL y1,y2,z
CCC Nombre de pas de la boucle de calcul ’DO’. A changer eventuellement.
n=20
CCC ATTENTION: les REELS (REAL) sont toujours ecrits avec une partie decimale: 2.0 ou 2.
y1=2.0
y2=2.0
z=2.0
CCC Initialisation de y1 y2 et z en double precision ...
C
y1=2.0D0
C
y2=2.0D0
C
z=2.0D0
DO k=2,n
CCC Calcul des suites y1 et y2 en simple precision (utilisee par defaut)
CCC SQRT represente la racine caree, et ** l’operateur puissance.
CCC ATTENTION: les REELS (REAL) sont toujours ecrits avec une partie decimale: 2.0 ou 2.
ou .5
y1=2.0*z*SQRT((1.0-SQRT(1.0-(y1/z)**2))/2.0)
y2=y2*SQRT(2.0/(1.0+SQRT(1.0-(y2/z)**2)))
z=2.0*z
CCC Calcul des suites y1 et y2 en double precision
C
y1=2.0D0*z*DSQRT((1.0D0-DSQRT(1.0D0-(y1/z)**2))/2.0D0)
C
y2=y2*DSQRT(2.0D0/(1.0D0+DSQRT(1.0D0-(y2/z)**2)))
C
z=2.0D0*z
CCC Ecriture du resultat a l’ecran dans un format quelconque: ’*’
CCC ATTENTION: le ’S’ ou ’+’ place en 6-IEME COLONNE indique que l’instruction continue
CCC a la ligne suivante. En effet, les instructions NE peuvent PAS depasser la 72-IEME COLONNE
WRITE(6,*) ’Iteration k=’,k, ’ : y1k=’,y1,’ —- y2k=’,
S y2
ENDDO
CCC Une maniere d’obtenir Pi avec l’arctangente ’ATAN’: Fortran ne fait que du calcul, aucune
CCC constante mathematique n’est memorisee ( a la difference de Maple ).
WRITE(6,*) ’alors que PI=’,4.0*ATAN(1.0)
C
WRITE(6,*) ’alors que PI=’,4.0D0*DATAN(1.0D0)
STOP
END
3 Aperçu des logiciels libres de calcul numérique Scilab et Octave.
3.1 Nombres premiers avec Scilab.
– Tapez scilab : cela lance le logiciel de calcul numérique ’ Scilab ’.
– Tapez exec(’premiers.sci’); puis: Imaxpremiers(100) : cela affiche les 100 premiers nombres
premiers en invoquant le fichier source ’ premiers.sci ’ contenant le programme nommé ’Imaxpremiers’, et
appelé avec l’argument ’ imax=100’.
– Cliquez sur Help pour accéder à la rubrique d’aide avec fenêtre. Vous pouvez ainsi visualiser les
fonctions dont ce logiciel dispose, ainsi que leur manuel d’utilisation avec exemples.
– Sélectionnez File/Quit dans le Menu pour fermer le logiciel.
50
– Lisez ce que contient le fichier source ’ premiers.sci ’ en l’éditant avec ’ emacs ’. Vous avez un aperçu
de la syntaxe de Scilab.
3.2 Nombres premiers avec Octave.
– Tapez octave : cela lance le logiciel de calcul numérique ’ Octave ’.
– Tapez premiers(100) : cela affiche les 100 premiers nombres premiers en invoquant le fichier source ’
premiers.m’ contenant un programme (obligatoirement) du même nom, appelé avec l’argument ’ imax=100’.
– Tapez help pour accéder à la rubrique d’aide ...
– Tapez exit pour fermer le logiciel.
– Lisez également ce que contient le fichier source en langage Octave ’ premiers.m ’. La syntaxe est très
similaire à celle de Scilab.
Remarque: pour ceux que cela intéresse, il y a dans le répertoire ’Autres_programmes’ le fichier source
’ tp1.c ’ écrit en Langage C. Nous n’aborderons pas ce langage en TP.
4 Un logiciel payant de calcul symbolique et numérique : Maple.
Maple n’est pas, comme Fortran, Scilab et Octave, un outil de calcul numérique (qu’il fait très lentement),
mais beaucoup plus un logiciel de ’calcul symbolique’, bien adapté aux mathématiques. Il contient des milliers de fonctions prédéfinies, et est doté d’une syntaxe facile d’accés, quoique pouvant devenir rapidement
complexe... Il peut vous permettre de mieux comprendre ou d’approfondir certaines notions mathématiques
via la rubrique d’aide (Help) très fournie en exemples.
4.1 Calcul des nombres premiers et de π avec Maple.
1) Sur votre ligne de commande, tapez: xmaple & ou maple &. S’ouvre alors la fenêtre de travail du
logiciel Maple. Vous pouvez choisir l’interface classique ou le nouvel interface intuitif. Ce qui suit se réfère
à l’interface classique.
2) Sur la ligne de commande du logiciel (là où se trouve le symbole ’>’), tapez:
ithprime(100);
evalf(Pi);
Les choses sont plus simples ... sur ces exemples, tout au moins . Vous pouvez également écrire des instructions itératives, des fonctions, des programmes (procédures)... Voici un exemple très simple d’itération :
3) Tapez : for i from 1 to 10 do ithprime(i) end do;
On peut aussi augmenter la précision de certains calculs en virgule flottante. Par exemple :
4) Tapez :
Digits:=1000; evalf(Pi); Digits:=3; evalf(Pi); Ou encore:
restart; evalf(Pi,50);
NB: Dans la fenêtre de Maple, vous pouvez relancer les instructions précédentes en revenant
dessus avec le curseur, et en appuyant sur la touche ’Entrée’. La commande ’restart’ réinitialise tout le système.
5) Continuez autour de ces thèmes ... La fonction d’aide (’Help’ dans le Menu) de Maple
fournit explications, exemples (à recopier par ’copier/coller’), et fonctions associées à celle
dont on demande le manuel d’utilisation ( le ’See Also:’ en bas de page). Commencer par
’Help / Introduction’. Est également utile : ’Help / Topic Search’.
Tapez par exemple :
a:=cos(Pi/4); evalf(a);
sin(x+Pi);
sin(x+y); b:=expand(sin(x+y)); combine(b);
51
isprime(423423); isprime(423427); isprime(11423423);
ifactor(423423); ifactor(11423423);
nextprime(10^10); prevprime(10^10);
A vous de chercher dans l’aide, et d’imaginer d’autres commandes ...
4.2 D’autres exemples ...
Allez dans la rubrique d’aide (’ Help ’), sélectionnez ( ’ Introduction ’) puis :
1) Mathematics / Packages / linalg
Ensuite, sélectionnez par exemple les fonctions ’ inverse ’, ’ matrix ’, ’ det ’, ’ norm ’, ’transpose’,
’multiply’, ’ eigenvects ’ . Lisez à chaque fois les explications, et recopiez des exemples par ’ copier/coller
’ afin de les faire exécuter par Maple. Modifiez-les ...
2) Graphics / 3-D
Ici, sélectionnez par exemple les fonctions ’ plot3d ’ , ’ animate3d ’ . Faites tracer quelques-unes des
courbes en 3D proposées, inventez-en...
La fonction ’ plot ’ sera très utilisée dans les prochains TP.
3) Continuez le parcours de la rubrique d’aide et ses exemples...
NB: A la fin, vous pouvez sauvegarder votre travail (Menu ’File / Save’ ou barre de menus),
par exemple dans un fichier nommé ’ tp1.mws ’. Vous pourrez, plus tard, utiliser le fichier ainsi
sauvegardé en sélectionnant ’File/Open’ dans le Menu. Pensez à sauvegarder fréquemment ce
que vous écrivez (en cas de plantage).
NB: quand vous ouvrirez un fichier Maple il faudra toujours faire ’Entrée’ sur les instructions (procédures) que nécessite votre calcul : elles ne sont pas exécutées automatiquement.
— FIN DU TP —
CE QUI SUIT EST CEPENDANT IMPORTANT POUR MIEUX MAITRISER
L’ENVIRONNEMENT ET TRAVAILLER PLUS RAPIDEMENT:
5 ANNEXE IMPORTANTE: Conseils pratiques, petit aide-mémoire pour la programmation,
et mini-guide de langage Unix.
5.1 Conseils pratiques.
1. ALLER PLUS VITE
– Sauvegarder fréquemment un travail en cours. Cela évitera de tout perdre en cas de bug inopiné.
– Utilisez les deux flèches verticales pour rappeler les commandes précédemment entrées. Vous
irez beaucoup plus vite.
– Utilisez !a ou !ab pour rappeler respectivement la dernière commande entrée commençant par
’a’ ou par ’ab’. Taper history vous donne la liste de vos dernières commandes.
– Tapez la ou les premières lettres, puis pressez la touche Esc vous permet d’éviter d’avoir à taper
en entier le nom d’un fichier ou d’un répertoire.
– N’oubliez pas le ’ copier/coller ’ (’ copy / paste ’) utilisable dans les menus ou avec la souris.
– Familiarisez-vous avec le Menu des éditeurs de texte ou des logiciels que vous utilisez.
2. GERER L’ESPACE DE TRAVAIL
– Le symbole & placé à la suite de certaines commandes appelant les éditeurs ou logiciels avec fenêtre
de travail permet de “conserver la main” (de ne pas bloquer la ligne de commande). C’est le cas pour
les commandes emacs, xemacs, ooffice, xmaple, xfig, ghostview, lyx, acroread, netscape, mozilla,
kview, ....
52
– Vous pouvez configurer votre ’Bureau’, votre ’Tableau de bord’, ...
– ... et utiliser plusieurs bureaux (’bureaux virtuels’) pour plus de facilité.
– Préférez ces dernières options (garder la main avec ’&’, travailler sur 3 ou 4 bureaux virtuels, avec
plusieurs terminaux ouverts ...) à celle qui consiste à iconifier trop de fenetres dans un meme bureau... Vous
risquez d’avoir trop de taches en activité, d’oublier de les refermer, ... ou d’éditer par exemple deux fois le
meme fichier, ce qui aura pour effet de le bloquer !
– Ne pas oublier de faire régulièrement du “ménage” dans vos fichiers (cf. tout à la fin de cette
annexe).
3. INVOQUER DE L’AIDE
– Avoir toujours le réflexe de taper help ou de cliquer sur Help dans le Menu d’un logiciel: c’est
parfois comme cela qu’on en découvre un nouveau le plus facilement et efficacement.
– Penser aux commandes Unix man et xman pour faire affichier le manuel d’utilisation d’une commande
(cf. guide plus bas).
– Sur le site ’ rez-ufr ’ beaucoup de choses vous sont expliqués quand à la gestion de votre compte.
Lisez aussi la ’Charte informatique’.
4. DEBOGUER ...
– Tapez (en général) Control-C ou Control-D pour débloquer la ligne de commande, arréter un programme qui a “bouclé” ou “bogué”.
– La commande Unix xkill permet de “tuer” une fenetre (d’un logiciel souvent) qui se serait bloquée.
– Les commandes ps ou ps -ef suivi de kill -9 No de processus ont pour effet de visualiser puis de
“tuer” un processus que vous voulez supprimer ( parceque bloqué, uniquement ...).
– Ne jamais éteindre un ordinateur. Utiliser Control-Alt-Backspace pour vous déconnecter si
tout est bloqué.
5.2 Petit aide-mémoire pour la programmation.
• gfortran: Pour compiler un programme écrit en langage ’Fortran 77’ (contenu dans un fichier s’écrivant
obligatoirement avec l’extension ‘ .f ’ , par exemple : tp1.f ).
Taper gfortran tp1.f a pour effet de compiler le fichier ’ tp1.f ’ , c’est à dire de créer, à partir de ce ’fichier
source’ de programmation, un fichier écrit en un langage exécutable par l’ordinateur. Le nom par défaut de
cet ’exécutable’ est: ’ a.out ’.
Taper ensuite ./a.out pour ’lancer le programme’ Fortran.
NB : Lors de la compilation du fichier, il ne doit y avoir aucun message d’erreur . Sinon il
faut (cf. exercice 2.1. du TP1 ):
a) Rectifier les erreurs, signalées à la compilation, mises en évidence et indiquées avec le numéro de la
ligne correspondante dans le fichier Fortran (en tapant emacs tp1.f & ou xemacs tp1.f & , par exemple).
b) Sauvegarder ’ tp1.f ’.
c) Compiler à nouveau ce dernier.
d) Relancer le programme.
• gnuplot: Lance le logiciel de traçage de courbes “Gnuplot”, associé souvent à la programmation en
Fortran.
Taper gnuplot (Voir ensuite les exercices des TP. On peut accéder à la rubrique d’aide en tapant help.)
• xmaple Logiciel commercial de calcul symbolique (et numérique) “Maple”.
Tapez: xmaple &
53
(Faire ensuite les exercices proposés dans les TP. En explorer également le Menu, en particulier la rubrique
d’aide ’Help’, où l’on trouvera beaucoup d’exemples simples d’instructions en langage Maple, que l’on pourra
recopier à la souris sur la ligne de commande de Maple.)
• scilab : Logiciel libre de calcul numérique “Scilab”.
Tapez: scilab . On procède ensuite un peu dans le même esprit que Maple, à l’intérieur de la fenetre de
travail et avec la rubrique d’aide.
• octave : Logiciel libre de calcul numérique “Octave”.
Tapez: octave . Pas de fenetre ici ... mais une aide cependant.
• matlab : Logiciel commercial de calcul numérique “Matlab”, dont Octave est une version dérivée beaucoup plus simple, mais gratuite.
Tapez: matlab& . Tester pour commencer le mode démonstration ’Demos’.
5.3 Mini-guide de langage Unix.
On rappelle que l’on peut se passer de la connaissance des commandes Unix, et utiliser
les menus déroulants, boites de dialogues, etc ... comme sous d’autres environnements. Cette
option est laissé à votre libre choix. On n’en parle pas ici.
Utilisation des commandes clavier en langage Unix.
– Où taper les commandes ? :
uniquement dans la fenêtre de travail, sur la “ligne de commande” (ligne où se trouve écrit votre nom
d’utilisateur)
Exemple: whoami
– Quelle est la syntaxe générale d’une commande ? :
nom-de-la-commande [–options] [fichier(s)-ou-répertoire(s)-concerné(s)]
Exemple: ls -l TP1 ou encore: cp -R TP1 TP1_bis
Attention: bien respecter les espacements entre commande, options, et fichiers/répertoires
– Comment avoir des explications sur une commande ? :
Tapez: man nom-de-la-commande (Essayer également: xman &)
Attention: Vous devez toujours lire et essayer de comprendre les messages d’erreurs fournis
par Unix à la suite d’une commande erronée.
NB: Plusieurs commandes peuvent etre écrites à la suite grace au ’ ; ’ . Exemple: cd TP1 ; ls
Les principales commandes Unix pour gérer vos fichiers et répertoires
– Vous fichiers sont classés dans des répertoires, eux-mêmes disposés en arborescence (sous-répertoires)
(cf. la figure plus loin).
– Lorsque vous tapez des instructions dans une fenêtre de travail, votre ligne de commande ou “shell” (
qui correspond virtuellement à l’utilisateur que vous etes ) se trouve toujours dans un de ces répertoires : le
“répertoire courant”.
Au début d’une session, aprés vous être connecté, votre répertoire courant est toujours votre répertoire
principal, ou “répertoire-utilisateur”, qui porte votre nom de login.
– Vous pouvez vous déplacer dans l’arborescence de vos répertoires (modifiables à souhait), et même,
pour autant que cela est permis, dans l’arborescence de tout le système informatique de l’UFR.
– Dans vos répertoires, qui sont seulement des ‘tiroirs’ de rangement, vous pourrez créer, visualiser, dupliquer, détruire des fichiers de toute sorte.
Les commandes les plus fréquentes sont:
• ls : pour lister fichiers et répertoires. Exemples:
ls . ou ls : liste fichiers et répertoires se trouvant dans le répertoire courant , répertoire symbolisé par le
symbole point: ’ . ’
ls .. : liste fichiers et répertoires se trouvant dans le répertoire supérieur (“répertoire père”), symbolisé
par le symbole: ’ .. ’
54
ls -l : même opération que ’ ls ’, mais avec l’option ’ l ’ , qui donne plus d’informations (’ listing long’).
ls Rep : liste le contenu du répertoire ’Rep’. Par exemple: ls TP1 ou ls -l TP* ou ls -la *
NB: Sous Unix, le caractère “*” remplace n’importe quelle chaıˆne de caractères.
• mkdir : pour créer un répertoire.
mkdir Rep : crée le répertoire nommé ’ Rep ’ (dans le répertoire courant).
• cd : pour vous déplacer dans les répertoires. Exemples:
cd Rep : pour aller dans le répertoire ’ Rep ’ (depuis le répertoire courant, bien sûr).
cd Rep1/Rep2/Rep3 : suit un chemin dans les répertoires. Par exemple: cd TP1/Autres_programmes
cd .. : pour remonter au répertoire supérieur (celui au dessus dans l’arborescence). Par exemple: cd
../TP2
cd ../.. (remonte deux répertoires plus haut)
cdeou cd : pour revenir directement à votre répertoire principal d’utilisateur.
cd e/TP1 (depuis n’importe quel endroit de l’arborescence, permet de retourner à dans répertoire
principal, pour aller dans le répertoire ’ TP1 ’)
cd /; ls; cd : vous montez tout en haut des répertoires de votre ordinateur, situés à la racine de
l’arborescence Unix ’ / ’ , vous listez les répertoires ’principaux’ (se trouvant à cet endroit, et pour la plupart
protégés) , puis retournez dans votre ’compte-utilisateur’.
Voici une illustration de l’arborescence des utilisateurs, et de l’ utilisation de la commande cd. Vous etes
l’utilisateur A:
utilisateur A
cd ..
utilisateur U
cd B2
B1
cd ~U
ou cd ../../U
B2
cd ../..
cd B1/C2
cd C1
C1
cd ../../B2 ou cd ~/B2
C2
• emacs, xemacs, kwrite, ... : éditeurs de texte, c’est à dire logiciels permettant de créer et modifier
un fichier contenant un texte.
Exemple: emacs tp1.f & (Se familiariser ensuite avec le Menu.)
NB: Le caractère & permet de laisser la ligne de commande libre de recevoir d’autres instructions, de
“garder la main” .
• more: Permet de faire défiler le contenu d’un fichier dans la fenêtre de travail, sans avoir à l’éditer (et
donc sans pouvoir le modifier). Exemple:
more tp1.f (Utiliser ensuite la touche Return ou la Barre d’espace pour faire défiler le texte, taper
“q ” pour quitter).
• cp : pour copier (dupliquer) des fichiers. Exemples:
55
cp fichier1 fichier2 : copie ’ fichier1 ’ en ’ fichier2 ’ (à l’intérieur du répertoire courant).
cp Rep1/Rep2/fichier1 Rep3/Rep4/fichier2 : copie ’ fichier1 ’ (avec le chemin pour y accéder
depuis le répertoire courant: ’ Rep1/Rep2 ’) en ’ fichier2 ’ (dans le répertoire dont le chemin d’accés depuis
le répertoire courant est ’ Rep3/Rep4 ’).
cp e nom-d’utilisateur/TP1/tp1.f
tp1-copie.f
cp ../TP3/donnees.dat
. Ecrire ’ . ’ sans préciser de nom de fichier a pour effet de copier le fichier
d’origine dans le répertoire courant (lui-meme appelé ’ . ’) en lui conservant son nom.
Remarque: De manière analogue la commande mv permet de déplacer ou renommer un fichier ou un
répertoire (dangereux).
• rm : pour effacer un fichier. Exemples:
rm a.out : efface le fichier ’ a.out’ .
rm * : efface tous les fichiers du répertoire courant. (A manier avec précaution !)
rm -R Rep: efface le répertoire ’Rep’...
NB: Faites un peu de ménage. La place mémoire dont chaque utilisateur dispose est limitée et vous
risquez, en surchargeant votre compte de le retrouver verouillé. (Utilisez les commandes quota, du, df
/home pour obtenir des informations ...) Il vous faudra donc peut-etre détruire, au bout d’un certain temps,
des fichiers inutiles ou sans importance pour votre travail. En particulier, les fichiers d’erreurs nommés ’
core ’ sont très volumineux. D’autres aussi, comme le répertoire ’cache’ de mozilla, et certains fichiers issus
du web. Demandez conseil à l’enseignant.
56
TP No 2 TECHNIQUES DE RÉSOLUTION D’ÉQUATIONS SIMPLES
Ce qui suit concerne la résolution des équations de la forme f (x) = 0 où f est une fonction réelle définie
et au moins continue sur un intervalle réel borné I = [a, b] et telle que f (a) ≤ 0 et f (b) ≥ 0. On s’intéressera
aussi aux équations de la forme x = g(x) (problèmes de points fixes) où g est une fonction réelle au moins
continue définie sur un intervalle réel I = [a, b] et à valeurs dans I.
Rappels sur les méthodes de la fausse position, de la sécante et l’algorithme de DekkerBrent.
a) On convient d’appeler méthode de la fausse position l’algorithme suivant pour résoudre f (x) =
0 où f est une fonction réelle définie et au moins continue sur un intervalle réel borné I = [a, b] et telle que
par exemple f (a) < 0 et f (b) > 0 :
[a0 , b0 ] = [a, b], et pour k = 0, ... on calcule c = ak −
f (ak )
,
f (bk )−f (ak )
bk −ak
et on définit le nouvel intervalle par :

si f (c) = 0, ak+1 = bk+1 = c

si f (ak )f (c) < 0, ak+1 = ak , bk+1 = c
,

si non i.e. f (ak )f (c) > 0, ak+1 = c, bk+1 = bk
(2.18)
(2.19)
(c est le zéro du polynôme d’interpolation linéaire de f au points ak et bk dont l’expression est p(x) =
k
k
f (ak ) ax−b
+ f (bk ) bx−a
).
k −bk
k −ak
On montre que si f est de classe C 2 , si f ′ (x) > 0, f ′′ (x) ≥ 0 pour tout x ∈ I (et f (a) < 0 et f (b) > 0)
f (ak )
f (b)
alors bk = b0 pour tout k et ak+1 = ak − f (b)−f
(ak ) = b − f (b)−f (ak ) → ξ où ξ est le zéro de f (la convexité de f
b−ak
b−ak
c−bk
c−ak
k
ak + c−a
implique f (c) = f ( ac−b
b−ak b) ≤ f (ak ) ak −bk + f (bk ) bk −ak = p(c) = 0), si bien qu’on obtient la méthode
k −b
des approximations successives appliquée à la fonction g(x) = x −
convergence est seulement linéaire
f (x)
f (b)−f (x)
b−x
= b−
f (b)
f (b)−f (x)
b−x
c’est pourquoi la
ak+1 − ξ
→k→∞ g′ (ξ)
ak − ξ
où 0 < g′ (ξ) < 1.
Ainsi cette méthode n’est pas performante et même peut être moins efficace que la méthode de dichotomie
(si g′ (ξ) > 1/2).
b) La méthode de la sécante, qui est effectivement utilisée, repose sur la même formule que la méthode
de la fausse position, mais cette fois on ne cherche pas forcément à conserver un encadrement et on utilise
les dernières approximations xk et xk−1 de la racine pour calculer la suivante xk+1 comme zéro du polynôme
d’interpolation linéaire de f en xk et xk−1 :
x0 = a, x1 = b, xk+1 = xk −
f (xk )
.
f (xk )−f (xk−1 )
xk −xk−1
(2.20)
On montre que lorsque xk converge vers une racine ξ de f , on a, en notant ek = ξ − xk l’erreur au kième
pas :
ek+1 = −
1 f ′′ (ηk )
ek ek−1 ,
2 f ′ (ζk )
(2.21)
où ηk , ζk ∈ [min(xk , xk−1 , ξ), max(xk , xk−1 , ξ)] et où on suppose f√′ non nulle. Il est possible d’en déduire
que l’ordre de convergence de la méthode de la sécante est p = 1+2 5 le nombre d’or (racine de p2 − p − 1)
|e
|
1 f ′′ (ξ) 1/p
ce qui signifie que limk→∞ |ek+1
). Ainsi cette méthode est bien plus performante
p existe (et vaut | 2 f ′ (ξ) |
|
k
que la méthode de la fausse position au sens strict.
c) L’algorithme de Dekker-Brent.
57
La formule (2.20) peut aussi être obtenue en considérant que xk+1 est la valeur en y = 0 du polynôme
q(y) de degré 1 qui vaut xk en y = f (xk ) et xk−1 en y = f (xk−1 ) (interpolation linéaire inverse). On peut
généraliser le procédé au degré deux en prenant xk+1 la valeur en y = 0 du polynôme de degré 2 qui vaut xk
en y = f (xk ), xk−1 en y = f (xk−1 ) et xk−2 en y = f (xk−2 ) (interpolation quadratique inverse) :
xk+1 = (
+
(y − f (xk−1 ))(y − f (xk−2 ))
xk +
(f (xk ) − f (xk−1 ))(f (xk ) − f (xk−2 ))
(y − f (xk ))(y − f (xk−2 ))
(y − f (xk ))(y − f (xk−1 ))
xk−1 +
xk−2 )y=0 .
(f (xk−1 ) − f (xk ))(f (xk−1 ) − f (xk−2 ))
(f (xk−2 ) − f (xk ))(f (xk−2 ) − f (xk−1 ))
(2.22)
On obtient alors une méthode qui lorsqu’elle converge et pour f assez régulière a pour ordre de convergence
1.83929... racine de p3 − p2 − p − 1.
L’algorithme de Dekker-Brent est une combinaison des méthodes de dichotomie, de la sécante et de l’interpolation quadratique inverse qui converge rapidement et fournit un encadrement. Il est contenu dans un
sous programme Fortran des éléments de réponse joints à l’énoncé.
Vous pouvez voir la façon dont est codé cet algorithme en éditant le sous-programme correspondant du programme Fortran tp2.f.
.
QUESTIONS DE PROGRAMMATION OBLIGATOIRES
Donner les racines réelles des trois équations suivantes.
cosh(x − 3) − ln(x) = 0, x > 0
ln(x) + x2 (1 − ln(x)) − 0.8 = 0, x > 0
(1 − 2x2 ) exp(−x2 ) + 0.0005
1) Avec le code Fortran ’ tp2.f ’.
Il faut rentrer dans le code Fortran la fonction f(x), la fonction fp(x) correspondant à la
dérivée de
f, ainsi que la fonction g(x)=x+f(x) ou g(x)=x-f(x) pour la méthode des approximations
successives
et celles qui s’y apparentent.
Remarquons que cosh(x) s’écrit COSH(x) , ln(x) s’écrit ALOG(x) , et exp(x) s’écrit EXP(x).
Il est nécessaire de donner un encadrement de la racine convoitée. Pour cela le logiciel libre
gnuplot
permet de tracer le graphe de f, et de “zoomer” au bon endroit. Exemple :
gnuplot
plot cosh(x-3)-log(x)
plot [0.05:5] cosh(x-3)-log(x)
plot [2:5] cosh(x-3)-log(x)
plot [2:5] cosh(x-3)-log(x) , 0
...
(Préférez cependant Maple pour le traçage.)
58
Pour chaque méthode de résolution, vérifier que son domaine de validité est bien respecté.
Etes-vous certain d’avoir obtenu toutes les racines dans les trois exemples proposés ?
2) Manipulations avec Scilab.
Les commandes sont ici de la forme, pour la première équation et la recherche de sa première racine :
deff(’[y]=fsol(x)’,’y=cosh(x-3)-log(x)’)
[x]=fsolve(2.5,fsol,1e-7)
Dans le “Help” choisir “Non-linear tools (optimization and simulation)” puis ’fsolve’ pour
plus
d’informations sur la commande utilisée.
Trouvez toutes les racines... Ici on donne un point de départ pour la recherche et non un
encadrement : 2.5 par exemple.
3) Manipulations avec Octave.
Les commandes sont à présent de la forme :
function y=f(x); y=cosh(x-3)-log(x); endfunction
[x,info]=fsolve(’f’,2.5)
Taper : ’help’ puis : ’help fsolve’ puis : ’help -i function’ pour plus d’infos...
Le fonctionnement est très similaire à celui de Scilab.
4) Manipulations avec Maple.
Il suffit de rentrer par exemple :
fsolve(cosh(x-3)-ln(x)=0, x, 2.5..3);
(Cliquer sur “Help” puis sur “Topic Search” et taper ’fsolve’ pour le mode d’emploi.)
Pour visualiser la courbe, utiliser la fonction ’plot’.
Faites afficher les racines avec un nombre plus important de décimales.
5) Comparez les différents logiciels.
6) Faites les exercices des annales.
FIN DES QUESTIONS OBLIGATOIRES
59
Chapitre 3
Interpolation.
3.1
3.1.1
Interpolation polynomiale
Existence et unicité du polynôme d’interpolation.
Le problème de l’interpolation est le suivant : Etant donné n + 1 points distincts (xi , yi ), i = 0 . . . n,
construire une courbe passant par ces points. On désire de plus que la courbe soit lisse et donnée par une
formule simple, du type y = f (x).
Ce problème intervient dans de nombreuses situations industrielles.
Exemple. génie mécanique : construction de carrosserie par machines à commande numérique. On rentre
un certains nombres de points de contrôle (xi , yi ) et la machine calcule et usine la forme passant par ces
points.
Exercice. Montrer que s’il existe une fonction f dont le graphe contient les points (xi , yi ), i = 0 . . . n
alors les abscisses xi sont toutes distinctes.
Une façon simple de résoudre le problème est de chercher la fonction f sous forme d’un polynôme (qui
est toujours C ∞ ). L’algèbre linéaire donne immédiatement le résultat d’existence et d’unicité du polynôme
d’interpolation.
Théorème 4 Etant donnés n + 1 abscisses distinctes x0 , x1 , . . . xn et n + 1 valeurs quelconques y0 , y1 , . . . yn ,
il existe un unique polynôme P de degré au plus n tel que P (xj ) = yj , j = 0 . . . n.
Pn
k
Preuve. Notons Rn [X] =
k=0 ak X , ak ∈ R l’espace vectoriel des polynômes de degré inférieur ou
égal à n. Soit l’application linéaire :
F : Rn [X] → Rn+1
P 7→ (P (x0 ), P (x1 ), . . . , P (xn ))
Le noyau de F se réduit au polynôme nul P = 0. En effet un polynôme de degré inférieur ou égal à n a au
plus n racines, sauf s’il s’agit du polynôme nul. L’application F est donc injective. D’autre part la dimension
de Rn [X] est n + 1, donc F est un isomorphisme.
On pourrait penser que ce théorème résout complètement la question de l’interpolation. En fait, le résultat
précédent est théorique, il reste à construire le polynôme P , de façon simple, précise et flexible : c’est l’objet
du reste du chapitre.
3.1.2
Interpolation et approximation
On peut aussi se poser la question de la précision de l’interpolation polynômiale pour approcher une fonction donnée f sur un segment [a, b]. Etant donnée une fonction f , quel erreur commet-on si on la remplace
par un polynôme prenant les mêmes valeurs en des points fixés ?
Soit f une fonction définie sur le segment [a, b]. Soit n + 1 points distincts x0 , x1 , . . . xn de [a, b]. D’après
le théorème 4, il existe un unique polynôme Pn de degré ≤ n tel que
Pn (xj ) = f (xj ), j = 0 . . . n.
60
On l’appelle polynôme d’interpolation de f aux points xi , i = 0, . . . n.
Théorème 5 (des accroissements finis généralisés) Soit f une fonction de classe C n+1 sur le segment
[a, b]. Soit n + 1 points distincts x0 , x1 , . . . xn de [a, b]. Soit Pn le polynôme de degré ≤ n qui interpole f aux
xi . Il vérifie pour tout x de [a, b] :
f (x) − Pn (x) =
f (n+1) (ξx )
(x − x0 )(x − x1 ) . . . (x − xn )
(n + 1)!
où ξx est un point de [a, b] 1 .
Preuve. La preuve repose sur le théorème de Rolle appliqué « en rafale ». Considérons la fonction
ϕ(t) = f (t) − Pn (t) − λ · (t − x0 )(t − x1 ) . . . (t − xn )
où λ est un paramètre réel qui sera fixé plus tard. Soit maintenant x ∈ R différent des xj , j = 0 . . . n. La
fonction ϕ s’annule en x0 , x1 , . . . xn . Choisissons maintenant λ de sorte que ϕ s’annule également en t = x.
C’est possible car (x − x0 )(x − x1 ) . . . (x − xn ) 6= 0. Ainsi la fonction ϕ s’annule en x0 , x1 , . . . xn et x donc
au moins n + 2 fois sur l’intervalle [a, b]. Par application du théorème de Rolle sur chaque intervalle séparant
deux zéros consécutifs de ϕ, on obtient que la fonction dérivée ϕ′ s’annule donc au moins n + 1 fois sur [a, b].
De même la dérivée seconde ϕ′′ s’annule donc au moins n fois sur [a, b]. En réitérant, on obtient que ϕ(n+1)
s’annule au moins une fois sur [a, b]. Notons ξx ce point tel que ϕ(n+1) (ξx ) = 0. Mais la dérivée (n + 1)-ème
de ϕ(t) se calcule aisément (Pn étant de degré n disparaît !) :
ϕ(n+1) (t) = f (n+1) (t) − λ(n + 1)!
D’où l’on tire que
λ=
f (n+1) (ξx )
.
(n + 1)!
Ecrivons alors le fait que ϕ s’annule en t = x.
0 = f (x) − Pn (x) − λ · (x − x0 )(x − x1 ) . . . (x − xn ).
En remplaçant λ par sa valeur on obtient le résultat.
Remarque. Lorsque n = 0, on retrouve le théorème des accroissements finis f (x) − f (x0 ) = f ′ (ξ)(x − x0 ). Ce théorème précise l’erreur d’approximation entre f et Pn .
Mn+1
|f (x) − Pn (x)| ≤
|(x − x0 )(x − x1 ) . . . (x − xn )|
(n + 1)!
où Mn+1 = maxt∈[a,b] |f (n+1) (t)| qui est bien défini puisque par hypothèse f (n+1) est continue sur [a, b].
Supposons que les xi soit régulièrement espacés, i.e.
xi = a + i · h, h = (b − a)/n, i = 0, . . . n
on peut alors calculer aisément le maximum de Π0≤i≤n (x − xi ).
Exercice. Montrer que
1
|f (x) − P1 (x)| ≤ M2 h2
√8
3
|f (x) − P2 (x)| ≤
M3 h3
27
3
M4 h4
|f (x) − P3 (x)| ≤
128
En conclusion, nous voyons que la qualité de l’interpolation dépend de ϕ(x) = (x−x0 )(x−x1 ) . . . (x−xn ).
Cette fonction s’annulle aux xi et vu les résultats particulier des exercices ci-dessus, on pourrait croire que
|f (x) − Pn (x)| = O(hn+1 )
donc que la qualité de l’approximation augmente avec le nombre de points. Or il n’en est rien, comme le
montre la figure 3.1 qui trace la fonction ϕ pour 9 points xi équidistants sur [−1, 1] (le pas h = 0.25).
Le maximum de ϕ est environ 0.02 et non pas h9 ≈ 4.10−6 . Ce phénomène est général avec des points xi
1. dépendant évidemment de x
61
0.02
(x+1)*(x+0.75)*(x+0.5)*(x+0.25)*x*(x-0.25)*(x-0.5)*(x-0.75)*(x-1)
0
0.015
0.01
0.005
0
-0.005
-0.01
-0.015
-0.02
-1
-0.5
0
0.5
1
Figure 3.1 – Erreur interpolation
équidistants : lorsqu’on augmente le nombre de points, l’approximation est très mauvaise aux extrémités. Le
polynôme d’interpolation oscille avec un grande amplitude vers les extrémités.
3.1.3
Phénomène de Runge
Soit la fonction t 7→ 1/(1 + t2 ). Considérons son polynôme d’interpolation aux points −5, −4, . . . , 4, 5. Il
se calcule aisément, par exemple avec MAPLE.
t 7→ −
7 8
83 6
2181 4 149 2
1
t10 +
t −
t +
t −
t +1
44200
5525
3400
11050
221
Si on trace les graphes des fonctions, on voit le problème des oscillations aux extrémités 2 , voir fig. 3.2
3.2
Polynômes de Lagrange.
Soient n+1 points distincts x0 , x1 , . . . xn . Nous allons donner une base de Rn [X] particulièrement adaptée
à l’interpolation aux points xi . Pour j = 0, . . . , n, notons
Lj (X) =
Πi6=j (X − xi )
Πi6=j (xj − xi )
Remarque. Attention, c’est bien un polynôme, et non une fraction rationnelle : l’inconnue X ne figure qu’au
numérateur. Le dénominateur est une constante de normalisation prévue pour que Lj (xj ) = 1.
Exemple. Fixons n = 2 et explicitons les polynômes de Lagrange.
L0 (X) =
(X − x1 )(X − x2 )
(x0 − x1 )(x0 − x2 )
L1 (X) =
(X − x0 )(X − x2 )
(x1 − x0 )(x1 − x2 )
L2 (X) =
(X − x0 )(X − x1 )
(x2 − x0 )(x2 − x1 )
62
2
1,5
1
0,5
0
-4
-2
0
2
4
Figure 3.2 – Phénomène de Runge
1.2
-(100000./384)*x*(x-0.2)*(x-0.6)*(x-0.8)*(x-1)
0
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
0.2
0.4
0.6
0.8
Figure 3.3 – Un Polynôme de Lagrange de degré 5.
63
1
Exercice. Visualisez quelques polynômes de Lagrange avec un logiciel graphique. (voir fig 3.3).
Propriétés 1 Lj est le polynôme de degré n tel que Lj (xi ) = 0 pour i 6= j et Lj (xj ) = 1 :
Lj (xi ) = δi,j
Preuve. Il suffit de faire X ← xi dans la définition de Lj .
Proposition 1 La famille (Lj )0≤j≤n est une base de Rn [X].
Preuve. Comme la famille contient exactement n + 1 éléments, il suffit de prouver qu’elle est libre. Soit
une combinaison linéaire
X
λj Lj (X) = 0
j
Faisant X ← xi dans cette égalité, on obtient un seul terme non nul :
λi = 0.
En faisant cela pour chaque i, on obtient que la combinaison linéaire est triviale.
Propriétés 2 (formule de Lagrange) Etant donnés n+1 abscisses distinctes x0 , x1 , . . . xn et n+1 valeurs
quelconques y0 , y1 , . . . yn , le polynôme d’interpolation est donné par l’expression :
X
P (X) =
yj Lj (X)
0≤j≤n
Preuve. Il suffit de remarquer que
P
j
yj Lj (xi ) = yi Li (xi ) = yi Un seul terme de la somme est non nul !
Exercice. Formule barycentrique. Soit wi =
1
Πj6=i (xi −xj )
et µi (t) =
wi
t−xi
Montrer que
P
yi µi (t)
.
Pn (t) = Pi
i µi (t)
Cette formule est utile pour le calcul pratique (Cf TP). On remarquera que les coefficients µi (t) ne sont pas
positifs en général et sont à recalculer pour chaque point t.
Exercice. Montrer que
cient dominant).
P
i wi
= 0 (Indication : interpoler la fonction constante 1 et considérer le coeffi-
Les polynômes de Lagrange conduisent à des formules élégantes. Cependant la formule de Lagrange souffre
d’un handicap : l’ajout d’un point nécessite de recalculer tous les polynômes. On verra en TP l’algorithme de
Neville qui permet un calcul rapide par récurrence du polynôme d’interpolation, tout en permettant d’ajouter un noeud sans devoir recalculer tous les coefficients du polynôme. Il faut pour cela écrire le polynôme
d’interpolation sous une autre forme. C’est l’objet du paragraphe suivant.
3.3
Polynômes de Newton.
Un base de l’espace Rn [X] des polynômes de degré inférieur ou égal à n particulièrement adaptée à
l’interpolation est formée des polynôme de Newton :
1, (X − x0 ), (X − x0 )(X − x1 ), . . . , (X − x0 )(X − x1 )(X − x2 ) . . . (X − xn−1 )
Les polynômes Nk (X) = Πj≤k−1 (X − xj ) sont appelés polynômes de Newton. C’est une famille étagée, i.e.
deg Nk = k, donc c’est une base de Rn [X]. De plus les racines de Nk sont exactement x0 , x1 , . . . xk−1 . Le
polynôme d’interpolation s’exprime suivant cette base par une formule élégante attribuée à Newton.
2. On peut résoudre ce problème en prenant des xi non équidistants ou en prenant plus de points vers les extrémités, voir
l’interpolation de Tchebitchev, [2]
64
Proposition 2
Pn (x) = f [x0 ] + f [x0 , x1 ](x − x0 ) + . . . f [x0 , x1 , . . . , xn ](x − x0 )(x − x1 ) . . . (x − xn−1 ).
(3.1)
où les f [x0 , x1 , . . . , xk ] appelées différences divisées sont définies par récurrence :
f [x0 ] := f (x0 ),
f [x0 , x1 ] :=
f [x1 ] − f [x0 ]
x1 − x0
f [x1 , x2 , . . . , xk ] − f [x0 , x1 , . . . , xk−1 ]
xk − x0
Preuve. La preuve repose sur le lemme d’interpolation suivant.
f [x0 , x1 , . . . , xk ] :=
Lemma 1
Pk (x) =
(x − x0 )P1,2,...,k (x) − (x − xk )P0,1,...,k−1 (x)
,
xk − x0
où P1,2,...,k (x) (resp. P0,1,...,k−1(x)) désignent les polynômes d’interpolation aux points x1 , x2 , . . . , xk (resp.
x0 , x1 , . . . , xk−1 .) La preuve du lemme est très simple : pour x = x1 , x2 , . . . , xk−1 , les deux polynômes
P1,2,...,k (x) et P0,1,...,k−1 (x) interpolant f prennent la valeurs f (xi ), i = 1 . . . k − 1. Donc
(x − x0 )P1,2,...,k (x) − (x − xk )P0,1,...,k−1 (x)
= f (x) = Pk (x).
xk − x0
Pour x = x0 ,
Pour x = xk ,
(x−x )P
(x − x0 )P1,2,...,k (x) − (x − xk )P0,1,...,k−1 (x)
= P0,1,...,k−1(x0 ) = Pk (x0 ).
xk − x0
(x − x0 )P1,2,...,k (x) − (x − xk )P0,1,...,k−1 (x)
= P1,2,...,k (xk ) = Pk (xk ).
xk − x0
(x)−(x−x )P
(x)
0
1,2,...,k
k
0,1,...,k−1
Ainsi
interpole f aux points x0 , x1 , . . . , xk , or c’est un polynôme de degré
xk −x0
au plus k donc c’est le polynôme Pk .
La formule de Newton s’en déduit alors par récurrence en identifiant les coefficients de xk dans les deux
expressions de Pk .
Remarque. L’intérêt des polynômes de Newton est que la formule de Newton se comporte bien lorsqu’on ajoute
un point supplémentaire xn+1 . Il suffit de corriger la formule 3.1 en ajoutant le terme f [x0 , x1 , . . . , xn+1 ](x −
x0 )(x − x1 ) . . . (x − xn ). Ce terme s’annulant pour x = x0 , x1 , . . . , xn , il ne sert qu’à corriger le polynôme
pour qu’il interpole au point rajouté x = xn+1 tout en conservant l’interpolation aux points déjà interpolés.
Dans la pratique, on dispose les différences divisées sous forme de tableau, et on les calcule de proche en
proche, par colonne.
x0 f [x0 ]
f [x0 , x1 ]
x1 f [x1 ]
f [x0 , x1 , x2 ]
f [x1 , x2 ]
x2 f [x2 ]
f [x0 , x1 , x2 , x3 ]
f [x1 , x2 , x3 ]
f [x2 , x3 ]
x3 f [x3 ]
f [x0 , x1 , x2 , x3 , x4 ]
f [x1 , x2 , x3 , x4 ]
f [x2 , x3 , x4 ]
f [x3 , x4 ]
x4 f [x4 ]
Remarque. La formule reste vraie si les xj ne sont pas rangés par ordre croissant.
(
Exercice. si f est de classe C k montrer qu’il existe ξ tel que f [x0 , x1 , . . . , xk ] = f k)(ξ)
k! .
Indications. Utiliser la formule des accroissements finis généralisés aux points x0 , x1 , . . . , xn−1 et x = xn .
65
Dans la formule de Newton 3.1, on peut faire coïncider des points : Si par exemple x0 = x1 , x0 est un
point “double” la différence divisée devient
f [x0 , x0 ] = lim
x1 →x0
f [x1 ] − f [x0 ]
= f ′ (x0 )
x1 − x0
Le polynôme d’interpolation vérifie donc en x0 P (x0 ) = f (x0 ) ET P ′ (x0 ) = f ′ (x0 ). On peut faire évidemment
coïncider plusieurs points (points triples, pour faire coïncider les dérivées secondes,etc. . . . On procède de
même par passage à la limite. Par exemple, calculons f [xi , xi , xi ]. Pour cela calculons f [xi , xi + h, xi + 2h]
et prenons la limite quand h → 0.
f [xi , xi + h, xi + 2h] =
f (xi + 2h) − 2f (xi + h) + f (xi )
f [xi + h, xi + 2h] − f [xi , xi + h]
=
.
2h
2h2
f ′′ (xi )
2 .
f ′′ (xi )
à l’ordre 2 au point xi .) Ainsi f [xi , xi , xi ] = 2
′(k)
multiple d’ordre k + 1, f [x, . . . , x] = f k!(x) .
Maintenant limh→0
f (xi +2h)−2f (xi +h)+f (xi )
2h2
=
(Il suffit d’effectuer une développement de Taylor de f
et plus généralement on démontre que pour un noeud
Lorsqu’on veut interpoler une fonction par un polynôme en faisant coïncider les derivées premières,
seconde, . . . , on parle d’interpolation de Hermite 3 .
Voyons cela sur un exemple. Supposons que nous ayons deux noeuds triples x0 , x0 , x0 , x1 , x1 , x1 . Les
différences divisées se calculent ainsi :
x0 f [x0 ]
x0 f [x0 ]
f ′ (x0 )
f ′ (x
0)
x0 f [x0 ]
1 ′′
2 f (x0 )
f [x0 , x0 , x1 ]
f [x0 , x1 ]
x1 f [x1 ]
x1 f [x1 ]
f [x0 , x0 , x0 , x1 ] = c3
f ′ (x1 )
f ′ (x1 )
f [x0 , x0 , x0 , x1 , x1 ] = c4
f [x0 , x0 , x1 , x1 ]
f [x0 , x1 , x1 ]
1 ′′
2 f (x1 )
f [x0 , x0 , x0 , x1 , x1 , x1 ] = c5
f [x0 , x0 , x1 , x1 , x1 ]
f [x0 , x1 , x1 , x1 ]
x1 f [x1 ]
Le polynôme d’interpolation de Newton est donné par
1
P5 (x) = f [x0 ] + f ′ (x0 )(x − x0 ) + f ′′ (x0 )(x − x0 )2 + c3 (x − x0 )3 + c4 (x − x0 )3 (x − x1 ) + c5 (x − x0 )3 (x − x1 )2
2
On peut vérifier qu’il a les propriétés suivantes :
P5 (x0 ) = f (x0 ) P5′ (x0 ) = f ′ (x0 ) P5′′ (x0 ) = f ′′ (x0 )
P5 (x1 ) = f (x1 ) P5′ (x1 ) = f ′ (x1 ) P5′′ (x1 ) = f ′′ (x1 )
Remarque. On peut voir la formule de Newton comme une généralisation de la formule de Taylor. En effet,
si les xi sont tous égaux à x0 , et si on généralise la notion d’interpolation de la façon suivante : on cherche
un polynôme de degré n tel que
P (j) (x0 ) = f (j)(x0 ) j = 0 . . . n.
3. Charles Hermite, 1822-1901, mathématicien français.
66
3.4
3.4.1
Splines cubiques naturelles.
Spline= tige souple
Pour des raisons pratiques, on aimerait interpoler une fonction avec une méthode
– qui soit flexible, en ce sens qu’elle gère facilement l’ajout d’un point supplémentaire,
– qui ne génère pas d’oscillations du type phénomène de Runge aux extrémités.
Un méthode, relativement récente (les années 1970) et maintenant universellement adoptée, est celle des
splines cubiques, que nous présenterons succinctement. La figure 3.4 illustre l’efficacité de la méthode. On a
interpolé la fonction t 7→ 1/(1 + t2 ) aux points −5, −3, −1, 0, 1, 3, 5 avec le polynôme d’interpolation de degré
6 et aussi avec une fonction spline cubique (calculée avec MAPLE).

31
621
33 2
11 3
− 1040
− 5200
t − 1040
t − 5200
t , t < −3,


 7567 + 7101 t + 2409 t2 + 11 t3 ,

− 3 ≤ t < −1,

5200
208

 5200 11735200
523 3
t ,
− 1 ≤ t < 0,
1 − 1300 t2 − 1300
s :=
1173 2
523 3,
1 − 1300 t + 1300 t
0 ≤ t < 1,



7101
2409 2
11 3
7567


−
t
+
t
−
t
,
1
≤ t < 3,

5200
208
 520031 5200
621
33 2
11 3
− 1040 + 5200
t − 1040
t + 5200
t , t≥3
2
1,5
1
0,5
0
-4
-2
0
2
4
Figure 3.4 – Spline cubique vs interpolation de Lagrange
Les fonctions spline ne sont plus des polynômes, elles sont seulement polynomiale par morceaux. Elles sont
caractérisées par les trois propriétés
1. polynomiales par morceaux, de degré trois (d’où le terme cubique) sur chaque (xi , xi+1 )
2. elles sont de classe C 2 . En chaque xi , les dérivées premières et secondes à gauche et à droite coïncident.
3. la dérivée seconde s’annule aux deux extrémités x0 et xn .
Les fonctions spline sont en fait solution d’un problème mécanique simple : on imagine une tige élastique ou
tringle souple 4 passant par les points (xi , f (xi ). La forme x 7→ s(x) adoptée par la tringle doit minimiser
l’énergie potentielle (énergie élastique de déformation) qui s’exprime (voir cours d’élasticité) :
Z
1 xn ′′ 2
s (x) dx
J=
2 x0
4. c’est la traduction de l’anglais “spline”
67
On démontre (et cela déborde du cadre de ce cours) que la fonction spline cubique s est l’unique solution du
problème variationnelR :
x
s minimise J(s) = 12 x0n s′′ (x)2 dx parmi toutes les fonctions vérifiant les propriétés
(i) s(xi ) = yi , i = 0, . . . , n
(ii) s est de classe C 1 sur [x0 , xn ]
(iii) s est de classe C 4 sur chaque [xi , xi+1 ]
3.4.2
Calcul des splines cubiques
A partir des propriétés 1, 2, 3 il est facile de calculer la fonction s. Soit [xi , xi+1 ] un sous-intervalle.
Posons hi = xi+1 − xi et cherchons la restriction de s à cet intervalle sous la forme :
si (x) = ai (x − xi )3 + bi (x − xi )2 + ci (x − xi ) + di .
On obtient :
si (xi )
si (xi+1 )
s′i (xi )
′
si (xi+1 )
s′′i (xi )
′′
si (xi+1 )
=
di
3
2
= ai hi + bi hi + ci hi + di
=
ci
=
3ai h2i + 2bi hi + ci
=
2bi
=
6ai hi + 2bi
= yi
= yi+1
= yi′′
′′
= yi+1
d’où l’on tire (exercice élémentaire) :
ai
bi
ci
di
=
=
=
=
1
′′
′′
6hi (yi+1 − yi )
1 ′′
2 yi
hi ′′
1
hi (yi+1 − yi ) − 6 (yi+1
+ 2yi′′ )
yi
On voit donc que les valeurs des dérivées secondes yk′′ (en plus des valeurs yk de la fonction à interpoler)
déterminent complètement la spline. Pour les déterminer, nous allons utiliser la continuité de la dérivée
première. On obtient
hi
1
′′
+ yi′′ )
s′i (xi+1 ) = (yi+1 − yi ) + (2yi+1
hi
6
En faisant i ← i − 1, On obtient la condition de continuité s′i−1 (xi ) = s′i (xi )
1
hi−1
hi−1
1
hi ′′
′′
(2yi′′ + yi−1
) = (yi+1 − yi ) − (yi+1
+ 2yi′′ )
6
hi
6
(yi − yi−1 ) +
′′
En exprimant cette condition en x1 , x2 , . . . xn−1 on obtient un système linéaire en les inconnues y1′′ , y2′′ , . . . yn−1
dont la ie ligne est
′′
′′
hi−1 yi−1
+ 2(hi−1 + hi )yi′′ + hi yi+1
=
6
6
(yi+1 − yi ) −
(yi − yi−1 )
hi
hi−1
Exercice. Assembler la matrice A du système obtenu et montrer qu’elle est symétrique, tridiagonale, et
à diagonale dominante. En déduire l’existence et l’unicité de la spline cubique.
On peut enfin prouver que A est bien conditionnée :
Exercice. Montrer que la plus grande (resp. petite) valeurs propre de A vérifie
λmax ≤ max{2h0 + 3h1 , 3(hi + hi+1 ), 3hn−2 + 2hn−1 }
i
λmin ≥ min{2h0 + h1 , hi + hi+1 , hn−2 + 2hn−1 }
i
On peut donc calculer le conditionnement de A :
κ(A) =
max hi
λmax
≤ C te
λmin
min hi
Le calcul numérique de la spline cubique est donc rapide, fiable et précis.
Mentionnons pour conclure que d’autres types de splines existent :
68
– on peut relaxer la condition de nullité des dérivées secondes aux extrémités, cela est intéressant si la
fonction à interpoler présente une grande courbure aux extrémités.
– on peut monter en degré, mais on constate que les splines de degré supérier oscillent davantage. On
préfère utiliser les splines cubiques pour l’interpolation.
69
Chapitre 4
Quadrature.
4.1
4.1.1
Méthodes élémentaires
Principe d’intégration numérique : poids et noeuds.
Soit f une fonction continue sur un intevalle [a, b]. Le but de ce chapitre est de donner des méthodes de
calcul approché de
Z b
f (x) dx = I(f ).
a
Bien sûr, lorsqu’on connaît une primitive F de f , la valeur exacte est
I(f ) = F (b) − F (a).
Cependant, ce cas est très rare . . .
Remarque. le nombre I(f ) s’interprète comme l’aire sous la courbe représentative de f , d’où le nom quadrature, de quarrer, en ancien français, calculer une aire.
Commençons par rappeler les méthodes élémentaires.
4.1.2
Rectangle, Trapèze, Simpson
Si on interpole y = f (x) par la fonction constante y = f ((a + b)/2) i.e. si on calcule l’aire du rectangle
de hauteur f ((a + b)/2), on obtient l’approximation
I(f ) ≈ (b − a) · f (
a+b
).
2
C’est la méthode du point milieu.
(a)
Si on interpole y = f (x) par la fonction affine y = f (a) + (x − a) f (b)−f
prenant les mêmes valeurs aux
b−a
deux extrémités a et b, i.e. si on calcule l’aire du trapèze, on obtient l’approximation
I(f ) ≈ (b − a) ·
f (a) + f (b)
.
2
C’est la méthode du trapèze.
a+b
Si on interpole y = f (x) par le polynôme du second degré passant par (a, f (a)), ( a+b
2 , f ( 2 )), (b, f (b))
i.e. si on calcule l’aire sous la parabole, on obtient l’approximation
1
4 a+b
1
I(f ) ≈ (b − a) · { f (a) + f (
) + f (b)}.
6
6
2
6
C’est la méthode de Simpson.
Si on interpole y = f (x) par le polynôme du troisième degré passant par (xj , f (xj )) où xj = a + j · b−a
3 , j =
0 . . . 3 on obtient l’approximation
1
3 2a + b
3 a + 2b
1
I(f ) ≈ (b − a) · { f (a) + f (
) + f(
) + f (b)}.
8
8
3
8
3
8
70
C’est la Règle des 3/8 de Newton.
Donnons pour terminer ce premier panorama une formule plus sophistiquée. Si on interpole y = f (x) par le
polynôme du quatrième degré passant par (xj , f (xj )) où xj = a+j· b−a
4 , j = 0 . . . 4 on obtient l’approximation
I(f ) ≈ (b − a) · {
32 3a + b
12 a + b
32 a + 3b
7
7
f (a) + f (
) + f(
) + f(
) + f (b)}.
90
90
4
90
2
90
4
90
C’est la méthode de Villarceau.
En conclusion, pour donner une valeur approchée de I(f ), on utilise donc un tableau de valeurs de f , i.e.
la donnée de f (xj ) en certains points xj appelés noeuds et on calcule ensuite une moyenne pondérée de ces
valeurs, le coefficient affecté à chaque valeur étant évidemment appelé poids.
X
Q(f ) = (b − a) ·
ωj f (xj )
j
Faisons maintenant quelques remarques importantes.
Remarque. La quantité
Rb
Rb
f
(x)
dx
f (x) dx
a
= aR b
b−a
a dx
correspond à la moyenne 1 de f sur (a, b). Or toutes les formules précédentes sont du type
Rb
X
a f (x) dx
≈
ωj f (xj )
b−a
j
avec les poids ωj positifs et tels que
P
moyenne discrète j ωj f (xj ). 2
P
j ωj = 1. Ainsi on a remplacé la moyenne continue
Rb
a
f (x) dx
b−a
par une
P
Remarque. L’expression f 7→ Q(f ) = (b − a) · j ωj f (xj ) est une forme linéaire, comme l’était f 7→ I(f ) =
Rb
a f (x) dx.
Rb
Remarque. L’expression f 7→ I(f ) = a f (x) dx étant positive il est capital que f 7→ Q(f ) = (b − a) ·
P
3
j ωj f (xj ) le soit également. Cela impose que les ωj soient positifs. Nous verrons que l’interpolation par
des polynômes de degré supérieur ou égal à huit conduit à certains poids négatifs, ce qui fait que les formules
de quadrature correspondantes sont dangereuses et inutilisées.
Remarque. Les formules précédentes possèdent une symétrie intéressante : elles sont invariantes par le changement x ← a + b − x, i.e. la symétrie par rapport au point milieu du segment, qui échange a en b. les poids
ωj respectent cette symétrie. Ainsi fˇ : x 7→ f (a + b − x) et f : x 7→ f (x) donnent la même intégrale approchée
Q(f ) = Q(fˇ). Evidemment on a également I(f ) = I(fˇ)( calcul par changement de variable.)
On voit ainsi que Q(f ) conserve les principales propriétés de I(f ). C’est une qualité extrêmement agréable
de la quadrature numérique.
Remarque. Une propriété de l’intégrale sera cependant perdue irrémédiablement : la stricte positivité. Prenons
par exemple la fonction f : x 7→ Πj (x − xj )2 . On a évidemment I(f ) > 0 alors que Q(f ) = 0
4.1.3
Ordre et Formules d’erreur
Proposition 3 La méthode du point milieu est exacte pour f polynôme de degré inférieur ou égal à un. La
méthode du trapèze est exacte pour f polynôme de degré inférieur ou égal à un. La méthode de Simpson est
exacte pour f polynôme de degré inférieur ou égal à trois. La méthode de Newton est exacte pour f polynôme
de degré inférieur ou égal à trois. La méthode de Villarceau est exacte pour f polynôme de degré inférieur ou
égal à cinq.
1. ou aussi à l’espérance de f (X) lorsque X suit la loi uniforme sur (a,Pb)
2. qui correspond à l’espérance de f (X) lorsque X suit la loi discrète j ωj δxj , autrement dit P (X = xj ) = ωj .
3. sans quoi on pourrait obtenir une intégrale approchée négative pour certaines fonctions positives !
71
Preuve. la preuve repose sur la linéarité. Pour alléger les calculs on se ramène aussi à l’intervalle [−1, 1]
(b−a)
par changement de variable t 7→ x = a+b
qui applique [−1, 1] sur [a, b]. L’intégrale se transforme par
2 +t 2
changement de variable :
Z
Z b
(b − a) 1
ϕ(t) dt
f (x) dx =
2
−1
a
où
ϕ(t) := f (x) = f (
Il suffit alors de prouver que
Z
(b − a)
a+b
+t
)
2
2
1
−1
ϕ(t) dt = 2 ·
X
ωj ϕ(xj )
j
pour ϕ(t) = 1, t, t2 , . . .. Pour la constante ϕ(t) = 1, l’égalité est équivalente à la somme des poids valant 1.
X
ωj ) = 1.
j
Les autres calculs sont facilités par l’(im)parité. Pour la méthode du point milieu, par imparité I(f ) =
Q(f ) = 0 pour ϕ(t) = t. Pour Simpson, par imparité I(f ) = Q(f ) = 0 pour ϕ(t) = t3 . Pour Villarceau,
lorsque ϕ(t) = t5 on trouve I(f ) = Q(f ) = 0, ainsi il suffit de vérifier l’exactitude pour t2 , t4 . On voit aussi
que l’imparité permet de gagner un degré, on a intérêt à utiliser des formules avec un nombre impair de
noeuds.
Remarque. On voit aussi que l’imparité permet de gagner un degré, on a intérêt à utiliser des formules avec
un nombre impair de noeuds.
Cela motive la définition suivante.
Définition 1 On dit que le degré de précision d’une quadrature est m si elle est exacte pour tous les polynômes de degré inférieur ou égal à m, mais pas pour tous les polynômes de degré m + 1
Exercice. Formule de Newton-Cotes. Soit a ≤ x0 < . . . < xn ≤ b. Soit (Lj )j les polynomes
P de Lagrange
(voir chapitre précédent) correspondant à cette subdivision. Montrer que Qn (f ) = (b − a) ωj f (xj ) où les
poids sont donnés par ωj =
inférieur ou égal à n.
Propriétés 3 On a
Z b
f (x) dx
a
Z b
f (x) dx
a
Z b
f (x) dx
a
Z b
f (x) dx
a
a
Lj (x) dx
b−a
est l’unique règle de quadrature exacte pour les polynômes de degrés
les formules d’erreur suivantes :
(b − a)3 ′′
a+b
)+
f (ξ),
2
24
f (a) + f (b) (b − a)3 ′′
−
f (ξ),
(b − a) ·
2
12
4 a+b
1
(b − a)5 (4)
1
) + f (b)} −
f (ξ),
(b − a) · { f (a) + f (
6
6
2
6
2880
3 2a + b
3 a + 2b
1
1
) + f(
) + f (b)}
(b − a) · { f (a) + f (
8
8
3
8
3
8
(b − a)5 (4)
−
f (ξ),
6480
32 3a + b
12 a + b
32 a + 3b
7
7
) + f(
) + f(
) + f (b)}
(b − a) · { f (a) + f (
90
90
4
90
2
90
4
90
(b − a)7 (6)
f (ξ),
−
1935360
= (b − a) · f (
(4.1)
=
(4.2)
=
=
a
Z
Rb
b
f (x) dx =
pour f de classe C 2 (resp. C 4 , C 6 ) sur [a, b] et ξ ∈ [a, b] (évidemment dépendant de la formule utilisée).
72
(4.3)
(4.4)
(4.5)
Preuve. Les preuves s’appuient par exemple sur la formule de Taylor avec reste intégral (qui n’est rien
d’autre que la formule d’intégration par partie appliquée en rafale) et le lemme de la moyenne que nous
rappelons.
Lemma 2 (de la moyenne) Soit g(x) une fonction intégrable positive sur [a, b]. Soit f continue sur [a, b].
Alors il existe ξ ∈ [a, b] tel que
Z b
Z b
g(x)dx
f (x) · g(x)dx = f (ξ)
a
a
Démontrons par exemple la formule des trapèzes 4.2. Par une intégration par parties,
Z
b
a
f (x) dx = −
Z
b
a
(x − c)f ′ (x) dx + [(x − c)f (x)]ba .
Pour raison de symétrie, il est judicieux de choisir c :=
Z
b
a
f (x) dx = −
En intégrant à nouveau par parties :
Z
Z b
f (x) dx =
a
a
b
Z
b
a
(x −
a+b
2
a+b ′
f (a) + f (b)
)f (x) dx +
(b − a).
2
2
f (a) + f (b)
(x − a)(x − b) ′′
f (x) dx +
(b − a).
2
2
L’erreur I(f ) − Q(f ) est donc exactement
Z
b
a
(x − a)(x − b) ′′
f (x) dx = −
2
Le lemme de la moyenne s’applique car g(x) :=
Z
(x−a)(b−x)
2
′′
b
a
(x − a)(b − x) ′′
f (x) dx
2
≥ 0. On obtient alors
I(f ) − Q(f ) = −f (ξ)
Z
b
g(x)dx
a
Or g(x) est un polynôme de degré 2, on peut utiliser Simpson qui est exacte pour calculer
(b − a){1/6 × 0 + 4/6 × (b − a)2 /8 + 1/6 × 0}
(b−a)3
12 .
Rb
a
g(x)dx =
=
Les autres formules peuvent se démontrer de manière
analogue. On peut aussi utiliser le théorème des noyaux de Peano, pour une preuve systématique, voir devoir
maison.
Remarque. On peut aussi utiliser le théorème des accroissements finis généralisés 5 qui donne la différence
entre le polynôme d’interpolation et la fonction. Cependant, il faut prendre garde aux changements de signe
de la fonction (x − x0 )(x − x1 ) . . . (x − xn ) aux points xj .
On voit dans ce résultat que la précision des formules de quadrature croît avec les nombre de noeuds, et
qu’on a intérêt à prendre des nombres de noeuds impairs. Cependant, les termes d’erreurs font intervenir les
dérivées d’ordre élevé de la fonction f à intégrer.
– Si la fonction est peu régulière, on ne doit utiliser que les formules les plus simples.
– Si la fonction oscille beaucoup, il y a un risque que les dérivées d’ordre élevé soient très grandes, penser
par exemple à sin(nx). Là aussi il faut éviter d’utiliser les formules d’ordre élevé.
Les formules d’ordre élevé ne présentent un intérêt que si l’intégrand f est très régulier. De plus, les problèmes
liés à l’interpolation d’ordre élevé en des points équidistants constatés au chapitre précédent (oscillation de
grande amplitude aux extrémités) se traduisent ici par l’apparition de poids négatifs, à partir de n = 8. On
n’utilise donc ces méthodes que jusqu’au degré 7.
Dans tous les cas, il faut faire attention à la largeur de l’intervalle (b − a) qui doit être toujours inférieure
à 1, à cause du terme (b − a)n , c’est pour cette raison qu’on préfère utiliser les méthodes composées qui font
l’objet de la section suivante.
73
4.2
4.2.1
Méthodes à pas multiples
Principe des méthodes composées.
On subdivise l’intervalle [a, b] en n morceaux : a = x0 < x1 < . . . < xn = b. Lorsque le pas de la
subdivision est constant 4 : xj = a + j · (b − a)/n j = 0, . . . , n. La relation de Chasles donne :
Z b
X Z xj+1
f (x)dx =
f (x)dx.
a
xj
j
Puis on applique une quadrature sur chaque intervalle de la subdivision. Pour la méthode des trapèzes, on
obtient ainsi :
Z b
X (b − a) f (xj ) + f (xj+1 ) (b − a)3
′′
f (x)dx =
·
−
f (ξj )
n
2
12n3
a
j
En remarquant que, hormis les extrémités a et b, chaque point xj apparaît dans deux termes


)
(P
Z b
′′

X
f (b)  (b − a)3
(b − a) f (a)
j f (ξj )
−
+
f (xj ) +
f (x)dx =
n  2
2 
12n2
n
a
a<xj<b
Le terme
P
j
f ′′ (ξj )
n
peut s’exprimer comme une moyenne de valeurs de f ′′ . Si f est P
supposée de classe C 2 ,
f ′′ (ξj )
on peut utiliser une forme discrète du lemme de la moyenne, très facile à prouver j n
ξ ∈ (a, b). On obtient ainsi :


Z b

X
f (b)  (b − a)3 ′′
(b − a) f (a)
−
+
f (ξ).
f (xj ) +
f (x)dx =
n  2
2 
12n2
a
= f ′′ (ξ) avec
a<xj<b
Notons

X
(b − a)  f (a)
+
f (xj ) +
Tn (f ) =
n  2
a<xj<b

 f (a)
X f (xj )
Tn (f ) = (b − a)
+
+
 2n
n
a<xj<b

f (b) 
2 

f (b) 
2n 
On remarque que Tn (f ) est (encore) une moyenne des valeurs de f aux points xj , où les extrémités a et b
sont affectées d’un poids deux fois moindre que les points intérieurs. Finalement
Z b
(b − a)3 ′′
f (ξ).
f (x)dx = Tn (f ) −
12n2
a
Plus simplement on retiendra
Z
b
1
)
2
n
a
Le même principe, appliqué à la méthode des rectangles donne :




X
b−a
f (xj+1/2 )
Rn (f ) =

n 
f (x)dx = Tn (f ) + 0(
j
x +x
Les points xj+1/2 = j 2 j+1 correspondent aux milieux des segments (xj , xj+1 ). Remarquer que Rn (f ) est
la moyenne arithmétique des f (xj+1/2 ). On a également l’approximation du même ordre :
Z b
1
f (x)dx = Rn (f ) + 0( 2 )
n
a
4. On peut aussi prendre un pas adapté à la fonction, plus fin là où elle oscille beaucoup et plus grossier là où elle varie peu.
Ce sont les méthodes adaptatives dont l’étude dépasse la portée de ce modeste fascicule.
74
Pour la méthode de Simpson :
Sn (f ) =

(b − a) X 1

n
j


4
1
f (xj ) + f (xj+1/2 ) + f (xj+1 )

6
6
6
En regroupant les poids par noeud de chaque type :



 1
X 2
X 4
1
f (a) +
f (xj ) +
f (xj+1/2 ) +
f (b)
Sn (f ) = (b − a)

 6n
6n
6n
6n
0<j<n
j
Il s’agit évidemment toujours d’une formule de moyenne car la somme des coefficients est : 1/6n + 2(n −
1)/6n + 4n/6n + 1/6n = 1. En utilisant à nouveau le lemme de la moyenne, on prouve la formule d’erreur :
Z
a
Plus simplement on retiendra
b
f (x)dx = Sn (f ) −
Z
(b − a)5 (4)
f (ξ).
2880 n4
b
f (x)dx = Sn (f ) + 0(
a
4.2.2
1
).
n4
Accélération de la convergence. Extrapolation de Romberg-Richardson.
Le principe de l’accéleration de la convergence est simple et peut s’appliquer àtoute suite dont la vitesse
de convergence est contrôlée explicitement. Voyons cela sur un exemple, celui du calcul approché d’intégrales
par la méthodes des trapèzes. Notons
Z b
f (x) dx
I=
a
On peut démontrer (formule d’Euler-Maclaurin voir TP 4) que
α
1
+ 0( 4 )
2
n
n
Tn = I +
Si on double le nombre de noeuds la précision est alors
1
α
+ 0( 4 )
4n2
n
T2n = I +
En combinant judicieusement ces deux approximations, on peut en construire une beaucoup plus précise :
′
T2n
:=
1
4T2n − Tn
= I + 0( 4 )
3
n
Supposons (c’est encore une conséquence d’Euler-Maclaurin) que
′
=I+
T2n
β
1
+ 0( 6 )
4
n
n
On réitère alors le procédé :
1
β
+ 0( 6 )
4
16n
n
′
′
16T4n − T2n
1
′′
T4n
:=
= I + 0( 6 )
15
n
etc. . . En pratique on dispose les calculs ainsi
′
T4n
=I+
Tn
′
T2n
T2n
′
′′
T4n
T4n
T4n
1
1
précision 0( n2 ) 0( n4 ) 0( n16 )
75
Evidemment on peut continuer, mais au delà d’un certain nombre d’accélération, les erreurs d’arrondis gâtent
l’amélioration escomptée.
′ est un barycentre de T et T
Remarque. Le procédé de base consiste à extrapoler à la limite. En effet T2n
n
2n
′ à l’extérieur du segment (T T ) dans
avec des coefficients 4 et −1. Cela revient à placer sur une droite T2n
n 2n
une proportion bien choisie. Faire un dessin.
Remarque. on voit aisément que
Tn + Rn
2
ainsi on fait la moyenne arithmétique des trapèzes et des rectangles. De plus


X 1

(b
−
a)
4
1
′
T2n
=
f (xj ) + f (xj+1/2 ) + f (xj+1 ) = Sn

n 
6
6
6
T2n =
j
qui redonne Simpson. 5
4.2.3
Methode de Montecarlo
Une méthode particulièrement simple est la méthode de Montecarlo. On tire au hasard les noeuds suivant
une loi uniforme sur [a, b], en utilisant par exemple un générateur de suite aléatoire (rand en scilab). On
approche l’intégrale par la moyenne arithmétique des valeurs au noeuds
P
1≤j≤n f (ξj )
I(f ) ≈ (b − a) · {
}
n
Evidemment le résultat est un variable aléatoire qui dépend de l’échantillon des noeuds tirés. On montre en
cours de probabilités que
P
1≤j≤n f (ξj )
}
(b − a){
n
√
est un estimateur sans biais de I(f ) et on peut donner un intervalle de confiance de largeur O(1/ n), grace
au théorème central limite. Certes la convergence est bien plus lente que les méthodes déterministes, mais
√
on ne fait aucune hypothèse de régularité sur f . D’autre part la vitesse en O(1/ n) est conservée lorsque
on calcule des intégrales multiples par cette méthode, alors que la convergence des méthodes déterministes
se dégrade lorsque la dimension augmente et devient plus lente que la méthode de Monte Carlo dès que la
dimension est supérieure ou égale à 4. (Voir TP 4).
4.3
4.3.1
Méthode de Gauss et polynômes orthogonaux.
Introduction.
Nous avons construit des formules du type de sorte qu’elles soient exactes pour des polynômes de degré
le plus élevé possible. Jusqu’à présent, on a placé les noeuds de façon équidistante. On choisissait ensuite les
poids de façon à avoir la précision maximale. Pour une formule à n points, on avait un degré de précision n
(cas n impair) ou n − 1 (cas n pair).
Remarque. La précision maximum théorique est 2n − 1. En effet, soit le polynôme P (x) := Πj (x − xj )2 où
les noeuds sont les xj . Le degré de P est 2n. Le polynôme P est positif non identiquement nul donc on a
Rb
évidemment a f (x)dx > 0 alors que Q(f ) = 0.
La précision maximale théorique est donc (2n − 1). Les méthodes que nous avons construites jusqu’à
présent sont de précision maximum n. Nous allons maintenant construire effectivement une méthode de
précision 2n − 1 en optimisant le placement des noeuds.
′′
5. comparer T4n
et Villarceau.
76
4.3.2
Méthode de Gauss.
Théorème 6 Il existe une et une seule formule de quadrature
X
Q(f ) := (b − a)
!
ωk f (xk )
k
exacte pour les polynômes de degré ≤ 2n − 1. Sur l’intervalle [−1, 1] elle s’exprime ainsi :
Z 1
X
f (x)dx ≈
wk f (xk )
−1
k
où les xk sont les racines du ne polynôme de Legendre
Pn (x) :=
et
wk = 2ωk =
1 dn
{(x2 − 1)n }
2n n! dxn
Z
1
Πj6=k
−1
x − xj
xk − xj
2
dx.
Remarque. La formule sur [a, b] se déduit de celle sur [−1, 1] par changementPde variable
P affine. Voir proposition 3. En particulier, comme la longueur de l’intervalle [−1, 1] est 2, on a k wk = k 2ωk = 2.
Avant de démontrer le théorème, donnons quelques cas particuliers.
P0 = 1, P1 (x) = x, P2 (x) =
1
1
1
(3x2 − 1), P3 (x) = (5x3 − 3x), P4 (x) = (35x4 − 30x2 + 3)
2
2
8
xk = ± √13 ,
Cela donne pour n = 2,
Z
Pour n = 3
Z
wk = 1
1
1
1
f (x)dx ≈ f (− √ ) + f ( √ ).
3
3
−1
1
5
f (x)dx ≈ f (−
9
−1
r
r
8
5
3
3
) + f (0) + f (
)
5
9
9
5
Testons la précision de ces méthodes sur une exemple simple. Prenons
f (x) =
,
Z
Simpson donne
Z
1
f (x)dx =
−1
π
≈ 1.57
2
1
11
5
1 1 4
} = = 1.66
f (x)dx ≈ 2{ · + 1 +
6 2 6
62
3
−1
Gauss ( 2 points) donne
Z
1
−1
Gauss (3 points) donne
1
1 + x2
Z
f (x)dx ≈
1
−1
f (x)dx ≈
1
1+
5 1
91+
3
5
1
3
+
+
1
1+
1
3
8 5 1
+
9 91+
=
3
5
3
= 1.5
2
=
19
= 1.56
12
Sur cet exemple, avec un nombre de point réduit la méthode de Gauss à 3 points est précise à 10−2 près
alors que Simpson est précise à 10−1 près. Pour n ≥ 5 les noeuds xk ne s’expriment pas à l’aide de radicaux,
ils sont cependant tabulés et disponibles dans les logiciels évolués.
77
Preuve.
Existence.
Soit
1 dn
{(x2 − 1)n }.
2n n! dxn
Pn est un polynôme de degré n exactement. En effet, il est obtenu en dérivant n fois le polynôme (x2 − 1)n
qui est de degré 2n. Montrons maintenant que Pn (x) a exactement n racines simples sur ] − 1, 1[. Nous allons
appliquer le théorème de Rolle en rafale. Le polynôme P (x) = (x2 − 1)n prend la même valeur en x = −1 et
d
(x2 − 1)n s’annule en c. Comme −1 et 1 sont racines de
x = +1, donc il existe c ∈] − 1, 1[ tel que P ′ = dx
multiplicité n de P , −1 et 1 sont encore racine de P ′ mais de multiplicité n − 1. Le polynôme P ′ prend donc
la même valeur en −1, c, 1. Par le théorème de Rolle, P ′′ s’annule donc entre −1 et c et entre c et 1, cela fait
donc deux racines en dehors des extrémités. Comme −1 et 1 sont encore racine de P ′′ de multiplicité n − 2,
on peut réitérer : à l’étape n
dn
{(x2 − 1)n
dxn
s’annule donc n fois sur ] − 1, 1[. Comme Pn (x) est de degré n cela fait donc exactement n racines simples (
de multiplicité un) sur ] − 1, 1[.
Montrons maintenant que la famille Pn est une famille orthogonale de L2 (] − 1, 1[) muni du produit
scalaire
Z
Pn (x) :=
1
hf, gi :=
f (x)g(x)dx.
−1
Il s’agit de prouver que hPn , Pm i = 0 si n 6= m. Cela se montre très simplement en intégrant par parties de
manière répétée (exercice).
Soit maintenant un polynôme P (x) quelconque de degré ≤ 2n − 1. Effectuons la division euclidienne de
P par le n-ième polynôme de Legendre Pn .
(4.6)
P = Pn · Q + R.
Comme degR < degPn = n, le degré de Q est ≤ n − 1. La famille P0 , P1 , . . . Pn−1 est étagée, donc elle est
libre et c’est une base de l’espace des polynômes de degré ≤ n − 1. Or Pn est orthogonal à P0 , P1 , . . . Pn−1 ,
donc par linéarité Pn ⊥ vecthP0 , P1 , . . . Pn−1 i = Rn [X] et Pn ⊥ Q :
Z 1
Pn (x)Q(x) dx = 0.
−1
Avec Eq. (4.6) il vient
Z
1
P (x) dx =
−1
Z
1
R(x) dx.
−1
D’autre part la formule de quadrature donne :
X
X
X
wk P (xk ) =
wk (Pn (xk )Q(xk ) + R(xk )) =
wk R(xk )
k
k
k
car les xk sont justement les racines de Pn .
Il reste à montrer que
Z 1
R(x) dx =
−1
X
wk R(xk )
k
pour tout polynôme R de degré ≤ n − 1. Ceci ne pose aucune difficulté, il suffit de bien choisir les poids wk .
Lemma 3 Soit a ≤ x1 < x2 < . . . xn ≤ a. Il existe un unique n-uple w1 , w2 , . . . wn tel que
Z 1
X
f (x) dx =
wk f (xk )
−1
k
pour tout polynôme R de degré ≤ n − 1.
78
Rb
Preuve. Il suffit de prendre R := Lk pour obtenir que nécessairement wk = a Lk (x) dx où Lk est le
k-ième polynôme de Lagrange.PEnsuite comme R est de degré inférieur ou égal à n − 1, il est son propre
polynôme d’interpolation R = k R(xk )Lk d’où le résultat en intégrant.
Avec ce choix de wk , la formule de quadrature est exacte jusqu’au degré 2n − 1 puisque
Z 1
Z 1
X
X
R(x) dx =
wk R(xk ) =
wk P (xk )
P (x) dx =
−1
−1
k
k
Le problème dans le lemme c’est que rien ne garantit la positivité des poids : wk > 0. 6 Mais ici, un miracle
se produit. Comme la formule de quadrature est exacte pour P de degré ≤ 2n − 1, elle l’est pour P := L2k
qui est de degré 2n − 2. Rappelons en effet que
Lj (X) =
Calculons
Z
1
Πi6=j (X − xi )
.
Πi6=j (xj − xi )
Lk (x)2 dx =
−1
X
wj L2k (xj ) = wk
j
car dans la somme un seul terme est non nul. On obtient finalement
Z 1
Lk (x)2 dx > 0
wk =
−1
Unicité.
Soit une autre formule de quadrature à n noeuds définie par les noeuds x′k et les poids wk′ , k = 1, . . . , n. Les
poids sont évidemment supposés non nuls, sinon le noeud x′k ne compte pas dans la quadrature
Q′ (f ) :=
X
wk′ f (x′k ).
k
Soit Lk le polynôme de Lagrange construit sur les noeuds x′j . 7 Il est de degré n − 1 donc Pn ⊥ Lk :
Z
1
Pn (x)Lk (x) dx = 0
−1
Or en utilisant la formule de quadrature Q′ qui est exacte car deg (Pn · Lk ) ≤ 2n − 1, on obtient
Z
1
−1
Pn (x)Lk (x) dx =
X
wj′ Pn (x′j )Lk (x′j ) = wk′ Pn (x′k ).
j
D’où l’on tire que
Pn (x′k ) = 0
donc que les noeuds x′k sont les racines de Pn donc, à permutation éventuelle près, ils sont égaux aux xk .
Les deux quadratures ont donc les mêmes noeuds, elles ont donc aussi les mêmes poids correspondants (en
vertu du lemme 3).
6. En fait, pour n ≥ 8 avec des noeuds xk équidistants, certains poids peuvent être négatifs.
7. on devrait le noter L′k mais il y a un risque de confusion avec la dérivée. . .
79
Chapitre 5
Méthode des moindres carrés.
5.1
5.1.1
Présentation du problème. Régression linéaire.
Droite des moindres carrés.
Soient n observations ti , yi . On cherche une droite y = at + b passant « au mieux » par ces points au sens
suivant :
yi = ati + b + ǫi
P 2
avec
ǫi minimum.
Exemple. On mesure la position d’une fusée en route pour Mars. yi position à l’instant ti . a représente
la vitesse de l’engin, b sa position initiale, ǫi l’erreur de mesure.
Exemple. On mesure le poids d’un échantillon de personnes en fonction de leur taille.Dans ce cas
l’expérience montre que la courbe ressemble à une parabole y = at2 . En passant au logarithme, on se ramène
au cas précédent :
ln yi = ln a + 2 ln ti + ǫi
L’indice de masse corporelle est le rapport poids/taille2 . Pour plus d’exmples et des simulations interactives voir le site de demo de Mathematica.
http://demonstrations.wolfram.com/LinearAndQuadraticCurveFittingPractice/
Plus généralement, on veut approcher/approximer/ ajuster/fitter n observations ti , yi par un polynôme
de degré fixé m < n − 1
p(t) = a0 + a1 t + . . . + am tm
de sorte que l’erreur quadratique
X
i
soit minimum.
(p(ti ) − yi )2
Remarque. Lorsque m ≥ n − 1 et que les points ti sont distincts, il suffit de prendre m = n − 1 et on se
ramène au problème de l’interpolation qui peut être exactement résolu. Le polynôme passe exactement par
tous les points ti , yi Voir chapitre interpolation et l’erreur quadratique est nulle donc minimum.
Lorsque m < n − 1, on ne peut pas en général trouver de polynôme p de degré m tel quep(ti ) = yi . Cela
se traduit par le système

a0 + a1 t1 + . . . + am tm
= y1

1


 a0 + a1 t2 + . . . + am tm = y2
2
..
.

.
= ..



= yn
a0 + a1 t n + . . . + am t m
n
dont les inconnues sont les coefficients du polynôme, i.e. le vecteur a = (a0 , a1 , . . . , am )T de dimension m + 1.
Ce système est surdéterminé : il y a n équations mais seulement m + 1 inconnues. En général, il n’a pas de
solutions, sauf si le second membre vérifie des conditions de compatibilité particulières.
80
60
55
50
45
40
35
30
25
20
15
1
2
3
4
5
6
7
8
9
10
Figure 5.1 – un exemple de régression linéaire avec Matlab
55
50
45
40
35
30
25
20
15
1
2
3
4
5
6
7
8
9
10
Figure 5.2 – un exemple de régression quadratique avec Matlab
81
5.2
Interprétation géométrique et écriture matricielle.
Notons maintenant



A=


1 t1 t21 . . . tm
1

1 t2 t22 . . . tm
2 
.. ..
..
..
.. 
. .
.
.
. 
m
2
1 tn tn . . . tn
la matrice de taille n × (m + 1), appelée matrice de Vandermonde. On constate aisément que pour a =
(a0 , a1 , . . . , am )T ∈ Rm+1 le produit
A a = (P (t1 ), P (t2 ), . . . , P (tn ))T ∈ Rn
P
Munissons alors Rn de la norme euclidienne usuelle : pour z = (z1 , . . . , zn )T ∈ Rn , ||z||2 = i zi2 = zT z.
Le problème des moindres carrés se traduit alors :
Etant
donné y = (y1 , . . . , yn )T ∈ Rn On cherche a = (a0 , a1 , . . . , am )T ∈ Rm+1 tel que ||A a − y||2 =
P
2
i (yi − P (ti ) soit minimum.
On est ainsi conduit à minimiser la distance
||y − A a||2 = min ||y − A c||2
c∈Rm+1
Or lorsque le vecteur c décrit Rm+1 , le vecteur A c décrit le sous espace vectoriel Im A, image de l’application
linéaire de matrice A :
A : Rm+1 → Rn
c
7→ A c
Il s’agit donc simplement de calculer la distance du vecteur y au sous espace vectoriel Im A. Or on sait que la
distance est réalisée pour la projection orthogonale du vecteur y = (y1 , . . . , yn )T sur le sous-espace vectoriel
Im A.
Cette interpétation géométrique rend le problème très simple à résoudre, car on sait que le sous
espace Im A est l’espace engendré par les vecteurs colonnes de A. Nous allons donner la méthode dans le
théorème suivant.
Théorème 7 Soit b ∈ Rp et soit un système surdéterminé A x = b avec A matrice n × p, n > p. La quantité
||A x − b||2 est minimum si et seulement si A x est la projection orthogonale de b sur l’espace engendré par
les colonnes de A, ce qui équivaut encore à
AT A x = AT b
(5.1)
Ce système linéaire s’appelle la forme normale du système A x = b.
Preuve. La norme ||A x − b||2 =< A x − b, A x − b >. Soit b⋆ = A x⋆ la projection orthogonale de b sur
l’espace vectoriel Im A.
||A x − b||2 =< A x − b⋆ + b⋆ − b, A x − b⋆ + b⋆ − b >
développons le carré scalaire :
||A x − b||2 = ||A x − b⋆ ||2 + 2 < A x − b⋆ , b⋆ − b > +||b⋆ − b||2
Comme b⋆ est la projection orthogonale de b sur Im A, on a (b⋆ − b) ⊥ Im A donc
< A x − b⋆ , b⋆ − b >=< A x − A x⋆ , b⋆ − b >=< A (x − x⋆ ), b⋆ − b >= 0
Il reste donc
||A x − b||2 = ||A x − b⋆ ||2 + ||b⋆ − b||2
(On reconnaît ici le théorème de Pythagore, faire un dessin.) On en conclut que
||A x − b||2 ≥ ||b⋆ − b||2 = ||A x⋆ − b||2
Donc
||A x⋆ − b||2 = minp ||b − A x||2
Il reste à caractériser la projection orthogonale
x∈R
b⋆ de
82
b sur Im A. Elle est définie par les deux conditions :
(i) b⋆ ∈ Im A
(ii) (b⋆ − b) ⊥ Im A
La première condition se traduit par b⋆ = A x⋆ pour un vecteur x⋆ . Comme Im A est engendrée par les
vecteur colonnes de A, la seconde condition signifie que
(b⋆ − b) ⊥ A ek ,
En utilisant la transposée de A
k = 1...p
< (b − A x⋆ ), A ek >= 0 k = 1 . . . p
< AT (b − A x⋆ ), ek >= 0 k = 1 . . . p
Donc le vecteur
Ce qui donne
AT (b − A x⋆ ) = 0
AT A x⋆ = AT b
Il reste à voir si le système sous forme normale (5.1) admet bien une solution unique. C’est l’objet de la
proposition suivante.
Proposition 4 Soit A matrice n × p avec p ≤ n. La matrice AT A est inversible si et seulement A est de
plein rang, i.e. rang(A) = p. De plus dans ce cas AT A est symétrique définie positive.
Preuve. Il est immédiat que AT A est symétrique :
(AT A)T = AT (AT )T = AT A
La positivité signifie que
< AT A x, x > ≥ 0.
Or < AT A x, x >=< A x, A x >= ||A x||2 ≥ 0. La stricte positivité signifie que
∀x 6= 0,
< AT A x, x > > 0
Ou encore
Or
< AT A x, x > = 0 ⇒ x = 0
< AT A x, x > = ||A x||2 = 0 ⇒ A x = 0
P
P
Or A x = k xk A ek = k xk Ck où x = (x1 , x2 , . . . , xp ) et Ck = A ek désigne la k-ème colonne de A. Donc
A x = 0 pour un x 6= 0 si et seulement si les colonnes de A ne sont pas indépendantes. On obtient donc
que la matrice AT A est définie positive ssi les colonnes de A sont indépendantes i.e. rang(A) = p. Enfin la
matrice AT A est carrée. Donc elle est inversible ssi son noyau est réduit au vecteur nul.
AT A x = 0 ⇒< AT A x, x >= ||A x||2 = 0 ⇒ A x = 0
et nous venons de voir que A x = 0 pour un x 6= 0 si et seulement si les colonnes de A ne sont pas
indépendantes.
Remarque. la condition rang(A) = p n’est possible que si p ≤ n, car le rang d’une matrice est à la fois le
rang des lignes et le rang des colonnes.
Nous pouvons maintenant appliquer la théorie au problème
moindres carrés. La matrice

1 t1 t21 . . .
 1 t2 t2 . . .
2

A= . .
..
..
.
.
 . .
.
.
1 tn t2n . . .
83
de l’approximation polynomiale au sens des

tm
1

tm
2 
(5.2)
.. 
. 
tm
n
la matrice de taille n × (m + 1). Le vecteur b = (y1 , y2 , . . . yn ). On cherche a = (a0 , a1 , . . . , am ) ∈ Rm+1 tel
que ||y − A a||2 soit minimum. D’après le théorème précédent, a est solution du système
AT A a = AT y
Vérifions que le système a une solution unique
Proposition 5 Soit A la matrice de Vandermonde (5.2). La matrice AT A est inversible si les abscisses
t1 , t2 , . . . tn sont distincts.
Preuve. Montrons que la condition est suffisante. D’après la proposition précédente, il suffit de
P tester si les
colonnes de A sont indépendantes. Soit une relation de dépendance linéaire entre les colonnes : k αk Ck = 0
où Ck = (t1k−1 , t2k−1 , . . . , tnk−1 )T Cette relation s’écrit encore :
X
αk tik−1 = 0
k
Soit Q(t) = α1 + α2 t + . . . αm+1 tm . Ce polynôme de degré au plus m s’annule en t1 , t2 , . . . , tn . Ces points
étant distincts, le polynôme admet donc au moins n racines, or par hypothèse n > m + 1 donc Q est le
polynôme nul et tou ses coefficients sont nuls : αk = 0, ∀k. Les colonnes de A sont bien indépendantes donc
AT A est inversible.
La méthode des moindres carrés est donc bien posée en théorie. Nous allons voir à la section suivante comment
résoudre le système (5.1) en pratique. Donnons auparavant un exemple fondamental, la droite de regression.
Exemple. Droite de régression. Soit des mesures y1 , y2 , . . . yn correspondant P
à des points distincts
2
t1 , t2 , . . . , tn . Montrer que la droite y = a t + b qui minimise l’écart quadratique
i (yi − (ati + b)) est
donnée par le système linéaire :
P P
n
t
b
y
i
i
P
P 2 ·
= P
ti
ti
ti y i
a
En déduire que la droite des moindres carrés passe par l’isobarycentre du nuage de points :
ȳ = at̄ + b
où z̄ désigne
P
zi
n
et que
y.t − ȳ t̄
a = ¯2
t − (t̄)2
Indication. Soit
alors
AT A
5.2.1
=



A=

P Pn
P t2i
ti
ti

1 t1
1 t2 

.. .. 
. . 
1 tn
Moindres carrés pondérés.
Supposons que l’on veuille pondérer l’influence des points de mesure ti , yi ), c’est à dire que l’on se donne
une suite de poids strictement positifs wi et que l’on cherche à minimiser l’erreur quadratique pondérée :
X
wi (p(ti ) − yi )2
1≤i≤n
par un polynôme de degré fixé m < n − 1
p(t) = a0 + a1 t + . . . + am tm .
84
Tout ce qui précède peut se généraliser aisément en munissant Rn du produit scalaire pondéré :
X
< x, y >w =
wi xi yi
i
associé à la norme
||z||w =
X
wi zi2 .
i
La forme normale du système des moindres carrés s’écrit alors
AT W A a = AT W y
avec




W =



5.3
w1 0 . . .
0 w2 0
.. . . . .
.
.
.
.. . . . .
.
.
.
0 ... ...
... 0
... 0
.
..
. ..
..
. 0
0 wn








Algorithme de résolution numérique.
A priori, la matrice du système (5.1) AT A étant symétrique définie positive, on peut appliquer la méthode de Cholesky pour le résoudre. Il se trouve malheureusement que la matrice AT A peut être très mal
conditionnée. En effet, il est très facile de voir que cond(AT A) = cond(A)2 . Dans ce cas, les méthodes usuelles
de résolution de système sont très instables numériquement (voir cours d’algèbre linéaire 3, il est préférable
de les éviter. Heureusement, il est possible d’appliquer une méthode plus géométrique, la méthode QR. Nous
ne détaillerons pas ici cette méthode, vue en algèbre linéaire 3, basée sur le procédé d’orthonormalisation de
Schmidt. Enonçons simplement la propriété
Proposition 6 Toute matrice A de taille n × p se décompose en un produit A = QR, où Q est une matrice
orthogonale n × n QT Q = In et R une matrice triangulaire supérieure de taille n × p.
1
A l’aide d’une telle décomposition, la matrice
AT A = (QR)T QR = RT QT QR = RT R
Mais
RT R = R1T R1
où R = ( RO1 ), avec R1 matrice triangulaire supérieure p × p à coefficients diagonaux strictement positifs. On
obtient directement la factorisation de Cholesky AT A = R1T R1 . Le système (5.1) s’écrit simplement
R1T R1 x = AT b
et se résout par deux systèmes triangulaires : R1T y = AT b puis R1 x = y.
1. pour des exemples et demo voir [4]
85
Bibliographie
[1] Gilbert Strang, Introduction to applied mathematics, Wellesley-Cambridge press, 1986.
[2] H.R. Schwarz, Numerical Analysis, A comprehensive introduction, Wiley, 1989.
[3] Cleve Moler, Numerical computing with Matlab, http://www.mathworks.com/moler/
[4] Le Mathematica computational knowledge engine http://www.wolframalpha.com/
86
5.4
TD et TP des chapitres 3, 4, 5
TD n0 3 : Interpolation
Exercice 1
Démontrer la formule barycentrique pour le polynôme d’interpolation de degré n prenant les valeurs yi
aux xi , i = 0..n :
Montrer que
Soit wi = Q
1
wi
.
et µi (t) =
t − xi
j6=i (xi − xj )
Pn
yi µi (t)
Pn (t) = Pi=0
.
n
i=0 µi (t)
P
Montrer de plus que ni=0 wi = 0.
Indication. Exprimer les polynomes de Lagrange à l’aide de µi (x) et ϕ(x) = (x − x0 )(x − x1 )...(x − xn ).
Utiliser la formule d’interpolation de Lagrange pour la fonction f (x) ≡ 1. Enfin identifier le coefficient
dominant de l’expression obtenue.
Exercice 2
Démontrer la formule de Newton :
Pn (x) = f [x0 ] + f [x0 , x1 ](x − x0 ) + ... + f [x0 , x1 , ..., xn ](x − x0 )(x − x1 )...(x − xn−1 ),
où les f [x0 , x1 , ..., xk ] appelées différences divisées sont définies par récurrence :
f [x1 ]−f [x0 ]
x1 −x0
f [x1 ,x2 ,...,xk ]−f [x0 ,x1 ,...,xk−1]
xk −x0
f [x0 ] := f (x0 ), f [x0 , x1 ] :=
f [x0 , x1 , ..., xk ] :=
.
Indication. Soient x0 < x1 < ... < xn des réels et f une fonctions définie sur [x0 , xn ]. Notons Pi0 ,i1 ,...,ik le
polynôme d’interpolation de f aux points xi0 , xi1 , ..., xik . Montrer (sans aucun calcul !) que :
P0,1,...,n (x) =
(x − x0 )P1,2,...,n (x) − (x − xn )P0,1,...,n−1 (x)
xn − x0
Démontrer ensuite la formule de Newton par récurrence sur n.
Exercice 3
Soit la matrice (n − 1) × (n − 1)

2(h0 + h1 )
h1
0
···
0

..
.
.

.
h1
2(h1 + h2 ) h2
.


.
.
..
..
A=
0
h2
0


..
..
..
..

.
.
.
hn−2
.
0
···
0 hn−2 2(hn−2 + hn−1 )









D’après le cours, la spline naturelle qui interpole une fonction en n + 1 points x0 < x1 < ... < xn vérifie
le système linéaire Ay′′ = b où hi = xi+1 − xi .
P
a) Vérifier que Aest symétrique tridiagonale et à diagonale dominante : |ai,i | > j6=i |ai,j |.
b) Montrer que la plus grande (resp. petite) valeurs propres de A vérifie
λmax ≤ maxi {2h0 + 3h1 , 3(hi + hi+1 ), 3hn−2 + 2hn−1 }
λmin ≥ mini {2h0 + h1 , hi + hi+1 , hn−2 + 2hn−1 }
c) Montrer que A est bien conditionné (et inversible !) :
κ(A) =
max hi
λmax
≤ C te
λmin
min hi
87
Indication (pour l’ensemble). Utiliser le théorème de Gershgorin : Pour toute valeur propre, il existe un
i tel que
|λ − ai,i | ≤
qui se démontre ainsi :
X
j6=i
|ai,j |
Ax = λx ⇒ ∀i, (λ − ai,i )xi =
X
ai,j xj
j6=i
En choisissant i tel que |xi | est de module maximum, on obtient
|λ − ai,i | ≤
X
j6=i
|ai,j |
88
|xj | X
≤
|ai,j |
|xi |
j6=i
TD n0 4 : Quadrature
Exercice 1
Formule de Newton-Cotes. Soit a ≤ x0 < x1 < ... < xn ≤ b. Soit (Lj )j les polynômes
de Lagrange (voir
P
chapitre précédent) correspondant à cette subdivision. Montrer que Qn (f ) = (b − a) j ωj f (xj ) où les poids
sont donnés par :
Rb
a
ωi =
Lj (x)dx
,
(b − a)
est l’unique règle de quadrature exacte pour les polynômes de degrés inférieurs ou égaux à n.
Indication : Écrire pour f polynôme de degré ≤ n
f=
X
f (xj )Lj
j
et intégrer cette relation.
Exercice 2
Soit f continue sur [−1, 1]. On cherche une formule de quadrature à deux noeuds.
1. Quelle symétrie doivent vérifier les noeuds et les poids pour que la quadrature soit invariante par la
symétrie t → −t ?
Indication. La formule de quadrature a la forme générale
Q(f ) = 2.{pf (α) + qf (β)}
avec p, q > 0, −1 ≤ α, β ≤ 1 et p + q = 1. La symétrie de la formule impose
α = −β et p = q = 1/2.
R1
2. Soit α ∈ [−1, 1]. Montrer que Q(f ) = f (−α) + f (α) est égale à −1 f (t)dt = I(f ) pour f polynôme de
degré inférieur ou égal à 1.
Indication. Par linéarité, il suffit de vérifier cela pour f = 1, t. Pour f = 1, c’est la somme des poids
1/2 + 1/2 = 1 qui donne le résultat. Pour f (t) = t, l’imparité et la symétrie donnent le même résultat nul.
3. Déterminer α tel que la quadrature soit exacte pour f polynôme de degré inférieur ou égal à 3.
Indication. Par linéarité, il suffit de considérer f = t2 , t3 . Pour t3 , l’imparité et la symétrie donnent le
même résultat nul. Pour t2 , on obtient α = √13 (on retrouve la quadrature de Gauss à deux points).
4. Peut-on trouver une quadrature à deux points exacte pour les polynômes de degré 4.
Indication. Prendre f (t) = (t − α)2 (t − β)2 .
Exercice facultatif.
On rappelle la formule de Newton :
Pn (x) = f [x0 ] + f [x0 , x1 ](x − x0 ) + ... + f [x0 , x1 , ..., xn ](x − x0 )(x − x1 )...(x − xn−1 ),
où les f [x0 , x1 , ..., xk ] sont les différences divisées.
1. Montrer (sans aucun calcul) que
f (x) = Pn (x) + f [x0 , x1 , ..., xn , x](x − x0 )(x − xn−1 )...(x − xn ) .
Indication. Poser xn+1 = x.
2 . En déduire que
Z
a
b
f (x)dx =
Z
b
Pn (x)dx +
a
Z
b
ǫ(x)dx
a
où ǫ(x) = f [x0 , x1 , ..., xn , x](x − x0 )(x − xn−1 )...(x − xn ).
On peut, à partir de cette expression trouver une formule d’erreur générale, lorsque les points sont
régulièrement espacés : xj := a + j b−a
n . Il y a une difficulté à surmonter cependant : la fonction (x − x0 )(x −
x1 )...(x − xn ) n’est pas de signe constant.
89
TD n0 5 : Méthode des moindres carrés
Exercice 1
Droite de régression. Soit des mesures y1 , y2 , ... yn correspondants
P à des points distincts t1 , t2 , ..., tn .
Montrer que la droite y = at + b qui minimise l’écart quadratique i (yi − (ati + b))2 est donnée par le
système linéaire :
P P
n
t
b
y
i
i
P
P 2 .
= P
ti
ti
a
ti y i
En déduire que la droite des moindres carrées passe par l’isobarycentre du nuage de points :
y = at + b
où z désigne
P
zi
n
et que
a=
y.t − yt
t2 − (t)2
Application numérique :
Un barreau est soumis à des forces de traction d’étirement F de 1, 2 et 4 tonnes. Les tailles mesurées L
sont de 5, 6 et 7 pieds. En supposant une loi de Hooke : L = b + aF , déterminer la longueur b au repos du
barreau.
Indication 1 : Soit


1 t1
 1 t2 


A= . . 
 .. .. 
1 tn
Écrire la forme normale du système
T
A A.
b
a
= AT y
Coefficient de corrélation linéaire : Lorsqu’on réalise la régression linéaire de données, on cherche la
projection orthogonale de y = (y1 , y2 , ..., yn )T sur le plan engendré par e = (1, 1, ..., 1)T et t = (t1 , t2 , ..., tn )T .
Comme y = at + b, si la régression était parfaite on aurait y − y = a(t − t) et donc le vecteur y − ye
serait colinéaire à t − te. En statistique, on mesure la qualité de la régression au moyen du coefficient de
corrélation linéaire :
ρ=
(y − ye)T (t − te)
ky − yek2 kt − tek2
qui est un nombre compris entre -1 et 1 (cosinus de l’angle entre y − ye et t − te). En remarquant que
(y − ye)T (t − te) = yT t −t yT e −y |{z}
eT t +y t |{z}
eT e = n(y.t − y t) et ky − yek22 = kyk22 − 2yeT y + (y)2 kek22 =
|{z} |{z}
2
n(y 2 − (y) ), kt −
ny.t
tek22 =
nt
ny
n
2
n(t2 − (t) ), Montrez que :
ρ= q
y.t − y t
q
.
2
y 2 − (y)2 t2 − (t)
Lorsque ρ est supérieur en valeur absolue à 0.90, on dit qu’il y a une forte corrélation entre les données
(y1 , y2 , ..., yn ) et les (t1 , t2 , ..., tn ). La régression est d’excellente qualité. Lorsque ce coefficient est inférieur en
valeur absolue à 0.60, le modèle linéaire y = at + b est discutable. Que vaut le coefficient de corrélation ici ?
Exercice 2 Une bactérie se reproduit à vitesse exponentielle. En supposant que le nombre de bactéries
y(t) présentes dans un milieu vérifie y(t) = a2t +b, déterminer a, b au mieux pour ajuster les données mesurées
suivantes : y = 1, 1, 3, 9 pour t = 0, 1, 2, 3. Modifier légèrement les données en prenant y = 1, 2, 4, 8. Que
constatez vous ? Expliquez.
90
TP No 3
ALGORITHME DE NEVILLE POUR L’INTERPOLATION POLYNOMIALE
On rappelle qu’étant donnés n + 1 points (distincts) de l’axe réel, x0 , x1 , ..., xn et une fonction (à valeurs
réelles ou complexes) définie en ces points, il existe un polynôme de degré au plus n et un seul Pn qui vérifie
Pn (xk ) = f (xk ) pour 0 ≤ k ≤ n, une des expressions de ce polynôme étant (formule de Lagrange) :
j=n
Y
Pn (x) = f (x0 )
j=0,j6=0
x − xj
+ ... + f (xn )
x0 − xj
j=n
Y
j=0,j6=n
x − xj
xn − xj
(5.3)
Ce polynôme est appelé polynôme d’interpolation de f aux points x0 , x1 , ..., xn et ce qui suit concerne
deux algorithmes de calcul de Pn (x).
1) Soit {x1 , x2 , ..., xn , ... } une suite de nombres réels distincts et f une fonction de R dans R. On note
Pi1 ,i2 ,...,in (t) le polynôme d’interpolation de f aux points {xi1 , xi2 , ..., xin }(donc de degré n − 1). Nous avons
montré dans le TD 3 la propriété suivante : si xj et xk sont deux points distincts pris dans la suite {x1 , x2 ,
..., xn , ... } et distincts de {xi1 , xi2 , ..., xin } alors :
Pi1 ,i2 ,...,in,j,k (t) =
(t − xk )Pi1 ,i2 ,...,in,j (t) − (t − xj )Pi1 ,i2 ,...,in,k (t)
.
xj − xk
(5.4)
Ainsi le polynôme d’interpolation de f aux points {xi1 , xi2 , ..., xin , xj , xk } s’obtient par une interpolation
linéaire des deux polynômes d’interpolation de f respectivement aux points {xi1 , xi2 , ..., xin , xj } et {xi1 ,
xi2 , ..., xin , xk }.
C’est le principe de l’algorithme de Neville qui consiste à remplir de proche en proche le tableau triangulaire suivant au moyen de la formule (5.4) :
x1
x2
..
.
xn
f (x1 )
f (x2 )
..
.
P1,2 (t)
..
.
(5.5)
..
.
f (xn ) Pn−1,n (t) · · ·
P1,2,...,n(t)
la k + 1ième colonne de ce tableau triangulaire pour k ≥ 2, étant :
0
..
.
0
P1,2,...,k (t)
P2,3,...,k+1 (t)
..
.
(5.6)
Pn−k+1,n−k+2,...,n(t)
Dessiner un organigramme de cet algorithme par exemple en respectant les indications suivantes :
– les données seront n, t et {xi , fi }1≤i≤n ;
– les calculs seront faits colonne par colonne en partant de la dernière ligne pour chaque colonne ;
– on économisera la place mémoire : pour calculer une colonne, il suffit de connaître la colonne précédente
et une fois calculés, les différents éléments de la nouvelle colonne viennent prendre les places des éléments
de la colonne précédente ;
(t−xk )f (xj )−(t−xj )f (xk )
sous la forme :
– on écrira la formule d’interpolation linéaire
xj −xk
t − xj
f (xj ) +
(f (xj ) − f (xk ))
(5.7)
xj − xk
enfin on pourra s’inspirer de la figure suivante :
91
données: n,t, x(i), f(i), i=1,n
Boucle de j=2,n
(sur les colonnes)
Boucle de i=n,j (en remontant)
(sur les lignes)
v(i)=f(i), i=1,n
k=i-j+1
v(i)=v(i)+ ... à compléter/(x(i)-x(k))(v(i)-v(i-1))
résultat=v(n)
2) On a également vu dans le TD 3 la formule suivante (pour t 6= xi pour tout i), dite formule
barycentrique, qui peut être avantageuse lorsqu’il faut calculer Pn en de nombreux points :
Pn (t) =
Pi=n
wi
i=0 f (xi ) t−xi
Pi=n wi
i=0 t−xi
, avec wi = Qj=n
1
j=0,j6=i (xi
− xj )
.
(5.8)
Donner un ordre de grandeur de la complexité de chaque algorithme (nombre d’opérations élémentaires
à effectuer) en fonction du nombre de points d’interpolations n. Réponse : O(n2 ) pour chacun d’eux.
QUESTIONS DE PROGRAMMATION
3) Avec Fortran.
a) Calculez la valeur en x = 0.31415927 des polynômes d’interpolation des fonctions suivantes :
f (x) = cosh(x − 3) − ln(x),
(5.9)
f (x) = ln(x) + x2 (1 − ln(x)) − 0.8,
(5.10)
2
f (x) = (1 − 2x2 )e−x + 0.0005.
(5.11)
les points d’interpolation étant régulièrement répartis, allant de x = 0.1 à x = 1, et étant au nombre de 10,
20, 30, 40, 50, 60, ...
b) Trouvez des exemples où les méthodes de Neville et barycentriques donnent des résultats identiques,
mais très différents de f (x).
c) Les deux méthodes de Neville et barycentrique sont-elles comparables numériquement ? Donner leurs
(possibles) avantages et inconvénients respectifs.
4) Avec Maple.
Lancer le programme ’tp3-maple.mws’ qui donne une illustration de l’interpolation polynomiale.
Tester plusieurs exemples de fonctions, avec un nombre de points croissant.
Essayer de faire apparaître des phénomènes d’oscillations aux bords (de type phénomène de Runge, ou
d’erreurs d’arrondis.
FIN DES QUESTIONS OBLIGATOIRES.
5) Faire les annales. (Tracer les fonctions peut se reveler utile.)
92
TP No 4
EXTRAPOLATION À LA LIMITE DE RICHARDSON ET MÉTHODE DE
ROMBERG. Méthode de MonteCarlo.
1) Extrapolation à la limite de Richardson.
a) Soit ǫ → A(ǫ) une fonction numérique définie pour ǫ ≥ 0. En pratique, ǫ est un paramètre de
discrétisation strictement positif qui tend vers zéro et A(ǫ) n’est accessible que pour ǫ > 0. On suppose un
développement asymptotique de l’erreur de discrétisation c’est à dire, qu’il existe des constantes a0 . a1 , a2 ,
..., ak , telles que :
A(ǫ) = a0 + a1 ǫ + a2 ǫ2 + ... + ak ǫk + O(ǫk+1 ) pour ǫ > 0.
(5.12)
Evidemment A(ǫ) → a0 quand ǫ → 0. On veut simplement accélerer cette convergence. L’idée est simple :
On écrit
A(ǫ/2) = a0 + a1 ǫ/2 + a2 ǫ2 /4 + . . .
et on combine les deux approximations :
2 A(ǫ/2) − A(ǫ) = a0 + O(ǫ2 ).
Le terme en ǫ a disparu ! En combinant une approximation précise A(ǫ/2) et une approximation plus grossière
A(ǫ), on fabrique une approximation beaucoup plus précise encore, d’ordre supérieur. La combinaison est
une extrapolation car c’est un barycentre dont l’un des coefficients est négatif. La fonction 2 A(ǫ/2) − A(ǫ)
converge beaucoup plus vite vers a0 que A(ǫ/2).
Plus généralement, au lieu de remplacer ǫ par ǫ/2, on peut remplacer ǫ par r · ǫ pour r fixé avec 0 < r < 1
et réappliquer le même procédé de façon itérative :
On forme les suites Am,n , m ≥ 0, 0 ≤ n ≤ m définies par :
Am,0 = A(r m ǫ) pour m ≥ 0, Am,n+1 =
que l’on range dans le tableau triangulaire :
Am,n − r n+1 Am−1,n
, 0 ≤ n ≤ m − 1 pour m ≥ 1,
1 − r n+1
A0,0
A1,0 A1,1
A2,0 A2,1 A2,2
A3,0 A3,1 A3,2 A3,3
..
..
..
..
.
.
.
.
.
..
(5.13)
(5.14)
.
Montrer que :
Am,n = a0 +bn+1,n (r m ǫ)n+1 +bn+2,n (r m ǫ)n+2 +...+bk,n (r m ǫ)k +O(ǫk+1 ) pour 0 ≤ n ≤ min(m, k −1), (5.15)
et Am,k = a0 + O(ǫk+1 ),
avec pour n + 1 ≤ l ≤ k :
bl,n =
(
al si n = 0
(1−r 1−l )(1−r 2−l )...(1−r n−l )
(1−r)(1−r 2 )...(1−r n )
· al si non
(5.16)
(5.17)
Ainsi, si pour l < k la colonne d’indice l converge à la vitesse :Am,l = a0 + O(ǫl+1 ), on peut affirmer que
la colonne d’indice l + 1 converge plus vite en ce sens que Am,l+1 = a0 + O(ǫl+2 ),
Indications : Pour démontrer (5.15), (5.16), (5.17) on procède par récurrence sur n : si n = 0 (5.15) n’est
autre que (5.12), ensuite on utilise (5.13).
93
b) Compléter le sous-programme Fortran joint (appelé Richar) dans lequel le tableau (5.14) est calculé
ligne par ligne à partir de sa première colonne (constituée du vecteur s dans le code) ce qui est différent du cas
A
−r n+1 A
de l’algorithme de Neville du tp3, la formule (5.13) étant écrite sous la forme : Am,n+1 = m,n 1−rn+1m−1,n =
(r −n−1 −1+1)Am,n −Am−1,n
r −n−1 −1
= Am,n +
Am,n −Am,n
.
r −n−1 −1
2)Application à la formule des trapèzes (composée) : méthode de Romberg.
R x+h
a) La formule d’approximation des trapèzes (locale ou élémentaire) bien connue x f (t)dt ≃ h2 (f (x) +
f (x + h)) une fois appliquée sur chacun des intervalles [a + ih, a + (i + 1)h] où h = b−a
k , conduit à la formule
des trapèzes (composée) où on note xi = a + ih, i entier 0 ≤ i ≤ k :
Z
a
b
f (x) dx ≃ Tk (f ) ≡ h
1
1
f (x0 ) + f (x1 ) + ... + f (xk−1 ) + f (xk ) .
2
2
(5.18)
Introduisant la fonction ϕ(t) = f (a + th) où 0 ≤ t ≤ k on peut montrer à l’aide de la formule d’EulerMacLaurin que si f est 2n + 2 fois continûment dérivable :
Tk (f ) =
Z
b
f (x) dx + α2 h2 + α4 h4 + . . . + α2n h2n + O(h2n+2 ).
(5.19)
a
On est donc dans le cas où on peut appliquer la méthode d’extrapolation à la limite de Richardson avec
ǫ = h2 . Pour accélérer la convergence, on calcule l’approximation avec un pas h/2, autrement dit en doublant
le nombre de noeuds de la subdivision. Comme (h/2)2 = h2 /4, cela revient à multiplier ǫ par r = 1/4 et on
calcule des extrapolations successives par la méthode de Richardson. On parle alors de méthode de Romberg.
b) Compléter le sous-programme Fortran joint (appelé Romber) dans lequel on a choisi h0 = (b − a) et
′ ) avec
r = 1/4 car on calcule en fait les T2k−1 = s(k) et où on obtient T2N par la formule T2N = 21 (TN + SN
P
i=N
b−a
′ =h
SN
i=1 f (a + (i − 0.5)h)) et h = N .
QUESTIONS DE PROGRAMMATION
3) Usage de Fortran.
a) Donner les approximations des intégrales suivantes obtenus avec le programme Fortran tp4.f.
R1
4
2 dx
R0 π1+x
sin(x)
ii) 0 x dx
R1√
iii) 0 xdx
R1
iv) 0 e−x sin(cx)dx , pour c = 1, 10 100, 1000, 10000
i)
Discuter et expliquer les résultats obtenus, en particulier dans l’exemple iv). Donner la solution exacte.
b) Comment remédier aux erreurs numériques constatées ? (voir en particulier les annales)
4) Usage de Maple.
Calculer les valeurs approchées des intégrales ci-dessus avec Maple.
5) Méthode de Monte Carlo.
Le terme générique “méthode de Montecarlo” recouvre les algorithmes de calcul de quantité déterministes
(i.e. non aléatoire) par simulation d’échantillon pseudo-aléatoire. Le principe repose sur la loi des grands
94
nombres.
Donnons l’exemple de calcul d’intégrales par cette méthode.
Z b
f (x) g(x)dx
a
Lorsque g(x) ≥ 0 est la densité d’une loi, i.e. quand
Rb
a
g(x) dx = 1, l’intégrale n’est autre que l’espérance
Ef (X)
où X est une variable aléatoire de loi de densité g. Par exemple
uniforme sur [0, 1].
R1
0
f (x)dx = Ef (X) pour X v.a. de loi
Par la loi forte des grands nombres, si (X1 , X2 , . . . Xn ) désigne un échantillon de loi de densité g,
f (X1 ) + f (X2 ) + . . . f (Xn )
→ µ = Ef (X)
n
On approche donc
Z
a
b
f (x)g(x) dx ≈
f (X1 ) + f (X2 ) + . . . f (Xn )
.
n
On simule donc un échantillon de taille très grande
R 1 et on calcule une moyenne arithmétique. Le programme
scilab suivant réalise ceci pour le calcul ( !) de 0 x dx = 1/2.
function [y] = Montecarlo(n)
//simulation d’un n-echantillon et
//calcul de la moyenne arithmétique
y=zeros(1,n);z=zeros(1,n); //initialisation
x = grand(1,n,’unf’,0,1);//tirage aléatoire uniforme
for i=1:n
y(i) = mean(x(1:i));//calcul de la moyenne
end
clf();
plot(y);
xtitle("Montecarlo simulation");
endfunction
(Voir figure 5.3.)
Pour n = 10000, on trouve 0.5030378, soit deux décimales.
Programmer la méthode de Montecarlo en SCILAB (ou MATLAB ou OCTAVE ou Maple ou . . . ) et
tester la sur les intégrales i) à iv).
Indication : en SCILAB, l’instruction x = grand(1,n,’unf’,0,1); génère un échantillon de taille n de loi
uniforme sur [0, 1], c’est à dire un vecteur ligne de dim n dont chaque composante est tiré uniformément
dans l’intervalle [0, 1]. En MATLAB il faut utiliser l’instruction x = rand(n);
La convergence de ces méthode est très lente, la vitesse de convergence de la loi des grands nombres est en
√
O(1/ n), à cause du théorème central limite. En effet
σ
f (X1 ) + f (X2 ) + . . . f (Xn )
= µ + √ Zn
n
n
où Zn suit approximativement une loi N (0, 1) (loi normale standard.)
Cependant cette vitesse est la même quelle que soit la dimension d’espace. Cela rend la méthode de
MonteCarlo compétitive pour le calcul d’intégrales multiples en grande dimension d ≥ 4.
En effet en analyse numérique on montre que la méthode de quadrature de Simpson appliquée à un
intervalle de longueur h donne une erreur en O(h5 ). Pour un domaine [a, b]d , si on subdivise [a, b] en prenant
un pas h := (b − a)/n, on découpera le pavé [a, b]d en N := nd petits pavés et l’erreur totale sera de l’ordre
95
Montecarlo simulation
0.54
0.52
0.50
0.48
0.46
0.44
0.42
0.40
0.38
0.36
0.34
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
Figure 5.3 – La convergence de la loi des grands nombres
1
1
). Pour d = 3, cela donne 0( N 12/3 ), pour d = 4, cela fait
de nd × n15 donc en O(h5−d ) = O( n5−d
) = 0( N 5/d−1
1
0( N 1/4
), la méthode de Monte Carlo est meilleure.
A partir de d = 5 la méthode de MonteCarlo est la seule méthode utilisable. D’autre part, les formules
d’erreur dans les quadratures numériques exigent une régularité élevée de la fonction (f de classe C 4 (resp.
C 2 ) pour Simpson (resp trapèzes) alors que la méthode de MonteCarlo ne demande aucune régularité de
l’intégrand (mesurable borné suffit).
96
TP No 5
MÉTHODES DE QUADRATURES DE GAUSS
1) Formules de quadrature de Gauss.
a) Définition des formules de Gauss.
(n)
Étant donnés n + 1 réels distincts {xi }0≤i≤n de [a, b], on appellera formule de quadrature d’ordre n,
Rb
une approximation de l’intégrale définie a f (x)dx de la forme :
Z
b
f (x)dx =
a
i=n
X
(n)
(n)
wi f (xi ) + En (f ),
(5.20)
i=0
(n)
nombres (wi )0≤i≤n
p tel que En (xk ) = 0
où les
ne dépendent pas de la fonction continue f et En (f ) est l’erreur. Le plus grand
entier
pour tout 0 ≤ k ≤ p est appelé degré de précision de la formule de quadrature.
On a vu en cours et TD que si la précision p est supérieure ou égale à n on a nécessairement :


Z b
(n)
j=n
Y
x
−
x
(n)
j
 dx,

(5.21)
wi =
(n)
(n)
a
x
−
x
j=0, j6=i i
j
On sait aussi que la précision p est au plus égale à 2n + 1.
(n)
Si p = 2n + 1, montrer que les nombres {xi }0≤i≤n vérifient les conditions :


Z b j=n
Y
 (x − x(n) ) xk dx = 0, pour 0 ≤ k ≤ n.
j
a
(5.22)
j=0
La formule (5.20) est alors appelée formule de quadrature de Gauss. Si {pn }n≥0 est la suite des polynômes
Rb
orthogonaux sur [a, b] pour le produit scalaire < f, g >:= a f (x)g(x) dx (c’est à dire si les polynômes pn
Rb
(n)
sont de degré n et vérifient a pn (x)pm (x) dx = 0 si m 6= n), les nombres {xi }0≤i≤n sont ainsi les zéros de
pn+1 .
b) Propriétés et évaluation de l’erreur.
Montrer que si les conditions (5.22) sont satisfaites :
(n)
wi
=
1
(n)
(p′n+1 (xi ))2
Z
a
b
(pn+1 (x))2
(n)
(x − xi )2
dx.
(5.23)
En déduire que si [a, b] est borné, alors pour toute fonction continue f sur [a, b] :
(5.24)
lim En (f ) = 0.
n→∞
Indications : La formule (5.23) résulte de p = 2n + 1 et du fait que le polynôme
q(x) =
évalué en x :=
(n)
xj
vaut δij ≡
pn+1 (x)
(n)
(n)
p′n+1 (xi )(x − xi )
1 si j = i
0 sinon.
(n)
Pour obtenir la propriété (5.24) remarquer que wi > 0 et appliquer le théorème de Stone-Weierstrass
(toute fonction continue sur un segment est limite uniforme d’une suite de polynômes.)
Lorsque, de plus f est 2n + 2 fois continûment différentiable sur [a, b], on peut montrer (mais ce n’est pas
demandé) que :
f (2n+2) (ξ)
En (f ) =
(2n + 2)!
Z
b j=n
Y
(
a
j=0
(n)
(x − xj )2 ) dx où a ≤ ξ ≤ b.
97
(5.25)
(n)
(n)
2)Calcul des noeuds {xi }0≤i≤n et des poids {wi }0≤i≤n de la formule de Gauss-Legendre.
Selon le temps disponible on pourra étudier quelques propriétés des polynômes orthogonaux sur [−1, 1]
pour le produit scalaire défini plus haut. Ces polynômes sont appelés polynômes de Legendre. On définira
(n)
ensuite un algorithme élémentaire des calcul des noeuds {xi }0≤i≤n de la formule de quadrature de Gauss
suivante qu’on appelle formule de Gauss-Legendre :
Z
1
f (x)dx =
−1
i=n
X
(n)
(n)
(5.26)
wi f (xi ) + En (f ).
i=0
a) Quelques propriétés des polynômes de Legendre.
dn
2
n
Montrer que les polynômes pn (x) = 2n1n! dx
n ((x − 1) ) vérifient :
2
Z 1
2n+1 si m = n ,
pn (x)pm (x)dx =
0 si non
−1
(5.27)
npn (x) − (2n − 1)xpn (x) + (n − 1)pn−2 (x) = 0, n ≥ 2,
(5.28)
pn (1) = 1,
(5.29)
pn (−x) = (−1)n pn (x).
(5.30)
(1 − x2 )p′n (x) = −nxpn (x) + npn−1 (x),
(5.31)
Montrer également que :
p′n (1) =
(n)
et que les poids wi
n(n + 1)
,
2
(5.32)
((1 − x2 )p′n (x))′ + n(n + 1)pn (x) = 0,
(5.33)
de la formule (5.26) sont donnés par :
(n)
wi
=
2
(1 −
(n)
(n)
(xi )2 )(p′n+1 (xi ))2
(5.34)
,
(n)
où les {xi }0≤i≤n sont les zéros de pn+1 .
R1
dn ϕn (x)
dxn dx
m
d
2
avec ym (x) = dx
m ((x − 1))
R
1
et ϕn (x) = (x2 − 1)n . On trouve alors par des intégrations par parties successives −1 pn (x)pm (x)dx =
(
0 si m 6= n
R1
Rπ
Le nombre In = (−1)n −1 (x2 − 1)n dx = −2 π cos2n+1 θdθ, en posant x = sin θ. On
(2n)!
2
(2n n!)2 In si m = n
reconnaît la célèbre intégrale de Wallis qui se calcule par récurrence : en intégrant par parties, on montre
que (2n + 1)In = 2nIn−1 et le résultat en découle.
(2n)!
dn
n
n−1 + ...
2
n
La formule de récurrence (5.28) se déduit de pn (x) = 2n1n! dx
n ((x − 1) ) = 2n (n!)2 x + 0x
Indications : Pour démontrer (5.27), on pourra calculer
−1 ym (x)
n
n
1 d
d
2
n
n
Pour prouver (5.29) appliquer la formule de Leibniz à pn (x) = 2n1n! dx
n ((x − 1) ) = 2n n! dxn ((x − 1) (x +
1)n ) (procéder de façon analogue pour (5.32)).
La propriété (5.30) se déduit directement du développement de pn en puissances de x.
Pour obtenir (5.31) on pourra montrer que (1 − x2 )p′n (x) + nxpn (x) est un polynôme de degré n − 1
orthogonal aux pk , k < n − 1 et comparer les coefficients de xn−1 dans (1 − x2 )p′n (x) + nxpn (x) et pn−1 .
Pour obtenir la célèbre (voir le Laplacien en coordonnées sphériques) équation différentielle (5.33), on
remarquera que ((1 − x2 )p′n (x))′ est un polynôme de degré n et on montrera qu’il est orthogonal aux pk pour
k < n.
98
(n)
b) Définition d’un algorithme (assez rudimentaire) de calcul des noeuds xi .
(n)
(n)
(n)
Soient 1 > x0 >x1 >... xn >−1 les zéros du polynôme de Legendre de degré n+1 pn+1 . Montrer que la
(n)
méthode de Newton appliquée à la résolution de pn+1 (x) = 0 avec l’approximation initiale x0,0 = 1 converge
(n)
(n)
(n)
(n)
vers x0 (ce n’est qu’une question de convexité). De même si x0 , x1 , ..., xm sont les m + 1 (< n + 1)
premières racines de pn+1 , montrer que la méthode de Newton appliquée à la résolution de qn,m (x) = 0 avec
(n)
(n)
(n)
l’approximation initiale xm+1,0 = xm converge vers xm+1 si :
pn+1 (x)
.
qn,m(x) = Q
(n)
i=m
(x
−
x
)
i=0
i
(5.35)
QUESTIONS DE PROGRAMMATION OBLIGATOIRES
3) Manipulations en Fortran.
Donner les approximations calculées par tp5.f pour les intégrales suivantes :
R1 4
i) 0 1+x
2 dx
R π sin(x)
ii) 0 x dx
R1√
iii) 0 xdx
R1
iv) 0 e−x sin(cx)dx, pour c = 1, 10, 100, 1000, 10000
Discuter et expliquer les résultats obtenus.
Comparer avec le TP4.
FIN DES QUESTIONS OBLIGATOIRES.
B) DES MÉTHODES ADAPTATIVES FONDÉES SUR LES FORMULES DE GAUSS. et
COMPLÉMENTS.
Il est possible de construire des formules de quadrature de degré maximal, certains noeuds étant imposés.
On connait les formules de Gauss-Radau (−1 imposé comme noeud sur [−1, 1]), les formules de GaussLobatto (−1 et 1 imposés comme noeuds sur [−1, 1]) et les formules de Gauss-Kronrod (méthode adaptative
où l’on double le nombre de noeuds à chaque itération en réutilisant les noeuds précédents). On peut ainsi
construire de nouvelles méthodes adaptatives assez performantes (voir le sous programme Q1DA joint à
l’énoncé). Enfin il existe des méthodes pour évaluer des intégrales comportant des singularités ou oscillantes
(voir la bibliothèques QUADPACK contenu dans la bibliothèque SLATEC). On a joint le sous programme
QAWO pour calculer des intégrales oscillantes.
99
TP No 6
AJUSTEMENT AUX MOINDRES CARRÉS ET POLYNÔMES ORTHOGONAUX.
Dans la suite les données sont : n réels distincts xi , 1 ≤ i ≤ n, n réels fi , 1 ≤ i ≤ n qui sont les valeurs
approchées (mesurées) d’une fonction f aux points xi , n coefficients réels wi strictement positifs et un entier
m < n − 1. L’objet de ce qui suit est le calcul d’un polynôme :
p(x) = a0 + a1 x + . . . + am xm ,
(5.36)
qui minimise l’écart quadratique pondéré :
δ2m
=
n
X
i=1
wi (p(xi ) − fi )2 .
(5.37)
Les coefficients wi servent ainsi à pondérer l’importance des erreurs (p(xi ) − fi )2 .
Sur Rn on introduit la norme et le produit scalaire suivants où u = (u1 , . . . , un )T , v = (v1 , . . . vn )T :
v
u n
n
X
uX
2
t
wi ui vi ,
(5.38)
kuk2w =
wi ui , (u, v)2w =
i=1
i=1
si bien qu’en notant p = (p(x1 ), . . . , p(xn ))T pour un polynôme p de la forme (5.36) et f = (f1 , . . . , fn )T , le
problème revient à :
minimiser kf − pk2w lorsque p est de la forme (5.36)
(5.39)
ou encore à projeter f sur l’espace vectoriel parcouru par le vecteur p lorsque p est un polynôme de degré
inférieur ou égal à m.
1) La théorie mathématique.
On a montré en cours qu’un tel polynôme existe, est unique, le vecteur (de Rm+1 ) de ses coefficients a =
(a0 , . . . , am )T pouvant être obtenu par résolution du système linéaire carré inversible :
A⊤ WAa = A⊤ Wf ,
(5.40)
où A est la matrice n × (m + 1) :
et W la matrice n × n diagonale :
A = (xji )1≤i≤n,0≤j≤m,
(5.41)
W = diag1≤i≤n (wi ).
(5.42)
Il se trouve qu’en général (5.40) est un système linéaire très mal conditionné ce qui peut le rendre inutilisable.
La question qui suit propose une méthode de calcul qui n’a pas cet inconvénient.
2) Le complément mathématique conduisant au remède numérique.
La suite {1, x, x2 , ..., xm } constitue une base de l’espace vectoriel réel des polynômes réels de degré au plus
m. Sur cet espace, la forme bilinéaire symétrique qui à deux polynômes de degrés auPplus m p(x) = a0 +
i=n
a1 x + . . . + am xm et q(x) = b0 + b1 x + . . . + bm xm associe le réel ((p, q))w = (p, q)2w := i=1
wi p(xi )q(xi ))est
un produit scalaire.
En effet ((p, p))w ≥ 0 pour tout polynôme p et ((p, p))w = 0 ⇒ p = 0 car p admet plus de racines que son
degré.
On peut donc orthogonaliser cette suite pour ce produit scalaire par exemple par le procédé de GramSchmidt. On définit ainsi une suite de polynômes (orthogonaux pour ((., .))w ) {pj }0≤j≤m définis par :
deg(pj ) = j (0 ≤ j ≤ m) et
n
X
i=1
wi pj (xi )pk (xi ) = 0 si j 6= k.
(5.43)
a) Montrer que ces polynômes (qu’on prendra unitaires) peuvent être calculés par la relation de récurrence :
p−1 = 0, p0 = 1, pj+1 (x) = (x − αj+1 )pj (x) − βj pj−1 (x), 0 ≤ j ≤ m − 1,
(5.44)
100
avec :
βj =
Pn
w x p (xi )pj (xi )
i=1
Pni i j−1
,
2
i=1 wi pj−1 (xi )
Pn
i=1
αj+1 = Pn
wi xi p2j (xi )
2
i=1 wi pj (xi )
.
(5.45)
Qu’est-ce qui fait qu’il n’est pas possible de continuer le calcul pour j > n ?
Indications : Pour obtenir (5.44) et (5.45) on remarquera que xpj étant de degré j +1, est une combinaison
linéaire de p0 , p1 , ..., pj+1 et pour démontrer que les coefficients des pk pour k < j − 1 de cette combinaison
linéaire sont nuls, on remarquera ((xpj , pk ))w = ((pj , xpk ))w et que par définition pj est orthogonal à tous
les polynômes de degré < j.
b) Montrer aussi que le polynôme p cherché est donné par :
p(x) =
m
X
bj pj (x),
(5.46)
j=0
avec :
Pn
wi fi pj (xi )
bj = Pi=1
.
n
2
i=1 wi pj (xi )
(5.47)
3) QUESTION DE PROGRAMMATION FACULTATIVE
a) Ecrire un sous programme FORTRAN qui réalise cet algorithme, les données étant m, n, les xi , fi , wi et
les résultats αj , βj , bj .
On pourra par exemple compléter le sous programme Calpol du programme joint à l’énoncé.
b) Montrer que la valeur en x de p vaut q0 (x) si les quantités qk (x) sont données par la relation de récurrence
(analogue du schéma de Hörner) :
qm+2 = qm+1 = 0, qk (x) = bk + (x − αk+1 )qk+1 (x) − βk+1 qk+2 (x), k = m, . . . , 0.
(5.48)
Indications : Tirer bj de (5.48) et le porter dans (5.46).
Un petit complément : Le schéma de Hörner pour le calcul de p(x) = a0 +a1 x+. . .+am xm lorsque les données
sont a0 , a1 , . . . am consiste à remarquer que p(x) = (...(((am x + am−1 )x + am−2 )x + am−3 )x + ...)x + a0 et
conduit ainsi à l’algorithme :
p := 0, FOR k := m DOWNTO 0 DO p := p ∗ x + am ;
QUESTIONS DE PROGRAMMATION OBLIGATOIRES
4) Manipulation à partir du code Fortran ’ tp6.f ’.
a) Exécuter le programme ’ tp6.f ’ avec les données suivantes (contenues dans le fichier
’donnees.dat’).
n=9 , m=5
x(i) , f(i) , w(i)
0.1 5.1234 1.0
0.2 5.3057 1.0
0.3 5.5687 1.0
0.4 5.9378 1.0
0.5 6.4370 1.0
0.6 7.0978 1.0
0.7 7.9493 1.0
0.8 9.0253 1.0
0.9 10.3627 1.0
Ce programme calcule les polynômes d’approximation (de degrés croissants =0,1,2,3,4,5)
de cet ensemble de 9 points du plan, avec leur pondérations respectives.
Il affiche en particulier les valeurs des écarts quadratiques correspondants.
101
b) Tracer les 9 points ainsi que les graphes des 6 polynômes en tapant successivement :
> split -501 resultats.dat
(fabrique les fichiers ’xaa’, ’xab’, ... en scindant le fichier
’resultats.dat’, créé par le programme. Ils contiennent les polynômes)
> gnuplot (lance le logiciel de traçage de courbes ’gnuplot’)
> plot ’donnees.dat’ with points, ’xaa’ with lines, ’xab’ with lines , ’xac’ with lines, ’xad’
with lines, ’xae’ with lines , ’xaf ’ with lines (effectue le traçage DANS le logiciel ’gnuplot’)
> quit
c) Recommencez l’exercice en faisant varier l’ordonnée et le poids de certains points. Analysez, commentez ...
d) Faire l’exercice de Janvier 2001.
5) Manipulation avec Maple.
Maple peut fournir l’expression exacte des polynômes d’approximation (et aussi les écarts
quadratiques).
Pour les visualiser lancer Maple et ouvrir le fichier ’tp6-maple.mws’.
Consulter l’aide de la fonction utilisée pour plus d’informations.
FIN DES QUESTIONS OBLIGATOIRES
6) Manipulation avec Scilab et Octave .
Le programme Scilab nommé ’tp6-scilab.sci’ et présent dans le répertoire TP6 calcule également les
valeurs des écarts quadratiques.
Le programme Octave nommé ’tp6-octave.m’ (et présent dans le répertoire TP6) calcule les valeurs des
écarts quadratiques, le conditionnement de la matrice AT W A , ainsi que les coefficients ai des polynômes.
Si vous souhaitez lancer ces programmes, reportez-vous aux indications contenues dans le fichier d’archive
des listings : ’listings_programmes.txt’ (ouvrez-le avec ’emacs’ et procédez à des copier/coller avec la souris).
102
Chapitre 6
Résolution de systèmes d’équations
différentielles ordinaires (problèmes de
Cauchy)
Ce chapitre est une introduction aux méthodes numériques de résolution des équations différentielles
ordinaires et nous allons traiter successivement :
– quelques rappels ou compléments de théories mathématiques classiques ;
– une introduction aux méthodes numériques de résolution des problèmes de conditions initiales (problème de Cauchy) pour les équations différentielles ordinaires où on donnera des notions concernant
les méthodes à un pas, les méthodes multipas et les problèmes raides.
Ces quelques lignes ne sont qu’une introduction qui a été conçue à partir des ouvrages suivants dont la lecture
au moins partielle, si un approfondissement du sujet vous intéresse, est fortement recommandée.
J.C. Butcher, 2008, Numerical methods for ordinary differential equations : John Wiley & Sons, Chichester, England.
M. Crouzeix, A.L. Mignot, 1984, Analyse numérique des équations différentielles : Masson, Paris.
M. Crouzeix, A.L. Mignot, 1986, Exercice d’analyse numérique des équations différentielles : Masson,
Paris.
J.P. Demailly, 1996, Analyse numérique et équations différentielles : EDP Sciences, Grenoble.
C.W. Gear, 1971, Numerical initial value problems in ordinary differential equations : Prentice-Hall Inc.,
Englewood Cliff, N.J.
E. Hairer, S.P. Nørsett, G. Wanner,1993, Solving ordinary differential equations I. Nonstiff problems :
Springer-Verlag, Berlin.
E. Hairer, G. Wanner, 1996, Solving ordinary differential equations II : Stiff and Differential-Algebraic
problems : Springer-Verlag, Berlin.
L.F. Shampine, 1994, Numerical solution of ordinary differential equations : chapman & Hall, New York.
M. Schatzman, 1991, Analyse numérique : Cours et exercices pour la licence : Inter Édition, Paris.
Les documents suivants, en ligne sur internet, sont particulièrement recommandés. Le cours de G. Wanner
http://www.unige.ch/˜wanner/Numi.html ainsi que celui de E. Hairer http://www.unige.ch/˜hairer/
6.1
Le problème de Cauchy pour les systèmes d’équations différentielles
ordinaires
Étant donnés une fonction f : [a, b] × Rm → Rm , un réel t0 ∈ [a, b] où les réels a, b vérifient a < b et en
pratique t0 est une des extrémités de [a, b], et un vecteur y0 ∈ Rm , par problème de Cauchy pour le système
d’équations 1 différentielles y′ (t) = f (t, y(t)), on entend la recherche d’une fonction y de [a, b] dans Rm telle
que :
y′ (t) = f (t, y(t)) pour t ∈ [a, b] y(t0 ) = y0 ,
1. Si f ne dépend pas de t on parle de système autonome.
103
(6.1)
où y′ (t) = limh→0, t+h∈[a,b] y(t+h)−y(t)
est la dérivée en t de la fonction vectorielle y.
h
Le théorème de Cauchy-Lipschitz énonce que si f est une fonction continue de [a, b] × Rm dans
Rm telle qu’il existe une norme sur Rm k.k et une constante L > 0 pour lesquelles (on dit alors que f est
Lipschitzienne en y de constante de Lipschitz L) :
kf (t, y(2) ) − f (t, y(1) )k ≤ Lky(2) − y(1) k, pour tout (t, y(1) , y(2) ) ∈ [a, b] × Rm × Rm ,
(6.2)
alors (6.1) a une solution et une seule t ∈ [a, b] → y(t) ∈ Rm continûment différentiable.
Preuve. Voici une démonstration dans le cas où t0 = a (il n’est pas difficile de la modifier pour l’étendre
au cas t0 = b et ensuite de traiter le cas général). Les conditions (6.1) sont équivalentes à :
Z t
y(t) = y0 +
f (s, y(s))ds,
(6.3)
t0
équation fonctionnelle à laquelle on peut appliquer la méthode des approximations successives qui engendre
une suite de fonctions de [a, b] dans Rm , t → y(k) (t) définies par :
Z t
(0)
(k+1)
y (t) = y0 , y
(t) = y0 +
f (s, y(k) (s))ds, k ≥ 0
(6.4)
t0
Pour obtenir le résultat il suffit donc d’établirque dans une espace
R t fonctionnel complet convenable X, l’application 2 Φ : y ∈ X → Φ(y) : t ∈ [a = t0 , b] → y0 + t0 f (s, y(s))ds est contractante donc a un
unique point fixe. On choisit alors l’espace X des fonctions continues de [a, b] dans Rm muni de la norme
kykX = maxt∈[a=t0 ,b] e−k(t−a) ky(t)k :
X = {y ∈ C([a, b]; Rm ); kykX =
max e−k(t−a) ky(t)k};
t∈[a=t0 ,b]
cet espace vectoriel normé est complet et on a :
Rt
kΦ(y(2) ) − Φ(y(1) )kX = maxt∈[a=t0 ,b] e−k(t−t0 ) k t0 (f (s, y(2) (s)) − f (s, y(1) (s)))dsk
Rt
≤ maxt∈[a=t0 ,b] e−k(t−t0 ) t0 kf (s, y(2) (s)) − f (s, y(1) (s))kds
Rt
≤ maxt∈[a=t0 ,b] e−k(t−t0 ) t0
L
ky(2) (s) − y(1) (s)kds
|{z}
≤ maxt∈[a=t0 ,b]
e−k(t−t0 )
Lek(s−t0 ) e−k(s−t0 )
′
k(s−t0 )
max e−k(s −t0 ) ky(2) (s′ ) −
t0 Le
′
s ∈[a=t0 ,b]
Rt
k(t−t )−1
{z
|
ky(2) −y(1) kX
= L maxt∈[a=t0 ,b] e−k(t−t0 ) e k 0 ky(2) − y(1) kX
= Lk (1 − e−k(b−a) )ky(2) − y(1) kX < Lk (1 − e−k(b−a) )ky(2) − y(1) kX
y(1) (s′ ))k ds
}
et en choisissant k > L on a bien une application contractante.
Remarques ou compléments.
i) Il y a un théorème de Cauchy-Peano 3 qui donne l’existence dès que f est continue mais, sans conditions
supplémentaires, il peut ne pas y avoir unicité. Le cas y ′ (t) = 2|y|1/2 (1+y) pour
t ≥ 0, y(0) = 0 est un premier
0 pour t ∈ [0, a]
exemple ; y(t) = 0 est solution sur [0, +∞[, mais quel que soit a ≥ 0, ya (t) =
est
tan2 (t − a) pour t ∈ [a, a + π2 [
encore une solution dont le domaine d’existence est [0, a + π2 [. Un cas plus élémentaire est proposé en exercice
de TD.
La formulation précédente du théorème de Cauchy Lipschitz est assez restrictive ; avec le même schéma
de démonstration, on peut établir un résultat d’existence et d’unicité locale en changeant “pour tout
(t, y(1) , y(2) ) ∈ [a, b] × Rm × Rm ” dans l’hypothèse (6.2) en “pour tout (t, y(1) , y(2) ) ∈ [a, b] × O × O” où
O est un ouvert de Rm , f étant une application continue de [a, b] × O dans O. Dans ce cas plus général mais
quand même éclairant, le domaine d’existence n’est alors pas forcément R tout entier ou l’intervalle I sur
2. Ce langage fonctionnel est tel que par y on entend la fonction t ∈ [a, b] → y(t) ∈ Rm .
3. La démonstration de ce théorème n’est pas au programme de L3 parce qu’elle fait appel au théorème d’Ascoli qui donne
un critère pour savoir si un ensemble de fonctions continues sur un compact est compact, si bien qu’on peut en extraire une
sous suite qui converge.
104
lequel on pose le problème comme le montre l’exemple précédent ou encore le problème y ′ (t) = 2ty(t)2 pour
1
t ∈ R, y(0) = 1 dont la seule solution est y(t) = 1−t
2 et n’est définie que pour t ∈] − 1, 1[. Il convient, dans
ce cadre général, d’introduire la notion de solution maximale (les exemples cités sont tous de telles solutions
maximales).
ii) Les techniques utilisables pour les équations différentielles intégrables “à la main” sont importantes
et on peut en trouver par exemple en manipulant le logiciel maple (Bernoulli, Clairault, linéaire, variable
séparable ...) ; voir aussi le début du livre de E. Hairer, S.P. Nørsett, G. Wanner (1993). Mais ce sont des cas
particuliers très rares. Dans la réalité, la plupart du temps on ne sait pas intégrer exactement une équation
différentielle.
iii) Une équation différentielle d’ordre p > 1 est de la forme :
dp−1 y
dp y
′
(t)
=
f
(t,
y(t),
y
(t),
...,
(t))
(6.5)
dtp
dtp−1
et le problème de Cauchy correspondant consiste à calculer la fonction t → y(t) vérifiant en plus des conditions
p−1
initiales “y(t0 ), y ′ (t0 ), ..., ddtp−1y (t0 ) données”. Il est important de comprendre, aussi bien sur le plan formel
p−1
ou théorique que pratique 4 qu’une telle équation se ramène, en posant z(t) = (y(t), y ′ (t), ..., ddtp−1y (t))T ∈ Rp
au système différentiel du premier ordre :


z2 (t)


..


.
(6.6)
z′ (t) = f (t, z(t)) avec f (t, z(t)) = 



zp (t)
f (z1 (t), z2 (t), .., zp (t))
0
j−1
où, bien sûr, zj (t) = ddtj−1y pour j = 1, ..., p (par convention ddt0y = y).
iv) Une équation différentielle s’interprète géométriquement comme la donnée d’un champ de vecteurs.
La figure 6.1 correspond à l’exemple simple de l’équation y ′ = y. On a tracé le champ de vecteur (1, y) :
A chaque point (t, y), on associe le vecteur (1, y). Les solutions de l’équation différentielle sont les courbes
t 7→ (t, y(t)) telles que le vecteur tangent (1, y ′ (t)) est égal au champ de vecteur (1, y). Cette interprétation
est très fructueuse et permet de visualiser l’allure des solutions, même si on ne sait pas intégrer l’équation
différentielle.
courbes integrales et champs de vecteur de dy/dt =y
6
4
y
2
0
−2
−4
−6
−10
−5
0
5
10
15
t
Figure 6.1 – Champ de vecteurs associé à l’équation différentielle y ′ = y.
4. parce que, bien qu’il existe des schémas numériques adaptés aux équations d’ordre 2 par exemple, la majorité des codes,
en particulier les codes MATLAB, sont écrits pour des systèmes différentiels d’ordre 1.
105
Sur le site demonstrations.wolfram.com on trouve des documents cdf 5 très instructifs permettant de
visualiser divers champs de vecteurs associés à des EDO (Cf SlopeFields.cdf).
Ci dessous sur la figure 6.1 une copie d’écran où l’on voit le champ de vecteur associé à l’EDO y ′ = t2 · y
ainsi qu’une courbe intégrale, solution d’un problème de Cauchy particulier.
Slope Fields
fHx,yL =
x2 y
slope field for y£ = x2 y
x axis values:
xmin
-3
xmax
3
3
y axis values:
ymin
-4.
ymax
3.67
2
1
number of sample points:
x axis
17
y axis
14
-3
-2
-1
1
2
3
-1
display points
-2
show exact solution
initial x value
0.2
initial y value
1
-3
-4
This Demonstration generates a slope field for a number of differential equations. You have
the option to plot a particular solution passing through one point. You can control the x and y
axes as well as the number of segments plotted. You can display the midpoints of the
segments.
THINGS TO TRY
Resize Images ‰ Slider Zoom ‰ Automatic Animation
RELATED LINKS
Slope Field (Wolfram MathWorld)
Vector Field (Wolfram MathWorld)
PERMANENT CITATION
"Slope Fields" from the Wolfram Demonstrations Project
Figure 6.2 – champ de vecteurs associé à y ′ = t2 y.
5. Wolfram computable document format : ce sont des fichiers pdf interactifs où l’on peut changer des données grâce à des
menus.
106
6.2
Introduction aux méthodes numériques de résolution des problèmes
de conditions initiales (problème de Cauchy) pour les équations différentielles ordinaires
On considère donc le problème de Cauchy pour une équation différentielle ordinaire, qui consiste à calculer
une fonction t ∈ [a, b] → y(t) ∈ Rm telle que :
y′ (t) = f (t, y(t)) pour t ∈ [a, b], y(t0 ) = y0 ,
(6.7)
kf (t, y(1) ) − f (t, y(2) )k ≤ Lky(1) − y(2) k pour tout (t, y(1) , y(2) ) ∈ [a, b]×Rm × Rm ,
(6.8)
où y′ (t) = dy
dt (t) désigne la dérivée de y par rapport à t au point (ou à l’instant) t et la fonction f : (t, y) ∈
R × Rm → f (t, y) ∈ Rm ainsi que le réel t0 et le vecteur y0 ∈ Rm sont donnés. On suppose aussi que f est
continue de [a, b] × Rm dans Rm et vérifie la condition de Lipschitz “en y” :
pour une norme k.k quelconque dans Rm , par exemple kzk = kzk∞ = max1≤j≤m |zj | et une constante L > 0.
Pour la simplicité on supposera en plus t0 = a.
6.2.1
Les méthodes à un pas
Étant donnée une suite de réels t0 , t1 , ..., tN telle que 6 a = t0 < t1 < ... < tN = b, on pose hn = tn+1 − tn
et h = max0≤n≤N −1 hn . La méthode d’Euler, archétype des méthodes à un pas 7 , essentiellement méthodes
de Runge Kutta, comme la méthode de Merson utilisée en TP 7 ou la méthodes de Dormand-Prince ou de
Bogacki et Shampine utilisées dans MATLAB (voir plus loin), pour la résolution des problèmes de Cauchy pour
les équations différentielles ordinaires, appliqué à (6.7) consiste à calculer les quantités yn ∈ Rm qu’on espère
être des approximations de y(tn ), définies par :
(6.9)
yn+1 = yn + hn f (tn , yn ) pour 0 ≤ n ≤ N − 1.
La formule (6.9) est appelé schéma d’Euler.
Remarque. On peut la comprendre de deux façons : En partant de y(t + h) = y(t) +
y(t + h) = y(t) +
Z
t+h
f (s, y(s))ds
R t+h
t
y ′ (s)ds on écrit
(6.10)
t
et on approche l’intégrale par la méthode du rectangle :
Z
t+h
t
f (s, y(s))ds ≈ hf (t, y(t).
On obtient ainsi
y(t + h) ≈ y(t) + hf (t, y(t).
Ou en approchant la dérivée par un taux d’accroissement.
y ′ (t) ≈
d’où l’on tire
y(t + h) − y(t)
.
h
y(t + h) − y(t)
≈ f (t, y(t).
h
6. Ce qui suit s’applique aussi aux cas où tN < tN−1 < ... < t1 < t0 en changeant les signes des hn et en posant h =
max0≤n≤N−1 |hn |.
7. On dit aussi méthode à pas séparés.
107
6.2.1.1
Erreurs de consistance (locales) et erreurs globales
Pour établir la convergence d’une telle méthode, on introduit d’abord la suite {ǫn }0≤n≤N −1 dans Rm ,
qu’on appele suite des erreurs de consistance dans le schéma d’Euler pour la solution exacte 8 y(t),
définie par :
(6.11)
ǫn = y(tn+1 ) − y(tn ) − hn f (tn , y(tn )).
Par définition de la dérivabilité en t, on a donc kǫn k = hn ηn (hn ) avec ηn (h) →h→0 0 et si en plus y′′ existe
et est continue la formule de Taylor à l’ordre deux montre que kǫn k ≤ Ch2n où C = maxa≤t≤b 12 ky′′ (t)k est
une constante. L’erreur locale est d’ordre deux.
Alors la suite des erreurs globales en = y(tn ) − yn (“solution exacte - solution approchée”) satisfait :
e0 = 0
.
(6.12)
en+1 =en + hn (f (tn , y(tn )) − f (tn , yn )) + ǫn pour 0 ≤ n ≤ N − 1
En effet :
en+1 = y(tn+1 )−
yn+1
| {z }
yn +hn f (tn ,yn )
Il en résulte que :
= y(tn+1 ) − y(tn ) − hn f (tn , y(tn )) + y(tn ) + hn f (tn , y(tn )) − yn − hn f (tn , yn )
{z
} |
{z
}
|
en +hn (f (tn ,y(tn ))−f (tn ,yn ))
ǫn
e0 = 0
.
ken+1 k ≤ (1 + hn L)ken k + kǫn k pour 0 ≤ n ≤ N − 1
(6.13)
En effet la formule (6.12), l’inégalité triangulaire et la propriété (6.8) montrent que :
ken+1 k ≤ ken k + hn Lk y(tn ) − yn k + kǫn k = (1 + hn L)ken k + kǫn k.
| {z }
en
Remarque. Si le schéma d’Euler (6.9) est remplacé par une formule plus précise (voir des exemples plus
loin) de la forme :
yn+1 = yn + hn Φ(tn , yn , hn ) pour 0 ≤ n ≤ N − 1,
(6.14)
où Φ vérifie, pour une constante M :
kΦ(t, y(1) , h) − Φ(t, y(2) , h)k ≤ M ky(1) − y(2) k pour tout (t, y(1) , y(2) ) ∈ [a, b]×Rm × Rm et h ≥ 0 assez petit
(6.15)
alors introduisant la suite des erreurs de consistance :
ǫn = y(tn+1 ) − y(tn ) − hn Φ(tn , y(tn ), hn )
(6.16)
on voit que la suite des erreurs globales en = y(tn )− yn (même définition évidemment) satisfait encore (6.13)
à condition de remplacer L par M .
6.2.1.2
Lemme fondamental de propagation-accumulation et résultat de convergence de la
méthode d’Euler et des méthodes à un pas consistantes.
Pour obtenir le résultat de convergence cherché, on va d’abord montrer (et le lien avec (6.13) est évident),
avec les mêmes définitions de hn ≥ 0 et L ≥ 0 le lemme suivant.
8. Cette suite est en quelque sorte la suite des erreurs locales dues à la discrétisation.
108
Lemma 4 si {θn }0≤n≤N et {αn }0≤n≤N −1 sont deux suites de réels positifs telles que :
θn+1 ≤ (1 + hn L)θn + αn pour 0 ≤ n ≤ N − 1
alors :
L(tn −t0 )
θn ≤ e
θ0 +
n−1
X
i=0
eL(tn −ti+1 ) αi , 1 ≤ n ≤ N.
(6.17)
(6.18)
Preuve. On procède par récurrence.
Pour n = 0 (6.17) donne
θ1 ≤ (1 + h0 L)θ0 + α0 ≤ eLh0 θ0 + eL(t1 −t1 ) α0
où l’on a utilisé l’inégalité élementaire
(1 + x) ≤ ex .
Donc (6.18) est vraie si n = 1.
Pn−2 L(tn−1 −ti+1 )
Supposons donc (6.18) vraie jusqu’au rang n − 1 : θn−1 ≤ eL(tn−1 −t0 ) θ0 + i=0
e
αi et montrons
que la propriété est vraie au rang n. Appliquant (6.17) avec le bon indice, il vient
L(tn−1 −t0 )
θn ≤ (1 + hn−1 L)θn−1 + αn−1 ≤ (1 + hn−1 L)(e
Utilisant à nouveau l’inégalité élémentaire (1 + x) ≤
ex ,
θ0 +
on obtient
n−2
X
eL(tn−1 −ti+1 ) αi ) + αn−1
i=0
1 + hn−1 L ≤ eL hn−1 = eL (tn −tn−1 ) .
Donc (1 + hn−1 L)eL(tn−1 −t0 ) ≤ eL(tn −t0 ) et (1 + hn−1 L)eL(tn−1 −ti+1 ) ≤ eL(tn −ti+1 )
Ainsi
n−1
X
eL(tn −ti+1 ) αi .
θn ≤ eL(tn −t0 ) θ0 +
i=0
La récurrence est terminée.
Remarque. De façon plus piétonne, on peut directement itérer la majoration 6.17.
θn+1 ≤ (1 + hn L)θn + αn
θn+1 ≤ (1 + hn L)(1 + hn−1 L) . . . (1 + h0 L)θ0
+(1 + hn L)(1 + hn−1 L) . . . (1 + h1 L)α0
+(1 + hn L)(1 + hn−1 L) . . . (1 + h2 L)α1
+...
+(1 + hn L)αn−1
+αn
Les différentes lignes correspondent à l’amplification des erreurs commises aux pas de temps successifs. En
majorant 1 + hL ≤ exp hL, on obtient
θn+1 ≤ ehn L ehn−1 L . . . eh0 L θ0
+ehn L ehn−1 L . . . eh1 L α0
+ehn L ehn−1 L . . . eh2 L α1
+...
+ehn L αn−1
+αn
Ce qui donne bien
θn+1 ≤ eL(tn+1 −t0 ) θ0 + eL(tn+1 −t1 ) α0 + eL(tn+1 −t2 ) α1 . . . + αn .
Montrons maintenant la proposition.
109
Théorème 8 si y′′ existe et est continue, les normes des erreurs globales ken k sont contrôlées par O(h) où
et h = max0≤n≤N −1 hn . On dit que le schéma d’Euler est d’ordre 1.
Preuve. Il suffit de poser θn =k en k et αn = kǫn k ; (6.13) montre que (6.17) est vraie. Or on a vu que
kǫn k ≤ Ch2n (voir ce qui suit (6.11)). Alors (6.18) donne, puisqu’ici θ0 = 0 :
k en k≤
n−1
X
L(tn −ti+1 )
kǫi k
|{z}
e
i=0
L(b−a)
≤e
Ch
n−1
X
hi ≤ C(b − a)eL(b−a) h = O(h)
{z }
|i=0
≤Ch2i ≤Chhi
b−a
On montre facilement en prenant un exemple ( voir l’exercice 2 du TD 6) qu’on ne peut pas avoir en
général une meilleure majoration que k en k= O(h).
Remarque. Dans le cas du problème de Cauchy on l’on connaît y(t0 ) = y0 , e0 = 0 et la formule 6.18 s’écrit :
k en k≤ eL(tn −t1 ) kǫ0 k + eL(tn −t2 ) kǫ1 k + . . . + eL(tn −tn−1 ) kǫn−2 k + kǫn−1 k
Chaque terme s’interprète : eL(tn −t1 ) kǫ0 k correspond à la propagation-amplification de l’erreur de consistance
ǫ0 commise au temps t1 jusqu’au temps tn , eL(tn −t2 ) kǫ1 k correspond à la propagation-amplification de l’erreur
de consistance ǫ1 commise au temps t2 jusqu’au temps tn . . . eL(tn −tn−1 ) kǫn−2 k correspond à la propagationamplification de l’erreur de consistance ǫn−2 commise au temps tn−1 jusqu’au temps tn et enfin kǫn−1 k est la
dernière erreur de consistance commise à l’instant tn . Ainsi la formule 6.18 décrit la façon dont les erreurs se
propagent et s’accumulent. Plus une erreur est ancienne plus elle a le temps de s’amplifier exponentiellement.
La figure qui suit éclaire la preuve, attention les notations sont différentes car elle est tirée du magnifique
poly en ligne de G. Wanner (http://www.unige.ch/˜wanner/Numi.html déja cité dans la bibliographie).
6.2.1.3
Les premières méthode de Runge-Kutta 9 : des méthodes d’ordre deux
Pour obtenir une méthode plus précise il faut améliorer l’erreur de consistance (6.16) et on peut remarquer
en faisant un développement de Taylor que y(t+h)−y(t)
= y′ (t + h2 ) + O(h2 ) (au lieu de y(t+h)−y(t)
=
h
h
′
y (t) + O(h)). Alors la proposition de Runge (1895) a été d’écrire :
u2 = y0 + h2 f (t0 , y0 )
y(t + h) ≈ y1 = y0 + hf (t0 + h2 , u2 )
Remarque. On peut comprendre cette méthode en partant de y(t + h) = y(t) +
y(t + h) = y(t) +
Z
t+h
f (s, y(s))ds
(6.19)
R t+h
t
y ′ (s)ds. On écrit
(6.20)
t
et on approche l’intégrale par la méthode du point milieu :
Z
t+h
t
f (s, y(s))ds ≈ hf (t + h/2, y(t + h/2)).
On obtient ainsi
y(t + h) ≈ y(t) + hf (t + h/2, y(t + h/2)).
9. La référence C. Runge, 1895, Ueber die numerische Auflösung totaler Differentialgleichungen : Göttinger Nachr., p 252
– 257. L’article de Kutta qui propose un cadre général est W. Kutta, 1901, Beitrag zur näherungsweisen Integration totaler
Differentialgleichungen : Zeischr. für Math. u. Phys., Vol. 46, p. 435 – 453.
110
y(xn )
solution exacte
y0
e1
en−1
e2
y1
y2
y3
polygones d’Euler
x0
x1
x2
x3
···
En = en
En−1
.
.
.
E2
E1
yn
xn = X
F IG . III.3: “Lady Windermere’s Fan”, Estimation de l’erreur globale
111
Mais on ne connaît pas y(t + h/2). On effectue alors une prédiction :
y(t + h/2) ≈ u2 = y(t) +
h
f (t, y(t))
2
par la méthode d’Euler suivie d’une correction :
y(t + h) ≈ y(t) + h f (t + h/2, u2 ).
Pour démontrer qu’on obtient ainsi une méthode d’ordre 2, il faut comparer les développements en
puissances de h de y(t + h) (solution exacte) et y1 (solution approché avec y = y(t), la valeur exacte) en
∂f
tenant compte de y′ (t) = f (t, y(t) = f (t, y). Or, en notant ft = ∂f
∂t (vecteur) et fy = ∂y (matrice Jacobienne
m × m) et avec des notations conséquentes pour les dérivées secondes :
y(t + h) = y(t) + hy′ (t) +
h2 ′′
2 y (t) +
O(h3 ) = y + hf +
h2
2 (ft
+ fy f ) + O(h3 )
(6.21)
et :
y1 = y + hf (t + h2 , y + h2 f (t, y)) = y + h(f (t, y)f +
h2
2 (ft
+ fy f ) + O(h3 )
(6.22)
si bien que finalement l’erreur de consistance introduite en (6.16) vérifie, en ajustant convenablement les
notations
ǫn = y(tn+1 ) − y(tn ) − hn Φ(tn , y(tn )) = O(h3n )
(6.23)
et donc on a une erreur locale en O(h3 ) et, de la même manière qu’au paragraphe précédent, (en posant
Φ(t, y, h) = f (t + h/2, y + h/2f (t, y), voir 6.14.) on obtient bien une erreur globale en O(h2 ) et on dit que le
schéma est d’ordre 2.
Variante : on peut également approcher l’intégrale
y(t + h) = y(t) +
Z
t+h
f (s, y(s))ds
(6.24)
t
par la méthode du trapèze :
Z
t
t+h
f (s, y(s))ds ≈
h
(f (t, y(t)) + f (t + h, y(t + h))
2
On obtient ainsi
h
(f (t, y(t)) + f (t + h, y(t + h)) .
2
Mais on ne connaît pas y(t + h). On effectue alors une prédiction :
y(t + h) ≈ y(t) +
y(t + h) ≈ u2 = y(t) + hf (t, y(t))
par la méthode d’Euler suivie d’une correction :
y(t + h) ≈ y(t) +
h
(f (t, y(t)) + f (t + h, u2) .
2
Cette méthode dite du trapèze explicite est du même ordre que la méthode du point milieu. par un développement de Taylor, on estime l’erreur de consistance
y(t0 + h) − y1 = O(h3 ),
si bien que le schéma est aussi d’ordre 2.
112
6.2.1.4
un schéma d’ordre 3 : le schéma de Heun
Présentons maintenant une méthode d’ordre 3 : la méthode de Heun. Elle repose sur la formule d’intégration de Gauss-Radau suivante :
Z 1
3
1
g(t) dt ≈ g(0) + g(2/3)
4
4
0
qui est exacte pour les polynômes de degré inférieur ou égal à 2, ainsi qu’on le vérifie aisément. On en déduit
3
2h
2h
1
f (t, y(t)) + f (t +
, y(t +
) .
y(t + h) ≈ y(t) + h
4
4
3
3
Pour obtenir une formule d’ordre 3, nous devons "prédire" la valeur de y(t + 2h
3 ) au moins à l’ordre 2, car
l’erreur commise sera multipliée par h. Faisons cela avec la méthode du point milieu avec h remplacé par 2h
3 .
Cea donne (Heun 1900)
h
u2 = y0 + f (t0 , y0 )
3
h
2h
f (t0 + , u2 )
u3 = y 0 +
3
3
1
3
2h
y1 = y0 + h
f (t0 , y0 ) + f (t0 +
, u3 ) .
4
4
3
Par une preuve similaire à la précédente, on voit que le schéma de Heun est d’ordre 3. 10 La figure qui
suit illustre géométriquement les différents schémas.
6.2.1.5
Méthode de Runge-Kutta classique, notions sur les méthodes de Runge-Kutta plus
générales
En utilisant le même principe, on peut approcher l’intégrale
y(t + h) = y(t) +
Z
t+h
f (s, y(s))ds
(6.25)
t
par la méthode de Simpson :
Z
t
t+h
f (s, y(s))ds ≈
h
(f (t, y(t)) + 4f (t + h/2, y(t + h/2) + f (t + h, y(t + h)) .
6
Il faut alors prédire y(t + h/2) et y((t + h). La méthode de Runge-Kutta classique est ainsi décrite par les
formules suivantes qui donnent le moyen de calculer yn+1 , noté y1 ici, à partir de yn noté y0 :
u1 = y 0
u2 = y0 + h2 f (t0 + h2 , u1 )
,
u3 = y0 + h2 f (t0 + h2 , u2 )
u4 = y0 + h f (t0 + h2 , u3 )
y(t + h) ≈ y1 = y0 + h 16 f (t0 , u1 ) + 62 f (t0 + h2 , u2 ) + 26 f (t0 + h2 , u3 ) + 16 f (t0 + h, u4 )
si bien qu’avec la notation de (6.14) et avec t = tn , y = yn :
h
1
h
Φ(tn , yn ) =
f (t0 , u1 ) + 2f (t0 + , u2 ) + 2f (t0 + , u3 ) + f (t0 + h, u4 )
6
2
2
(6.26)
(6.27)
10. G. Wanner raconte que le premier programme qui a tourné sur le premier ordinateur ( aux USA) fut une équation
différentielle résolue par la méthode de Heun.
113
Pour une interprétation géométrique de ces trois méthodes, voir figure III.5.
②
expl. trap. rule
②
②✶
1
Heun 1900
②✶
②✶
1
✉✷
②✵
②
expl. midp. rule
1
✉✸
✉✷
②✵
②✵
✉✷
✷
✸
✶
✶
①
①
①
✶✶
1
1
1
✷
✷
✹✸
✦
✷
✷
F IG . III.5: Méthodes de Runge-Kutta pour ② ❂ ① ✰ ② , ②✵ ❂ ✳✁✂, ❤ ❂ ✄; pointillé: solution
exacte.
fe
fe
114
Cette méthode est d’ordre 4 (erreur globale en O(h4 ) car erreur locale en O(h5 )) et on pourrait faire des
calculs, assez fastidieux quand même, qui donnent toutes les formules de ce type d’ordre 2, 3 et 4. Pour plus
de détails on peut renvoyer aux livres M. Crouzeix, A.L. Mignot, 1984, Analyse numérique des équations
différentielles : Masson, Paris et Hairer, S.P. Nørsett, G. Wanner,1993, Solving ordinary differential equations
I. Nonstiff problems : Springer-Verlag, Berlin. Ces estimations d’erreur nécessitent souvent l’usage de la
formule de Taylor à des ordres assez élevés. Les logiciels de calcul formel sont alors très précieux. . .
Les méthodes de Runge-Kutta explicites à s étapes sont de la forme :
k1 = f (t, y)
k2 = f (t + c2 h, y + ha2,1 k1 )
k3 = f (t + c3 h, y + h(a3,1 k1 + a3,2 k2 ))
···
ks = f (t + cs h, y + h(as,1 k1 + as,2 k2 + ... + as,s−1 ks−1 ))
y(t + h) ≈ y1 = y + h(b1 k1 + b2 k2 + ... + bs ks )
(6.28)
Φ(tn , yn ) = b1 k1 + b2 k2 + ... + bs ks
(6.29)
si bien qu’avec la notation de (6.14) et avec t = tn y = yn :
et on range les coefficients d’une telle formule dans un tableau de la forme :
0
c2
c3
..
.
cs
a2,1
a3,1
..
.
a3,2
..
.
as,1
b1
as,2
b2
..
.
···
···
as,s−1
bs−1 bs
Ps−1
Remarque. On respecte toujours les contraintes : c1 = 0 et ci = j=1
ai,j afin d’avoir au minimum
ki ≈ f (t0 + ci h, y(t0 + ci h) + O(h2 )
Voici quelques méthodes très connues :
0
0
0
1
2
1
2
0 1
Runge, ordre 2
1
2
1
2
1
1
0
0
1
2
1
2
0
1
3
2
3
1
0
1
1
2
0 16
6
3
Runge, ordre 3
1
3
0
1
4
2
3
1
0 34
Heun, ordre 3
1
2
0
1
2
0
0
0
1
1
6
2
6
2
6
1
3
2
3
1
6
1
1
3
- 31
1
1
-1
1
8
3
8
1
3
1
8
8
“La” méthode de
Règle 3/8, ordre 4
Runge-Kutta, ordre 4
Les calculs pour fabriquer ces formules sont compliqués et il existe une technique combinatoire à base
de théorie des graphes, arbres plus précisément, qui permet d’écrire 11 les conditions sur les coefficients pour
obtenir un ordre déterminé et le nombre de ces conditions pour obtenir un ordre ≤ 10 est indiqué dans le
tableau :
ordre
nombre de conditions
1
1
2
2
3
4
4
8
5
17
6
37
7
85
8
200
9
486
10
1205
Il y a des résultats curieux dus à Ceschino et Kuntzmann, Shanks et Butcher 12 comme le fait que pour p ≥ 5
il n’existe pas de schéma de Runge-Kutta explicite d’ordre p à s = p étapes de même que pour p ≥ 7 il n’y a
11. à partir d’une formule de Faà di Bruno donnant la dérivée d’ordre q − 1 d’un produit de composition de deux fonctions.
12. Les références sont :
F. Ceschino, J. Kuntzmann, 1963, Problèmes différentiels de conditions initiales (méthodes numériques) : Dunod, Paris
(page 89) ;
E.B. Shanks, 1966, Solutions of differential equations by evaluations of functions : Math. Comp., 20, 21 – 38 ;
J.C. Butcher, 1964, On Runge-Kutta processes of higher order : J. Austral. Math. Soc., IV, Part2, 179 – 194 ;
J.C. Butcher, 1965, On the attainable order of Runge-Kutta methods : Math. Comp., 19, 408 – 417 ;
J.C. Butcher, 1985, The non-existence of ten stage eighth order explicit Runge-Kutta methods : BIT, 25, 521 – 540.
115
pas de schéma de Runge-Kutta explicite d’ordre p à s = p + 1 étapes et pour p ≥ 8 il n’y a pas de schéma de
Runge-Kutta explicite d’ordre p à s = p + 2 étapes. Pour plus de précisions sur cette question, il vaut mieux
renvoyer au livre E. Hairer, S.P. Nørsett, G. Wanner,1993, Solving ordinary differential equations I. Nonstiff
problems : Springer-Verlag, Berlin pages 142 – 155 et 173 – 187.
Il existe aussi des méthodes de Runge-Kutta implicites de la forme (pour h assez petit et f assez régulière
le système en les inconnues ki , i = 1, ..., s a une solution unique — il suffit d’appliquer la méthode des
approximations successives car lorsque h est assez petit la fonction itérée est contractante) :
c1
c
2
Pj=s
ki = f (t + ci h, y + h j=1
ai,j kj ), i = 1, ...s
Ps
le tableau associé étant ...
y(t + h) ≈ y1 = y + h i=1 bi ki
cs
a1,1
a2,1
..
.
a1,2
a2,2
..
.
···
···
..
.
a1,s
a2,s
as,1
b1
as,2
b2
···
···
as,s
bs
(6.30)
Lorsque ai,j = 0 pour j > i et ai,i 6= 0 pour au moins un indice i on parle de schéma diagonalement implicite
(“diagonal implicit Runge-Kutta method” (DIRK)) et si de plus ai,i = γ 6= 0 on peut parler de schéma
simplement diagonalement implicite (“singly diagonal” (SDORK). Voici quelques tableaux de tels schémas
et pour plus d’informations voir le livre de Hairer, Nørsett, Wanner déjà cité. Ces schémas sont utiles pour
les problèmes “raides” et dans ces cas implicites on peut atteindre des ordre 2s avec s étapes (par problèmes
raides on entend des équations différentielles dont les solutions présentent des variations rapides).
La règle du trapèze implicite y(t + h) ≈ y1 = y + h2 (f (t, y) + f (t + h, y1 )) fait évidemment partie de ces
schémas.
Sur ce cas particulier, on peut voir que l’application y1 7→ g(y1 ) := y0 + h2 (f (t, y0 ) + f (t + h, y1 )) est
Lipschitzienne :
hL
h
|y1 − z1 |
|g(y1 ) − g(z1 )| = |(f (t + h, y1 ) − f (t + h, z1 ))| ≤
2
2
et contractante dès que hL < 2.
√
√
3
1
1
1
− √63
−
2
4
4
6
√
γ
γ
0
0
0
0
1
1
3
3
1
1
1
1 1
2
1
1
2
2
1
−
γ
1
−
2γ
γ
2 + 6
4 + 6
4
3
3
3
1
1
1
1
1
1
1
3
2
2
2
2
4
4
Euler
Point milieu
Schéma
de
SDIRK
d’ordre
3
Schéma de
√
implicite
implicite
Hammer & Hollingsworth
Hammer & Hollingsworth
(γ = 3±6 3 )
d’ordre 4
1
2
1
2
−
√
15
10
1
2√
+
15
10
5
36
5
36
5
36√
+
+
5
18
15
√24
15
30
2
9
2
9
−
√
15
15
2
9√
+
4
9
15
15
Schéma de
Kuntzman & Butcher
d’ordre 6
6.2.1.6
5
36
5
36
−
−
√
15
√30
15
24
5
36
5
18
Notions sur les estimations d’erreurs utilisées dans les codes adaptatifs
Comme cela est fait dans le TP 7, à chaque progression d’un code adaptatif, t = tn devenant t = tn+1 , on
a besoin d’une estimation de l’erreur afin d’adapter le pas hn = tn+1 − tn : dans la mesure où c’est possible, si
cette estimation d’erreur est négligeable on augmente le pas, si par contre l’estimation est trop grande on le
diminue (pour plus de détails, voir le TP 7, le chapitre 7 du livre C.B. Moler, 2004, Numerical computing with
MATLAB : Siam, Philadelphia (disponible gratuitement sur internet sur http ://www.mathworks.fr/moler) et
le livre E. Hairer, S.P. Nørsett, G. Wanner,1993, Solving ordinary differential equations I. Nonstiff problems :
116
Springer-Verlag, Berlin, pages 167 – 172). Pour cela il est indispensable de disposer d’une estimation de
l’erreur locale.
On peut toujours utiliser une extrapolation de Richardson comme cela a été fait dans la méthode de
Romberg à propos des quadratures dans le TP 4. En clair, si on utilise un schéma d’ordre p, ce qui fait que
l’erreur locale vérifie 13 y(t + h) − y1 = Chp+1 + O(hp+2 ), on peut calculer deux approximations de y(t + 2h) ;
l’une, y2 , en faisant deux pas h et l’autre, w, en faisant un seul pas 2h. Il faut comprendre que l’erreur locale
sur y2 est composée de deux termes : le premier est la propagation du terme d’erreur Chp+1 + O(hp+2 )
∂f
+ O(h2 ))(Chp+1 + O(hp+2 )) et le second est une nouvelle erreur
commise au premier pas qui est (I + h ∂y
commise au deuxième pas mais avec y1 = y + O(h) à la place de y ce qui modifie le “constante locale” C en
O(h). Ainsi on peut écrire :
y(t + 2h) − y2 = (I + O(h))Chp+1 + (C + O(h))hp+1 + O(hp+2 ) = 2Chp+1 + O(hp+2 )
y(t + 2h) − w = C(2h)p+1 + O(hp+2 )
(6.31)
En combinant ces deux relations, on élimine C et on obtient l’estimation d’erreur y(t + 2h) − y2 = y22p−w
−1
b2 = y2 + y22p−w
.
Il
existe
d’ailleurs
des
et en prime on a même une estimation de y(t + 2h) en O(hp+2 ) y
−1
codes où ce procédé d’extrapolation à la limite, analogue à la méthode de Romberg, est poursuivi et on peut
atteindre, pour des problèmes ayant une solution y très régulière, des ordres de convergence arbitrairement
grands (voir le procédé d’extrapolation de Gragg, Bulirsch, Stoer décrit dans le livre de de Hairer, Nørsett,
Wanner déjà cité). Ces méthodes font parties des plus précises.
Mais la plupart du temps on utilise des méthodes adaptatives moins coûteuses parce qu’elles économisent
automatiquement le nombre d’évaluations de f . Un schéma de Runge-Kutta est alors utilisé combiné à un
autre, d’ordre plus élevé, afin de permettre une estimation de l’erreur par soustraction comme cela est fait
dans le TP 7. On parle de schémas emboîtés (embedded formulas) car les deux schémas ont beaucoup de
coefficients en commun. Cela donne des algorithmes adaptatifs où les pas hn sont automatiquement choisis
pour essayer de garantir une précision donnée. On présente ces méthodes avec des tableaux de la forme :
0
c2
c3
..
.
cs
a2,1
a3,1
..
.
a3,2
..
.
as,1
b1
b
b1
as,2
b2
b
b2
..
.
···
···
···
as,s−1
bs−1
bbs−1
bs
bbs
b
bs+1
P
où il est entendu que l’approximation de y(t+h) est y1 = y+h si=1 bi ki avec k1 = f (t, y) et ki = f (t+ci h, y+
P
P
c1 où y
c1 = y + h( si=1 bbi ki + b
+h j=i−1
bs+1 f (t + h, y1 ).
j=1 ai,j kj ), 2 ≤ i ≤ s et l’estimation d’erreur est y1 − y
14
Il faut citer ici la méthode de Merson du TP 7 qui est d’ordre 4 et dont l’estimation d’erreur est d’ordre 5
pour un problème où f est linéaire en y et d’ordre 3 en général, la méthode de Bogacki et Schampine qui est
d’ordre 3 avec une estimation d’erreur d’ordre 2 et la méthode de Dormand-Prince qui est d’ordre 5 avec une
estimation d’erreur d’ordre 4. Ces deux dernières méthodes sont utilisées dans MATLAB, respectivement dans
les procédure ode23 et ode45 ; on peut vérifier les coefficients des tableaux qui suivent avec les commandes
type ode23 et type ode45, ce qui fait un premier pas vers la lecture des codes.
13. La quantité (vecteur) C est indépendante de h mais dépend de t.
14. Les références sont :
R.H. Merson, 1957, An operational method for the study of integration processes : Proc. Symp. Data Processing, Weapons
Research Establishment, Salisbury, Australia, p 110-1 – 110-25 ;
P. Bogacki, L.F. Shampine, 1989, A 3(2) pair of Runge-Kutta formulas : Applied Mathematics Letters, 2, 1 – 9 ;
J.R. Dormand, P.J. Prince, 1980, A family of embedded Runge-Kutta formulae : J. Comp. Appl. Math., 6, 19 – 26.
117
0
1
3
1
3
1
2
1
3
1
6
1
8
1
2
1
6
1
10
0
1
6
0 38
1
0 - 32 2
0 0 23 16
3
2
1
0 10
5
5
méthode de Merson 4(“5”)
1
2
3
4
1
2
0
2
9
7
24
3
4
3
9
6
24
4
9
8
24
3
24
méthode de Bogacki, Shampine “23”
0
1
5
3
10
4
5
8
9
1
1
1
5
3
40
44
55
19372
6561
9017
3168
35
384
35
384
5179
57600
9
40
− 56
15
− 25360
2187
− 355
33
32
9
64448
6561
46732
5247
500
1113
500
1113
7571
16695
− 212
729
5103
− 18656
0
− 2187
6784
0
− 2187
6784
92097
0
− 339200
Méthode de Dormand-Prince 5(4)
49
176
125
192
125
192
393
640
11
84
11
84
187
2100
0
1
40
On pourra consulter la bibliographie pour des compléments.
6.2.2
Les méthodes multipas
Pour augmenter la précision du schéma d’Euler, le processus employé dans les méthodes de Runge-Kutta
n’est pas le seul possible. On peut aussi, après une période de démarrage, utiliser les valeurs approchées de
y, yn−1 , yn−2 , ..., yn−k+1 aux pas qui précèdent yn . Les premiers procédés de ce genre qu’on range dans
la classe des méthodes multipas 15 sont antérieurs aux méthodes de Runge-Kutta et sont dus à Adams (et
publiés par Bashforth 16 ).
6.2.2.1
Quelques méthodes : Adams (Adams-Bashforth, Adams-Moulton), Nyström, MilneSimpson, différentiation rétrograde (BDF pour backward differentiation formula en
anglais)
Les méthodes d’Adams
sont obtenues en approchant l’intégrale du second membre de
Rt
y(tn+1 ) = y(tn ) + tnn+1 f (t, y(t))dt par l’intégrale du polynôme d’interpolation de t → f (t, y(t)) aux
points tn , tn−1 , ..., tn−k+1 (méthodes explicites) dans le cas des méthodes dites d’Adams-Bashforth et aux
points tn+1 , tn , ..., tn−k+1 (méthodes implicites) dans le cas des méthodes dites d’Adams-Moulton. On note
fn = f (tn , yn ) où yn est l’approximation ainsi obtenue pour y(tn ). Dans le cas où le pas h = ti+1 − ti est
constant les premières méthodes d’Adams-Bashforth sont avec comme ordre de convergence respectivement
1, 2, 3, 4 (donc erreurs locales en O(h2 ), O(h3 ), O(h4 ), O(h5 ) respectivement) :
k
k
k
k
=1:
=2:
=3:
=4:
yn+1
yn+1
yn+1
yn+1
= yn + hfn (Euler explicite),
= yn + h( 23 fn − 21 fn−1 ),
16
5
= yn + h( 23
12 fn − 12 fn−1 + 12 fn−2 ),
59
37
55
= yn + h( 24 fn − 24 fn−1 + 24 fn−2 −
(6.32)
9
24 fn−3 ).
Toujours à pas constant, les premières méthodes d’Adams-Moulton sont, avec les mêmes ordres de convergence :
15. On dit aussi méthodes à pas liés.
16. La référence est F. Bashforth, 1883, An attempt to test the theories of capillary action by comparing the theoretical and
measured forms of drops of fluid. With an explanation of the method of integration employed in constructing the tables which
give the theoretical form of such drops, by C. Adams : Cambridge Univ. Press.
118
k
k
k
k
=0:
=1:
=2:
=3:
yn+1
yn+1
yn+1
yn+1
= yn + hfn+1 (Euler implicite),
= yn + h( 12 fn+1 + 21 fn ) (règle du trapèze),
8
1
5
fn+1 + 12
fn − 12
fn−1 ),
= yn + h( 12
9
19
5
1
= yn + h( 24 fn+1 + 24 fn − 24 fn−1 + 24
fn−2 ).
(6.33)
À partir de ces méthodes, une méthode prédicteur-correcteur est construite de la manière suivante :
bn+1 de yn+1 ;
P (prédiction) : on utilise une formule de type Adams-Bashforth pour faire une prédiction y
b
b
E (évaluation) : on évalue la fonction f avec cette approximation fn+1 = f (tn+1 , yn+1 ) ;
C (correction) : on porte cette approximation dans une formule d’Adams-Moulton ce qui donne yn+1 ;
E (évaluation) : pour continuer on évalue fn+1 = f (tn+1 , yn+1 ).
Cela s’appelle un schéma PECE. C’est la procédure la plus courante mais il existe aussi des schémas PECECE,
des schémas PEC . . .
Remarque. Les coefficients du second membre présentent la particularité de sommer à un. En effet on avance
de h entre tn et tn+1 . En particulier, les solutions de l’équation différentielle triviale y ′ = 1 sont données par
yn+1 = yn + h qui correspond bien à y(t) = t + const.
Les méthodes de Nyström (explicites) et deR Milne-Simpson (implicites) sont construites de la même
tn+1
manière mais à partir de y(tn+1 ) = y(tn−1 ) + tn−1
f (t, y(t))dt. Toujours à pas h constant, les premières
méthodes de Nyström sont (k = 2 est identique à k = 1) :
k = 1 : yn+1 = yn−1 + 2hfn (règle du point milieu ou schéma saute-mouton),
k = 3 : yn+1 = yn−1 + h( 37 fn − 23 fn−1 + 13 fn−2 ),
(6.34)
et les premières méthodes de Milne-Simpson sont :
k
k
k
k
=0:
=1:
=2:
=4:
yn+1
yn+1
yn+1
yn+1
= yn−1 + 2hfn+1 ,
= yn−1 + 2hfn ,
= yn−1 + h( 13 fn+1 + 43 fn + 31 fn−1 ),
124
24
= yn−1 + h( 29
90 fn+1 + 90 fn + 90 fn−1 +
(6.35)
4
90 fn−2
−
1
90 fn−3 .
Dans ces cas aussi
R tn+1on peut définir des schémas prédicteurs-correcteurs et bien sûr on peut étendre à d’autres
intégrales que tn−1
f (t, y(t))dt.
Remarque. Les coefficients du second membre présentent la particularité de sommer à 2. En effet on avance
de 2h entre tn−1 et tn+1 . En particulier, les solutions de l’équation différentielle triviale y ′ = 1 sont données
par yn+1 = yn−1 + 2h qui correspond bien à y(t) = t + const.
Les méthodes de différentation rétrograde sont construites d’une autre manière. On dérive le polynôme
d’interpolation q de t → y(t) aux points tn+1 (en ce point yn+1 n’est pas (encore) connu), tn , ..., tn−k+1
et on écrit : q′ (tn+1 ) = f (tn+1 , yn+1 ).
On obtient des formules implicites dont les 6 premières sont stables et les autres sont instables (voir
section suivante), ce que nous admettons aussi. Ces 6 formules implicites de différentiation rétrograde dans
le cas de pas constant sont :
k
k
k
k
k
k
= 1 : yn+1 − yn = hfn+1 , (Euler implicite)
= 2 : 32 yn+1 − 2yn + 12 yn−1 = hfn+1 , BDF2)
3
1
= 3 : 11
6 yn+1 − 3yn + 2 yn−1 − 3 yn−2 = hfn+1 ,
4
25
= 4 : 12 yn+1 − 4yn + 3yn−1 − 3 yn−2 + 41 yn−3 = hfn+1 ,
10
5
1
= 5 : 137
60 yn+1 − 5yn + 5yn−1 − 3 yn−2 + 4 yn−3 − 5 yn−4 = hfn+1 ,
15
20
15
147
= 6 : 60 yn+1 − 6yn + 2 yn−1 − 3 yn−2 + 4 yn−3 − 65 yn−4 + 61 yn−4 = hfn+1 .
(6.36)
Remarque. Les coefficients du premier membre présentent la particularité de sommer à zéro. En effet pour
l’équation différentielle triviale y ′ = 0, les constantes doivent être solution du schéma.
119
6.2.2.2
Un exemple d’instabilité
Contrairement aux méthodes à un pas, dans ce cas des méthodes multipas, il ne suffit pas qu’une méthode
soit consistante, c’est à dire d’erreur locale tendant vers zéro avec le pas (plus vite que O(h)), pour qu’elle soit
convergente. Voici une formule 17 qui est d’ordre 3 au moins mais diverge (le pas étant constant, tn = t0 + nh,
on note yn l’approximation de y(tn ), et fn = f (tn , yn )) :
(6.37)
yn+1 + 4yn − 5yn−1 = h(4fn + 2fn−1 ).
Montrons que l’erreur de consistance est en O(h4 ).
On note fn−1 = f (tn−1 , yn−1 ), ft = ∂f
∂t (tn−1 , yn−1 ), fy =
∂2f
∂2f
∂y2
∂f
∂y (tn−1 , yn−1 ),
ftt =
∂2f
(t
,y
),
∂t2 n−1 n−1
fty =
(tn−1 , yn−1 ). D’une part, on a (formule de Taylor appliquée à la solution
∂t∂y (tn−1 , yn−1 ) et fyy =
exacte, yn−1 étant supposée exacte) :
2
3
(2h)
′′
′′′
4
y(tn+1 ) = y(tn−1 ) + 2hy′ (tn−1 ) + (2h)
2 y (tn−1 ) + 6 y (tn−1 ) + O(h )
= yn−1 + 2hfn−1 + 2h2 (ft + fy fn−1 )
+ 43 h3 (ftt + 2fty fn−1 + (fyy fn−1 )fn−1 + fy ft + fy fy fn−1 ) + O(h4 ).
(6.38)
D’autre part (développement de Taylor de la solution approchée avec des données exactes yn et yn−1 ) :
yn+1 = −4yn + 5yn−1 + h(4fn + 2fn−1 )
2
3
= −4(yn−1 + hfn−1 + h2 (ft + fy fn−1 ) + h6 (ftt + 2fty fn−1 + (fyy fn−1 )fn−1 + fy ft + fy fy fn−1 )) + 5yn−1
2
2
2
+h(6fn−1 + 4hft + 4fy (hfn−1 + h2 (ft + fy fn−1 )) + 4 h2 ftt + 4fty h(hfn−1 ) + 4 h2 (fyy fn−1 )fn−1 ) + O(h4 )
= yn−1 + 2hfn−1 + 2h2 (ft + fy fn−1 ) + 43 h3 (ftt + 2fty fn−1 + (fyy fn−1 )fn−1 + fy f t + fy fy fn−1 ) + O(h4 ).
(6.39)
Donc l’erreur de consistance (locale) est y(tn+1 ) − yn+1 = O(h4 ) et la méthode serait au moins d’ordre 3 (si
elle était stable, l’erreur globale serait en O(h3 )). Mais cette méthode n’est pas stable ainsi qu’on va le voir
plus bas.
Avant d’essayer d’expliquer cela plus en détails, voici ce qui se passe lorsqu’on applique la méthode à
l’équation différentielle triviale y ′ (t) = 0, y(0) = 1, dont la solution exacte est y(t) = 1, avec un pas h
constant. En supposant que les valeurs de démarrage sont exactes, les relations à satisfaire sont :
y0 = 1, y1 = 1, yn+1 + 4yn − 5yn−1 = 0 pour n ≥ 1
(6.40)
yn = λn1 = 1
(6.41)
Or la solution générale de la relation de récurrence yn+1 + 4yn − 5yn−1 = 0 pour n ≥ 1 est yn = αλn1 + βλn2
où λ1 = 1 et λ2 = −5 sont les racines de l’équation caractéristique ζ 2 + 4ζ − 5 = 0. Pour trouver la solution
α + β = y0
de valeurs initiales y0 et y1 il suffit de résoudre le système linéaire 2 × 2 en α, β
qui a une
λ1 α + λ2 β = y1
solution unique le déterminant λ2 − λ1 = −6 étant toujours non nul. De plus avec on trouve bien
Mais si on commet une petite erreur d’arrondi en prenant par exemple y0 = 1 et y1 = 1 + ǫ on obtient alors
ǫ
ǫ
yn = αλn1 + βλn2 = (1 + ) − (−5)n
6
6
(6.42)
Le premier terme est très voisin de 1 lorsque ǫ ≪ 1, ce qui est favorable, mais le second est non borné
quand n → ∞ et oscille de plus en plus violemment à mesure que n augmente. Ainsi il n’y a pas convergence
et cela provient du fait que le polynôme ρ(ζ) = ζ 2 + 4ζ − 5 a pour racine ζ = 1 et ζ = −5 : cette deuxième
racine de module > 1 propage les “petites erreurs de consistance” commises à chaque pas de manière explosive.
Ce schéma est donc inutilisable en pratique sur une équation non triviale, car dans ce cas il est impossible
d’assurer une précision infinie et les erreurs sont amplifiées de manière exponentielle par le facteur λn2 .
17. On l’obtient en cherchant une formule explicite à 3 pas d’ordre maximum.
120
6.2.2.3
Notions sur le résultat général
On considère une méthode multipas, à pas constant h, de la forme :
αk yn+k + αk−1 yn+k−1 + ... + α0 yn = h(βk fn+k + ... + β0 fn )
(6.43)
Il est naturel d’imposer αk 6= 0 et |α0 | + |β0 | > 0. La méthode est explicite si βk = 0 et implicite si non.
On dira que ce schéma est d’ordre p si l’erreur de consistance, c’est à dire la différence y(tn+k ) − yn+k où
yn+k est tiré de (6.43) lorsque yn+k−1 , yn+k−2 , ..., yn sont les valeurs exactes, est en O(hp+1 ). Cela revient
à dire :
L(y, t, h) ≡
k
X
i=0
(αi y(t + ih) − hβi y′ (t + ih)) = O(hp+1 ),
(6.44)
pour toute fonction t → y(t) suffisamment régulière.
P
En effet si on retranche à L(y, tn , h) ≡ L(yexact , tn , h) = ki=0 (αi y(tn + ih) − hβi y′ (tn + ih)) la quantité
qui est nulle par définition de yn+k :
k−1
X
(αi
0 = αk yn+k − hβk fn+k +
i=0
il vient :
−hβi
yn+i
|{z}
y(tn +ih) dans ce cas
fn+i
|{z}
) ≡ L(yapproché , tn , h),
y′ (tn +ih) dans ce cas
αk (y(tn + kh) − yn+k ) − hβk (f (tn+k , y(tn + kh)) − f (tn+k , yn+k )) = L(y, tn , h),
(6.45)
d’où le résultat si βk = 0 (schéma explicite).
Si βk 6= 0 y(tn + kh) − yn+k = O(hp+1 ) équivaut également à L(y, tn , h) = O(hp+1 ).
Le fait que y(tn + kh) − yn+k = O(hp+1 ) implique L(y, tn , h) = O(hp+1 ) est clair puisque la fonction f est
Lipschitzienne en la variable y.
Montrons la réciproque. Supposons L(y, tn , h) = O(hp+1 ). Tout d’abord quand h → 0, L(y, tn , h) → 0, donc
en faisant h → 0 dans l’équation (6.45) on tire y(tn +kh)−yn+k → 0. Comme la fonction f est Lipschitzienne
en la variable y, quand h → 0, le terme h βk (f (tn+k , y(tn + kh)) − f (tn+k , , yn+k )) est négligeable devant
y(tn + kh) − yn+k donc on a un équivalent
αk (y(tn +kh)−yn+k )−hβk (f (tn+k , y(tn +kh))−f (tn+k , yn+k )) ∼ αk (y(tn +kh)−yn+k ) = L(y, tn , h), (6.46)
d’où le résultat.
On associe au schéma (6.43) les polynômes :
ρ(ζ) = αk ζ k + αk−1 ζ k−1 + ... + α0 ,
σ(ζ) = βk ζ k + βk−1 ζ k−1 + ... + β0 .
(6.47)
Il n’est pas trop difficile de prouver qu’un schéma est consistant si et seulement si (remplacer y(t + ih) et
y′ (t + ih) par leurs développement de Taylor dans (6.44)) :
ρ(1) = 0, ρ′ (1) = σ(1).
(6.48)
On dira que le schéma (6.43) est stable si :
le polynôme ρ(ζ) a toutes ses racines de module ≤ 1, les racines de modules 1 étant simples.
(6.49)
Par ailleurs on dira que le schéma (6.43) est convergent si pour toute équation différentielle pour laquelle
il y a existence et unicité de la solution exacte y(t) on a y(t) − yn →h→0 0 à t = nh fixé. Dans ce genre
d’études, on suppose toujours f Lipschitzienne en y ce qui assure l’existence et l’unicité de y(t).
Alors on démontre l’équivalence :
121
(6.50)
convergence ⇔ consistance plus stabilité.
Voici une idée de la preuve. On montre d’abord que la condition de stabilité équivaut au fait que la solution
générale de la relation de récurrence linéaire :
(6.51)
αk yn+k + αk−1 yn+k−1 + ... + α0 yn = 0,
reste bornée en ce sens qu’il existe une constante C > 0 (fonction des coefficients α0 , α1 , ..., αk ) telle qu’étant
données des valeurs de “démarrage” y0 , y1 , ..., yk−1 quelconques dans C on peut affirmer que la suite {yn }n∈N
solution de (6.51) vérifie |yn | ≤ C max0≤i≤k−1 |yi | que soit n ∈ N. Cela se déduit de la forme de cette solution
générale qui est (c’est vrai pour toute relation (6.51) que la condition de stabilité soit satisfaite ou non) :
yn = p1 (n)ζ1n + p2 (n)ζ2n + ... + pl (n)ζln ,
(6.52)
où ζ1 , ζ2 , ..., ζl sont les racines distinctes de ρ, la multiplicité de ζj étant mj et où p1 , p2 , ..., pl sont des
polynômes, le degré de pj étant au plus mj − 1. Pour établir ce résultat d’algèbre linéaire, on note que la
fonction polynôme p : z → p(z) = αk z k + αk−1 z k−1 + ...α1 z + α0 a un zéro d’ordre mj en z = ζj donc
l n
l
est telle que ddzpl (z)|z=ζj = 0 pour l = 0, ..., mj − 1 ou encore, quel que soit l’entier n ≥ 0, d zdzp(z)
|z=ζj = 0
l
pour l = 0, ..., mj − 1 et ces égalités (il suffit de les écrire) signifient que les suites définies par les formules
suivantes sont solutions de (6.51) :
(j,0)
yn = ζjn ,
(j,1)
yn = nζjn−1 ,
···
(j,i)
yn = n(n − 1)...(n − i + 1)ζjn−i ,
···
(j,m −1)
n−mj +1
yn j
= n(n − 1)...(n − mj + 2)ζj
.
(6.53)
Comme {1, x, ..., x(x − 1)...(x − i + 1), ...x(x − 1)...(x − mj + 2)} forment une base de l’espace des polynômes
de degré mj − 1 au plus (degrés croissants)cela prouve que l’ensemble des seconds membres de (6.52) est un
ensemble de solutions de (6.51). Il est clair que cette forme générale montre que la constante C > 0 telle que
|yn | ≤ C max0≤i≤k−1 |yi | quel que soit n ∈ N existe si et seulement si (6.49) est satisfaite. Cela établit ainsi
le fait que les puissances de la matrice (qui est la matrice compagnon du polynôme ρ) :
 αk−1
α
α0 
− αk−2
·
·
·
·
·
·
−
− αk
α
k
k

1
0
··· ···
0 



.. 
..

.
(6.54)
A=
1
. 



.
.
.
..
..
.. 

0
1
0




yn−k+1
y0
 yn−k 
 y1 




restent bornées si et seulement si (6.49) est satisfaite car 
 = An−k+1  .. . Comme ζ1 = 1
..


 . 
.
yn
yk−1
est toujours racine de ρ, qui est le polynôme caractéristique de A, on peut en déduire qu’en fait kAk = 1
pour une norme subordonnée au moins (on l’admet si nécessaire). Alors, dans les cas de schémas explicites
à pas constants 18 , écrivant le schéma sous la forme, par exemple dans le cas où l’équation est scalaire
18. Les modifications à apporter dans les cas implicites sont mineures.
122
Yi+1



= AYi +hΦ(ti , Yi , h), avec Yi = 

yi+k−1
yi+k−2
..
.
yi






 et Φ(ti , Yi , h) = 


h
αk (βk−1 fn+k−1
+ βk−2 fn+k−2 + ... + β0 fn )
0
..
.
0
(6.55)
on procède de la même manière que 
dans le cas des
méthodes
à
un
pas.
Plus
précisément,
comme
la
solution

y(ti+k−1 )
 y(ti+k−2 ) 


exacte conduit à des vecteurs Yie ≡ 
 qui vérifient, pour un schéma d’ordre p :
..


.
y(ti )
e
Yi+1
=
AYie
+
hΦ(ti , Yie , h)
+





|
O(hp+1 )
0
..
.
0
{z





(6.56)
}
erreur de consistance (locale)
et puisque f est Lipschitzienne (de constante de Lipschitz L), Φ est telle qu’il existe une constante M > 0
telle que kΦ(t, Y, h) − Φ(t, Z, h)k ≤ M kY − Zk quels que soient les vecteurs de Rk Y et Z (et quels que
soient t et h > 0 dans des ensembles appropriés ; M = k max0≤i≤k−1 | αβki |L convient) et l’erreur globale
kEi k ≡ kYie − Yi k vérifie :
kEi+1 k ≤ (kAk +hM )kEi k + O(hp+1 ),
|{z}
(6.57)
1
comme en (6.13). On procède alors de la même manière que pour les méthodes à un pas (on doit tenir compte
aussi des erreurs qu’on peut faire sur les valeurs de démarrage mais vu (6.18) (terme θ0 ) cela est possible).
Pour démontrer que la convergence d’un schéma implique sa stabilité et sa consistance on l’applique à des
équations différentielles particulières très simples : y ′ = 0, y(0) = 0 pour la stabilité, y ′ = 0, y(0) = 1 puis
y ′ = 1, y(0) = 0 pour la consistance.
Pour compléter ces notions, il faut renvoyer à la bibliographie pour des précisions sur :
– la stabilité des méthodes de différentiation rétrogrades pour k ≤ 6 et l’instabilité des autres ainsi que la
“première barrière de Dahlquist” qui dit que l’ordre p d’une méthode multipas (linéaire ; on n’a considéré

k + 2 si k est pair

k + 1 si k est impair
;
ici que des méthodes linéaires) vérifie p ≤

βk
k si αk ≤ 0 (en particulier si la méthode est explicite)
– les techniques utilisées pour permettre des variations du pas h : méthodes de Krogh, de Nordsieck ;
– les développements (asymptotiques) en puissances du pas de l’erreur, les questions de convergence des
schémas de type prédicteur correcteur et les méthodes multipas pour les équations du deuxième ordre
y′′ = f (t, y).
6.2.3
Notions sur les problèmes raides (stiff en anglais)
On va traiter ici un exemple très élémentaire mais, on l’espère éclairant. Dans le code MATLAB qui suit,
on a appliqué à l’équation différentielle y ′ (t) = −50(y(t) − cos(t)) ≡ f (t, y(t)), y(0) = 0, la méthode d’Euler
(explicite), la méthode d’Euler implicite et la règle du trapèze ou schéma de Crank-Nicholson yn+1 = yn +
hn
2 (f (tn , yn ) + f (tn+1 , yn+1 )). Au moyen de la méthode de la variation de constante on peut calculer la
−50x
sin(x)−2500e
solution (exacte) y(x) = 2500 cos(x)+502501
; il y a une transition assez “raide” de y(0) = 0 à
2500
∼
y(x) = 2501 cos(x) entre x = 0 et x . 0.8. On a obtenu les résultats affichés dans la figure qui suit et il faut
expliquer au moins en partie les différences.
function Problemes_raides
% Manip équations différentielles raides (stiff)
%
123





% Méthode d’Euler implicite appliquée à y’=-50*(y-cos(x)), y(0)=0
subplot(3,1,1);
for h=[1.974/50 1.875/50]
x(1)=0; y(1)=0; k=1;
while x(k) <= 1.5, k=k+1; y(k)=y(k-1)-50*h*(y(k-1)-cos(x(k-1))); x(k)=x(k-1)+h; end
plot(x,y); axis([0 1.6 -0.5 2]); hold on; clear x y;
end
x=0:0.01:1.5; y=(2500*(cos(x)-exp(-50*x))+50*sin(x))/2501; plot(x,y,’r’)
title({’Euler explicite sur dy/dx=-50*(y-cos(x)), y(0)=0’;...
’Résultats avec deux pas et solution exacte’})
% Méthode d’Euler implicite appliquée à y’=-50*(y-cos(x)), y(0)=0
subplot(3,1,2);
for h=[1.974/50 1.875/50]
x(1)=0; y(1)=0; k=1;
while x(k) <= 1.5, k=k+1; x(k)=x(k-1)+h; y(k)=(y(k-1)+50*h*cos(x(k)))/(1+50*h); end
plot(x,y); axis([0 1.6 -0.5 2]); hold on; clear x y;
end
x=0:0.01:1.5; y=(2500*(cos(x)-exp(-50*x))+50*sin(x))/2501; plot(x,y,’r’)
title({’Euler implicite sur dy/dx=-50*(y-cos(x)), y(0)=0’;...
’Résultats avec les deux mêmes pas et solution exacte’})
% Règle du trapèze (ou de Crank-Nicholson)
subplot(3,1,3);
%for h=[1.974/50 1.875/50]
for h=1.974/50
x(1)=0; y(1)=0; k=1;
while x(k) <= 1.5
k=k+1; x(k)=x(k-1)+h;
y(k)=((1-50*h/2)*y(k-1)+50*h/2*(cos(x(k-1))+cos(x(k))))/(1+50*h/2);
end
plot(x,y); axis([0 1.6 -0.5 2]); hold on; clear x y;
end
x=0:0.01:1.5; y=(2500*(cos(x)-exp(-50*x))+50*sin(x))/2501; plot(x,y,’r’)
title({’Crank-Nicholson - implicite - sur dy/dx=-50*(y-cos(x)), y(0)=0’;...
’Résultats avec le plus grand pas et solution exacte’})
Euler explicite sur dy/dx=−50*(y−cos(x)), y(0)=0
Résultats avec deux pas et solution exacte
2
1
0
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Euler implicite sur dy/dx=−50*(y−cos(x)), y(0)=0
Résultats avec les deux mêmes pas et solution exacte
1.6
2
1
0
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Crank−Nicholson − implicite − sur dy/dx=−50*(y−cos(x)), y(0)=0
Résultats avec le plus grand pas et solution exacte
1.6
2
1
0
0
0.2
0.4
0.6
0.8
124
1
1.2
1.4
1.6
La méthode d’Euler explicite avec un pas constant h > 0 sur une équation différentielle y ′ (t) = f (t, y(t)),
y(0) = y0 s’écrit :
yn+1 = yn + hf (nh, yn ), n ≥ 0,
(6.58)
yn+1 = REE (λh)yn donc yn = (REE (λh))n y0 avec REE (z) = 1 + z.
(6.59)
et si l’équation différentielle est y ′ = λy où λ est une constante (solution en eλt y0 ) :
La solution numérique “n’explose pas” seulement si |R(λh)| ≤ 1 ce qui équivaut à −1 ≤ 1 + λh ≤ 1 donc à,
2
. Dans l’exemple précédent on conçoit que la “bonne” valeur de λ est −50, les pas adoptés
si λ < 0, h ≤ |λ|
sont trop proches de leur limite et on voit des oscillations parasites.
La méthode d’Euler implicite avec un pas constant h > 0 sur une équation différentielle y ′ (t) = f (t, y(t)),
y(0) = y0 s’écrit :
(6.60)
yn+1 = yn + hf ((n + 1)h, yn+1 ), n ≥ 0,
et si l’équation différentielle est y ′ = λy :
1
,
(6.61)
1−z
Pour λ < 0 et h > 0, la solution numérique n’explose jamais et on constate de bons résultats ; il n’y a plus
d’oscillations parasites.
Avec la règle du trapèze, il en est de même et le résultat est encore meilleur parce que le schéma est
d’ordre 2 :
yn+1 = REI (λh)yn donc yn = (REI (λh))n y0 avec REI (z) =
yn+1 = RCN (λh)yn donc yn = (RCN (λh))n y0 avec RCN (z) =
1 + 2z
.
1 − 2z
(6.62)
D’une manière générale l’application d’une méthode à un pas à l’équation différentielle y ′ = λy se traduit
en une récurrence de la forme :
(6.63)
yn+1 = R(hλ)yn .
Cela a conduit Dahlquist à introduire le domaine de stabilité du schéma S = {z ∈ C : |R(z)| ≤ 1} et on
dit qu’un schéma à un pas est A-stable (absolument stable) si C− ≡ {z ∈ C : ℜe(z) ≤ 0} ⊆ S. Ainsi
avec un schéma A-stable, pour ℜe(λ) < 0 tous les pas h donnent des résultats “corrects”. Le schéma d’Euler
explicite n’est pas A-sable, par contre les schémas d’Euler implicite et de Crank-Nicholson le sont. Il y a
d’autres notions de stabilité comme la L-stabilité qui est la A-stabilité avec en plus limz→∞ R(z) = 0. On
peut montrer que les schémas de Runge-Kutta explicites ne sont pas A-stables. Par contre il y a des méthodes
de Runge-Kutta implicites A-stables et même L-stables et des extensions de ces méthodes qui utilisent la
∂f
, appelées méthodes de type Rosenbrock sont souvent utilisées pour la résolution numérique de
dérivée ∂y
ces problèmes raides.
La notion de A-stabilité pour les méthodes multipas αk yn+k + αk−1 yn+k−1 + ... + α0 yn = h(βk fn+k + ... +
β0 fn ) s’introduit de la manière suivante. On applique la méthode à une équation différentielle y ′ = λy et cela
conduit à considérer, avec µ = λh, le polynôme (αk −µβk )ζ k +...+(α0 −µβ0 ) = 0 dont on note ζj (µ) les racines.
toutes les racines ζj (µ) satisfont |ζj (µ)| ≤ 1,
Le domaine de stabilité de la méthode est S = {µ∈ C;
} et
les racines multiples satisfaisant |ζj (µ)| < 1
la méthode est dite A-stable si C− ⊆ S. La seconde barrière de Dahlquist dit qu’une méthode multipas
A-stable est forcément d’ordre p ≤ 2. Enfin, si on définit, pour 0 < α < π2 , la notion de A(α)-stabilité par le
fait qu’une méthode est dite A(α)-stable si Sα ≡ {µ∈ C; | arg(−µ)| < α, µ 6= 0} ⊆ S, alors on peut établir
que les méthodes de différentiation rétrograde à k = 1, 2, ..., 6 étapes sont A(α)-stables avec les valeurs de α
suivantes (on a aussi {µ∈ C; arg ℜe(µ) < −D} ⊆ S avec les valeurs de D indiquées dans le tableau) :
k
α
D
1
90◦
0
2
90◦
0
3
86.03◦
0.083
4
73.35◦
0.667
125
5
51.84◦
2.327
6
17.84◦
6.075
Pour toutes ces considérations et des compléments, en particulier la notion d’étoile d’ordre, il faut se
reporter à la bibliographie et en particulier au livre E. Hairer, G. Wanner, 1996, Solving ordinary differential
equations II : Stiff and Differential-Algebraic problems : Springer-Verlag, Berlin.
Pratiquement on peut déceler qu’un problème est raide par le fait qu’une méthode numérique “ordinaire”
(Runge-Kutta explicite, Adams) adaptative aboutit à de petits pas.
Voici les commandes MATLAB pour résoudre le problème proies prédateurs de Lokta Volterra (r représente une population de lapins (rabbits en anglais) et f représente une population de renards (fox en
anglais) ; la solution est périodique, la période étant fonction des conditions initiales ; pour plus de détails
voir le livre de Moler, exercice 7.15) :
dr
dt = 2r − αrf
df
dt = −f + αrf
r(0) = r0 , f (0) =
(6.64)
f0
les données étant α = 0.01, r0 = 300, f0 = 150 :
f=@(t,y) [2*y(1)-0.01*y(1)*y(2); -y(2)+0.01*y(1)*y(2)]
ode23(f,[0 20],[300 150])
La première instruction définit le système différentiel, la deuxième le résout et affiche automatiquement le
résultat. Pour conserver le résultat dans une structure afin de le reéchantillonner et par exemple le déssiner
d’une autre façon on peut utiliser les instructions :
sol=ode23(f,[0 20],[300 150])
xx=0:0.01:20; yy=deval(sol,xx); figure(2), plot(xx,yy(1,:),xx,yy(2,:))
Pour plus détails il faut se reporter à la documentation MATLAB. Il faut quand même signaler que les
“solveurs” proposés pour les problèmes ordinaires (non raides) sont ode23 (méthode de type Runge Kutta de
précision modeste mais rapide), ode45 (méthode de type Runge Kutta précise) et ode113 (méthode d’AdamsBashforth-Moulton PECE d’ordre variable plus précise encore). De plus on peut modifier des options pour
effectuer certaines opérations. Par exemple avec la fonction (écrite dans un fichier (je ne suis pas arrivé à
mes fins avec une fonction en ligne de commande comme f plus haut) nommé evenment.m) :
function [valeur,fin,direction] = evenment(t,y)
valeur=y(1)-300; fin=1; direction=1;
les instructions :
options=odeset(’Events’,@evenment);
[t,y,te,ye] = ode23(f,[0 20],[300 150],options);
te
ye
fournissent la période 4.9981 (te(2)) qu’on peut aussi déterminer approximativement sur les graphiques.
Les “solveurs” proposés, adaptés aux problèmes raides sont ode15s, ode23s, ode23t et ode23tb et pour
montrer l’intérêt de ces codes, on peut proposer les manipulations suivantes, tiré du livre de Moler (paragraphe
7.9), avec une équation qui modélise la propagation d’une flamme :
2
dy
= y 2 − y 3 , 0 ≤ t ≤ , y(0) = δ
dt
δ
delta=0.0001;
f=@(t,y) y^2-y^3
options=odeset(’RelTol’,1e-4);
figure(3)
ode45(f,[0 2/delta],delta,options);
% ajouter figure toolbar (menu view) et faire à partir de tools options:
% d’abord quelques zooms + “unconstrained” sur la branche supérieure
% puis quelques zooms + verticaux seulement
%
disp(’Appuyez sur une touche pour continuer’)
pause
delta=0.0001;
figure(4)
126
ode23s(f,[0 2/delta],delta,options);
127
6.3
TD et TP du chapitre 6
TD n0 6 : Résolution numérique de problèmes portant sur des équations différentielles
ordinaire
1) Le problème de Cauchy :
y ′ (t) =
p
y(t) y(0) = 0
a la solution non triviale y(t) = ( 2t )2 . Pourtant l’application de la méthode d’Euler, avec un pas h > 0
constant par exemple, fournit toujours les approximations yn aux points tn = nh, n∈ Z yn = 0. Expliquer le
paradoxe.
2) Pour t = nh où h∈ R, h > 0 et n ∈ N, soit η(t; h) = yn la solution approchée fournie par le schéma
d’Euler pour le problème de Cauchy :
y ′ = y, y(0) = 1.
a) Montrer que η(t; h) = (1 + h)t/h .
b) Montrer que η(t; h) admet le développement :
η(t; h) =
∞
X
τi (t)hi avec τ0 (t) = et ,
i=0
qui converge pour |h| < 1.
c) Déterminer τ1 (t). Retrouver ainsi l’ordre du schéma d’Euler.
3) Établir que le schéma de Runge Kutta dont
le tableau 19
0
est 1
(appliqué à y(t) = f (t, y(t)), y(0) =
1
2
1
2
y0 ), schéma attribué à Runge 20 dans le livre E. Hairer, S.P. Nørsett, G. Wanner,1993, Solving ordinary differential equations I. Nonstiff problems : Springer-Verlag, Berlin, mais souvent appelé méthode des trapèzes
explicites, c’est à dire en clair :
k1 = f (t, y)
k2 = f (t + h, y + hk1 )
y1 = y + h2 (k1 + k2 )
est d’ordre 2 (il faut montrer que, avec y = y(t) dans ces formule, y(t + h) − y1 = O(h3 ) pour, bien sûr,
t → y(t) régulière)
4) Montrer que la méthode multipas, avec tk = t0 + kh :
yj+2 + 4yj+1 − 5yj = h(4f (tj+1 , yj+1 ) + 2f (tj , yj ))
est d’ordre 3 (calculer le développement de Taylor à l’ordre 4 de y(tj + 2h) − yj+2 où yj+2 est tiré de
l’expression précédente dans laquelle on porte les valeurs exactes yj = y(tj ), yj+1 = y(tj+1 )), mais ne
converge pas.
5) On a appliqué à l’équation différentielle ǫ y ′ (x) = −(y(x) − cos(x)) ≡ f (x, y(x)), y(0) = 0, la méthode
0
19. pour la méthode de Runge Kutta classique d’ordre 4 le tableau est
1
2
1
2
1
2
1
1
6
1
2
2
6
.
1
2
6
1
6
20. C. Runge, 1895, Ueber die numerische Auflösung totaler Differentialgleichungen : Göttinger Nachr., p 252 – 257
128
d’Euler (explicite), la méthode d’Euler implicite et la règle du trapèze implicite ou schéma de Crank-Nicolson
yn+1 = yn + h2n (f (xn , yn )+f (xn+1 , yn+1 )). En cherchant une solution particulière sous forme a cos(t)+b sin(t),
calculer la solution exacte. Réponse : y(x) = exp(−t/ǫ)C + cos(t) + ǫ sin(t) + O(ǫ2 ).
1. Montrer que le schéma d’Euler explicite avec des pas constants donne avec tn = n h
yn+1 = (1 − h/ǫ) yn + (h/ǫ) cos(tn ).
2. En déduire que yn = (1 − h/ǫ)n C + cos(tn ) + ǫ sin(tn ) + O(h ǫ).
3. En déduire que la solution numérique est bornée ssi h < 2ǫ.
4. Montrer que le schéma d’Euler implicite avec des pas constants donne avec tn = n h
(1 + h/ǫ) yn+1 = yn + (h/ǫ) cos(tn )
dont la solution peut être écrite sous la forme
yn = (1 + h/ǫ)−n C + cos(tn ) + ǫ sin(tn ) + O(h ǫ)
5. Commenter les résultats calculés numériquement avec MATLAB pour ǫ = 1/50.
Euler explicite sur dy/dt=−50*(y−cos(t)), y(0)=0
Résultats avec pas= 1.975/50 et 1.875/50 vs solution exacte
2
1
0
0
0.2
0
0.4
0.6
0.8
1
1.2
Euler explicite sur dy/dt=−50*(y−cos(t)), y(0)=0
Résultats avec pas=2.1/50 vs solution exacte
1.4
1.6
0.2
0.4
0.6
0.8
1
1.2
1.4
Euler implicite sur dy/dt=−50*(y−cos(t)), y(0)=0
Résultats avec pas= 2.1/50 et 1.875/50 vs solution exacte
1.6
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Crank−Nicolson − implicite − sur dy/dt=−50*(y−cos(x)), y(0)=0
Résultats avec les pas 2.1/50 et 1.875/50 vs solution exacte
1.6
0
0.2
2
1
0
2
1
0
2
1
0
0.4
0.6
0.8
129
1
1.2
1.4
1.6
TP No 7
NOTIONS SUR LES MÉTHODES DE RÉSOLUTION DU PROBLÈME DE
CAUCHY POUR LES ÉQUATIONS DIFFÉRENTIELLES ORDINAIRES
On propose une brève introduction à la résolution numérique des problèmes consistant à calculer une
fonction t ∈ R → y(t) ∈ R telle que :
y ′ (t) = f (t, y(t)) pour t ∈ R, y(t0 ) = y0 ,
(6.65)
où y ′ (t) ≡ dy
dt (t) désigne la dérivée de y par rapport à t au point (ou à l’instant) t et la fonction f : (t, y) ∈
R × R → f (t, y) ∈ R et les réels t0 et y0 sont donnés. Un tel problème est appelé problème de Cauchy, ou
de condition initiale pour l’équation différentielle y ′ (t) = f (t, y(t)). Dans ce qui suit on donne un aperçu
très succinct d’une part de la méthode d’Euler qui est la méthode de résolution numérique de (6.65) la plus
élémentaire et enfin on étudie un code adaptatif d’intégration numérique de (6.65) (c’est à dire dans lequel
le pas est choisi de manière automatique adapté à la précision demandée) fondé sur une formule de Runge
Kutta particulière (méthode de Merson).
1) Théorie.
a) Un théorème d’existence et d’unicité.
si f est une fonction continue de R × R dans R telle qu’il existe une constante L > 0 pour laquelle (on
dit alors que f est Lipschitzienne en y de constante de Lipschitz L) :
|f (t, y2 ) − f (t, y1 )| ≤ L|y2 − y1 |, pour tout (t, y1 , y2 ) ∈ R3 ,
alors (6.65) a une solution et une seule t ∈ R → y(t) ∈ R continûment différentiable.
Rappelons le principe de la preuve. Les conditions (6.65) sont équivalentes à :
Z t
y(t) = y0 +
f (s, y(s))ds,
(6.66)
(6.67)
t0
équation fonctionnelle de point fixe à laquelle on applique la méthode des approximations successives ce
qui signifie qu’on engendre une suite de fonctions de R dans R, t → y (n) (t) définies par :
Z t
y (0) (t) = y0 , y (n+1) (t) = y0 +
f (s, y (n) (s))ds, n ≥ 0,
(6.68)
t0
b) La méthode d’Euler.
Étant une suite de points tini = t0 < t1 < ... < tN = tf inal 21 , pour lesquels h = max0≤n≤N −1 |hn |, avec
hn = tn+1 − tn , est suffisamment petit, cette méthode consiste à approcher la solution y(tn ) de (6.65) aux
“noeuds” tn par les réels yn fournis par l’algorithme ou relation de récurrence (où y0 est donné) :
yn+1 = yn + hn f (tn , yn ), 0 ≤ n ≤ N − 1.
(6.69)
On a montré en cours que sous les hypothèses du a) précédent, y(tn ) − yn tend vers zéro lorsque h → 0
et que si y ′′ est continue sur [tini , tf inal ], alors y(tn ) − yn = O(h) lorsque h → 0 (ce qui signifie qu’il existe
une constante C > 0 telle que |y(tn ) − yn | ≤ Ch : on dit alors que la méthode est d’ordre 1).
Le principe de la preuve est simple, il suffit d’accumuler et propager les erreurs commises à chaque pas :
Ainsi la suite des erreurs totales à l’instant final tn notée en = y(tn ) − yn vérifie :
e0 = 0, en+1 = en + hn (f (tn , y(tn )) − f (tn , yn )) + εn , n ≥ 0,
(6.70)
où les quantités εn , appelées erreurs de consistance (du schéma d’Euler) ne dépendent que de la solution
exacte y(t) et sont définies par :
21. Pour fixer les idées on suppose tini < tf inal mais le cas tini > tf inal se traite exactement de la même manière en changeant
les signes des hn .
130
εn = y(tn+1 ) − y(tn ) − hn f (tn , y(tn )),
(6.71)
yn+k = αk−1 yn+k−1 + ... + α0 yn + hn+k−1 φ(tn+k , ..., tn ; yn+k , ..., yn ),
(6.72)
si bien qu’en général si y ′′ est continue sur [tini , tf inal ], εn = O(h2n ) ;
Remarque : Dans la pratique, on applique rarement cette méthode d’Euler et la plupart des méthodes
utilisées sont décrites par la formule générale :
où α0 ,...,αk−1 sont des constantes données et φ est une fonction donnée qui dépend de f . Si k = 1 on parle
de méthodes à pas séparés et l’étude de la convergence est une généralisation facile de celle de la méthode
d’Euler. Si k > 1 on parle de méthodes à pas liés et l’étude de la convergence est un peu compliquée par la
nécessité de vérifier une condition de stabilité (pour plus de détails, voir la bibliographie). Si φ ne dépend
pas de yn+k on parle de méthodes explicites, si non on parle de méthodes implicites (certaines méthodes
implicites sont utilisées pour résoudre des problèmes dits “raides” (stiff en anglais) où la solution peut varier
très rapidement à cause par exemple d’une grande constante de Lipschitz : ici encore, pour plus de détails,
voir la bibliographie). Comme exemple de méthodes bien connues, il faut citer :
– la méthode de Heun ou de Runge-Kutta d’ordre 2 (pour simplifier on écrit ces formules à pas hn = h
constant et on note fn = f (tn , yn )) :
1
yn+1 = yn + h(fn + f (tn+1 , yn + hfn )),
(6.73)
2
– la méthode de Runge d’ordre 4 classique (qui n’est pas
 la seule méthode de Runge Kutta d’ordre 4) :
k1 = hfn



1
k2 = hf (tn + 12 h, yn + 12 k1 )
,
(6.74)
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 ), avec
 k3 = hf (tn + 12 h, yn + 12 k2 )
6


k4 = hf (tn + h, yn + k3 )
– la règle du trapèze (implicite à un pas, aussi appelée méthode de Crank-Nicholson dans le domaine des
équations aux dérivées partielles) :
1
(6.75)
yn+1 = yn + h(fn + fn+1 ),
2
– puis comme exemple de méthodes à pas liés (stables), la méthode d’Adams-Bashforth d’ordre 4 qui est
explicite :
h
yn+4 = yn+3 + (55fn+3 − 59fn+2 + 37fn+1 − 9fn ),
(6.76)
24
– et la méthode d’Adams-Moulton d’ordre 4 qui est implicite :
h
yn+3 = yn+2 + (9fn+3 + 19fn+2 − 5fn+1 + fn ).
(6.77)
24
Il est possible de vérifier les ordres de ces méthodes au moyen du logiciel maple.
2) Etude d’un code adaptatif simple fondé sur une méthode de Runge Kutta particulière :
la méthode de Merson.
Parmi les méthodes de Runge-Kutta d’ordre 4, la méthode de Merson permet un évaluation simple de
l’erreur de consistance conduisant à un choix automatique du pas d’intégration. Elle consiste à effectuer les
opérations suivantes :
la valeur de y au point initial t0 est notée y0 ; lors d’un pas de cette méthode où on cherche une approximation de y, notée y1 au point t1 = t0 + h, h étant le pas d’intégration, on utilise les quatre points
intermédiaires tA = tB = t0 + h3 , tC = t0 + h2 , tD = t0 + h = t1 et si on convient d’écrire yZ′ = f (tZ , yZ ) avec
Z = 0, A, B, C, D,
– y1 est donnée par les formules :

yA = y0 + h3 y0′



′ )
h
yB = y0 + h6 (y0′ + yA
′
) avec
,
(6.78)
y1 = y0 + (y0′ + 4yc′ + yD
h ′
′ )
yC = y0 + 8 (y0 + 3yB

6


′ + 4y ′ )
yD = y0 + h2 (y0′ − 3yB
C
131
– l’estimation de la valeur absolue de l’erreur de “troncature” étant :
1
1
3 ′
4 ′
1 ′
|q| avec q = | hy0′ − hyB
+ hyC
− hyD
).
(6.79)
5
3
2
3
6
a) Manipulation avec maple.
En utilisant les éléments de réponse (il peut être intéressant de faire la manipulation mais ce n’est pas
nécessaire et même à éviter si vous êtes nombreux connectés tous sur une même machine au même moment)
dire comment utiliser le logiciel maple pour vérifier que l’ordre de la méthode est 4 (cela qui signifie que
l’erreur de consistance c’est à dire l’écart y(t1 ) − y1 = O(h4+1 ) lorsque y0 est la valeur exacte et la solution
est suffisament dérivable).
b) Écriture des formules (6.78).
′ , p = hy ′ , p =
Écrire les formules (6.78) et (6.79) en fonction des paramètres p0 = h3 y0′ , p1 = h3 yA
2
3
B
′ , p = h y ′ (au lieu de y ′ , y ′ , y ′ , y ′ , y ′ ). On obtiendra ainsi :
p0 + 4h
y
4
0
A B C D
3 C
3 D
y1 = y0 + 0.5(p3 + p4 ), q = |(p3 + p4 ) − 1.5(p2 + p4 )|.
(6.80)
c) un algorithme adaptatif.
– les données sont la valeur initiale tini de t, la valeur correspondante de y notée encore y, la valeur
finale de t à atteindre tf inal , la fonction f , une estimation h du premier pas à utiliser (un appel avec
h = tf inal − tini est possible), une borne inférieure de la valeur absolue du pas à ne pas dépasser hmin
et l’erreur relative demandée errel ; en fin de calcul, l’approximation de y(tf inal ) est rangée dans y (et
le code fournit aussi le nombre d’appels nf à la fonction f mais on ne tient pas compte de ce détail
dans la description de l’algorithme) ;
– avant tout calcul, on pose e5 = 5errel puis sens = .T RU E. ou .F ALSE. selon que tf inal ≥ tini ou
tf inal < tini et on modifie éventuellement le signe de h pour que l’on ait h > 0 si tf inal ≥ tini et h < 0
si non ;
– au début de chaque pas d’intégration, on pose f in1 = .F ALSE., ts = t, ys = y puis selon que t + h
“dépasse” ou non tf inal , f in2 = .T RU E. ou .F ALSE. (et on modifie h en conséquence si x + h dépasse
tf inal ) ; on calcule alors y = y1 (approximation en t = ts + h) aux moyen de (6.78), (6.79), (6.80) ;
ensuite :
si f in1 est .T RU E. selon que f in2 est .T RU E. ou .F ALSE. on s’arrête ou on effectue un nouveau pas
d’intégration ;
si non, on calcule q et r = |y|e5 (|.| est écrit ABS() dans le programme Fortran) puis
si q ≤ r (le pas convient) on remplace h par 2h si q ≤ 0.03125r (on peut même prendre un pas plus
grand) et comme précédemment selon la valeur de f in2 on s’arrête ou non ;
si q > r (le pas est trop grand : il faut le diminuer et recommencer le calcul) on pose t = ts , on remplace h par 0.5h puis (h ne doit pas devenir trop petit) si |h| > hmin on recommence le calcul de y = y1
et si |h| ≤ hmin on replace h par signe(h)hmin (ce qui ‘’s’écrit” en Fortran sign(h, hmin )) puis on pose
f in1 = .T RU E. et on recommence le calcul de y = y1 (au point t = ts + h).
QUESTIONS DE PROGRAMMATION
3) Manipulations à partir du code Fortran.
Donner les résultats des équations différentielles, obtenus en t = tf inal , dans les cas suivants :
2
, tini = 1, y0 = sin(1) + 1, tf inal = 2 , puis tf inal = 10 . (La solution exacte est
– f (t, y) = t cos(t)+y
t
y(t) = t sin(t) + t)
– On peut dessiner le résultat calculé numériquement en tapant dans le logiciel gnuplot :
plot ’equadiff.res’ with points, x*sin(x)+x
4
– f (t, y) = 1+t
2 , tini = 0, y0 = 0, tf inal = 1
2
– f (t, y) = e−t , tini = 1, y0 = 0, tf inal = 2
132
4) Usage de Maple.
Utiliser le fichier ’tp7-maple.mws’ pour traiter les exemples ci-dessus, ou toute autre équation différentielle du premier ordre.
FIN DES QUESTIONS OBLIGATOIRES.
133
TP No 8
NOTIONS SUR LES MÉTHODES DE RÉSOLUTION DES PROBLÈMES AUX
LIMITES POUR LES ÉQUATIONS DIFFÉRENTIELLES ORDINAIRES
A) LE TP.
On propose une brève introduction à la résolution numérique des problèmes consistant à calculer une
fonction x ∈ [α, β] ⊂ R → y(x) ∈ R telle que (la généralisation au cas y ∈ Rn , n ≥ 2 est possible, et la
généralisation naturelle est celle où on impose 2n conditions liant les valeurs de y et y′ en x = α et x = β) :
d2 y
y ′′ (x) = f (x, y(x)) pour x ∈ [α, β] ⊂ R, y(α) = γ, y(β) = δ
(6.81)
où y ′′ (t) ≡ dx2 (x) désigne la dérivée seconde de y par rapport à x au point x et la fonction f : (x, y) ∈
[α, β] × R → f (x, y) ∈ R, l’intervalle fermé borné de R [α, β] et les réels γ et δ sont donnés. Un tel problème
est appelé problème aux limites (ou de conditions aux limites) avec conditions de Dirichlet aux deux
extrémités ou encore problème de Dirichlet, pour l’équation différentielle y ′′ (x) = f (x, y(x)) sur l’intervalle
[α, β]. Lorsque les conditions aux limites consistent à imposer les valeurs de la dérivée de y en x = α et
x = β, on parle de problèmes de Neumann, lorsque les conditions aux limites sont du type Dirichlet en une
extrémité et du type Neumann en l’autre extrémité, on parle de problèmes mêlés. Des conditions aux limites
du type cα y(α) + dα y ′ (α) = eα (cα , dα , eα constantes, cα et dα étant non nulles) sont appelées conditions
de Fourier ou de Robin. On peut aussi rencontrer des problèmes où deux relations sont imposées entre
les valeurs de y et y ′ à la fois en α et β : par exemple les conditions aux limites y(α) = y(β), y ′ (α) = y ′ (β)
sont appelées périodiques. Enfin lorsque f est linéaire en y, on parle de problèmes aux limites linéaires. La
théorie de ce genre de problèmes est plus compliquée que celle du problème de Cauchy du TP 7 car on peut
rencontrer des problèmes sans solutions et d’autres avec un nombre infini de solutions comme en algèbre
linéaire lorsque la matrice d’un système linéaire est de déterminant nul.
Dans ce qui suit on donne un aperçu très succinct de la méthode des différences finies pour résoudre
(6.81) dans le cas linéaire et enfin on étudie le code correspondant où il faut inverser une matrice tri-diagonale
symétrique.
Les propositions d’études de la partie facultative : une amélioration de la méthode des différences finies
au moyen du schéma de Cowell d’ordre 4 qui donne une matrice tri-diagonale mais non symétrique, puis une
introduction à la méthode des éléments finis (qui se généralise avec beaucoup de succès aux équations aux
dérivées partielles) avec un code en C (pour changer).
1) Théorie.
a) La méthode des différences finies.
On s’intéresse donc au problème aux limites :
“ trouver une fonction x ∈ [α, β] → y(x) ∈ R telle que :
−y ′′ (x) + c(x)y(x) = f (x) pour α ≤ x ≤ β, y(α) = γ, y(β) = δ, ”
(6.82)
où les données sont les constantes réelles α, β, γ, δ, et les fonctions continues c et f avec c(x) ≥ 0 (pour
assurer la croissance en y).
ex
Dans ce qui suit N étant un entier ≥ 1, on pose h = (β−α)
N +1 , ci = c(α + ih), fi = f (α + ih), yi = y(α + ih).
Dans la méthode des différences finies d’ordre deux, on approche la dérivée seconde y ′′ (x) par l’expression :
y(x − h) − 2y(x) + y(x + h)
.
h2
En appliquant la formule de Taylor-Lagrange à l’ordre 4 :
y ′′ (x) ≃
y(x ± h) = y(x) ± hy ′ (x) +
h2 ′′
h3
h4
y (x) ± y ′′′ (x) + y (4) (x ± θx± h),
2
6
24
134
(6.83)
(6.84)
où 0 < θx± < 1, et le théorème des valeurs intermédiaires (qui permet de dire que si x ∈ R → ϕ(x) ∈ R
est une fonction continue et x1 < x2 sont deux réels quelconques, alors on peut trouver x3 ∈]x1 , x2 [ tel que
1
2 (ϕ(x1 ) + ϕ(x2 )) = ϕ(x3 )), on voit que si y est prolongeable à R en une fonction quatre fois continûment
différentiable (on écrit alors y ∈ C 4 ([α, β])), alors :
−y(x − h) + 2y(x) − y(x + h) h2 (4)
+ y (x + θx h),
h2
12
où −1 < θx < 1, d’où la terminologie “ordre deux”.
Reportant cette approximation de −y ′′ dans (6.82) pour x = α + ih, 1 ≤ i ≤ N , on obtient :
−y ′′ (x) =
ex + 2y ex − y ex
−yi−1
i
i+1
ex
+ ci yiex = fi + ǫi pour 1 ≤ i ≤ N, y0ex = γ, yN
+1 = δ,
h2
(6.85)
(6.86)
2
où les termes d’erreur sont ǫi = − h12 y (4) (α + ih + θi h), avec |θi | < 1. Négligeant ces termes d’erreur, on est
conduit à résoudre le système linéaire à matrice symétrique tridiagonale :
1
Ah yh = bh avec Ah = 2
h






2 + h2 c1
−1
0
.
0
−1
2 + h2 c2 −1
.
.
0
.
.
.
0
.
.
−1 2 + h2 cN −1
−1
0
.
0
−1
2 + h2 cN






 , bh = 





f1 + hγ2
f2
..
.
fN −1
fN + hδ2




.


(6.87)
La méthode des différences finies (d’ordre deux) consiste ainsi à résoudre le système linéaire (6.87) et on
démontre que si y ∈ C 4 ([α, β]) alors on a la majoration |yiex − yi | ≤ Ch2 pour une constante C qui ne dépend
que de la solution exacte y (si y n’est que de classe C 2 il y a encore convergence : simplement l’erreur n’est
plus d’ordre deux).
Principe de la preuve. Dans un premier temps on démontre que Ah est inversible car un calcul
simple
P
2
(qu’il est intéressant de faire car c’est une intégration par parties discrète) montre que v⊤ Ah v = i=N
i=1 ci vi +
2
P
v
v12
(vi −vi−1 )2
+ i=N
+ hN2 , si bien que Ah v = 0 ⇒ v = 0 (et en dimension finie injectivité ⇔ surjectivité ⇔
i=2
h2
h2
bijectivité pour une application linéaire.
Dans un deuxième temps, on démontre que Ah est monotone ce qui signifie qu’elle est inversible et que les
coefficients de la matrice inverse A−1
h sont positifs ou nuls ; il faut d’abord prouver (en faire un lemme) que
“A monotone ⇔ (Av ≥ 0 ⇒ v ≥ 0)” (l’image réciproque par A du cône constitué des vecteurs positifs est
incluse dans ce cône — ici x ≥ 0 pour un vecteur signifie xi ≥ 0 pour tout i —) (ceci n’est pas très compliqué :
si A est monotone et Av ≥ 0 alors forcément v = A−1 (Av) ≥ 0 et dans l’autre sens si (Av ≥ 0 ⇒ v ≥ 0)
on a (Av = 0 ⇒ v = 0) (en appliquant la propriété à v et à −v) donc A est inversible si bien qu’en
remarquant que la jième colonne de A−1 soit (A−1 )j vérifie A(A−1 )j = ej ≥ 0 (qui est ej ?) on voit que les
coefficients de A−1 sont tous positifs — cqfd — ) ; alors, pour prouver que la matrice Ah définie en (6.87)
est monotone on applique ce 
lemme (si Ah v ≥ 0 et si l’indice r est défini par vr = min1≤j≤N (vj ), alors
(2 + h2 c1 )vr − vr+1 si r = 1

1
−vr−1 + (2 + h2 c1 )vr − vr+1 si 1 < r < N , il est facile de conclure vr ≥ 0
en écrivant 0 ≤ (Ah v)r = h2

−vr−1 + (2 + h2 c1 )vr si r = N
dans le cas où tous les ci sont > 0 ; lorsque certains ci sont nuls on peut toujours remarquer que pour tout
σ > 0 la matrice Ah + σI (I identité dans RN ) est monotone et il ne reste qu’à écrire (en le justifiant)
−1
A−1
h = limσ→0, σ (Ah + σI) ) ;
−1
ex = (y ex , ..., y ex )⊤ ,
Dans la dernière étape on majore kyex − yh k∞ = kA−1
1
N
h ǫk∞ ≤ kAh k∞ kǫk∞ où y
⊤
y est la solution de (6.87), ǫ = (ǫ1 , ..., ǫN ) et (rappel) kyk∞ = maxi |yi | en remarquant que l’identité
−1
−1
−1
−1
−1
A−1
h − Ah0 = Ah0 (Ah0 − Ah )Ah , où Ah0 est la matrice Ah lorsque c = 0, implique
Pdonc
Pque Ah ≤ Ah0
−1
−1
kAh k∞ ≤ kAh0 k∞ (car pour une matrice B à coefficients positifs kBk∞ ≡ maxi j |bij | = maxi j bij )
: or la positivité de A−1
si bien que si on peutP
majorer kA−1
h0 implique (à détailler un peu)
h0 k∞ c’est
P gagné
−1
−1
−1
−1
que kAh0 k∞ ≡ maxi j |(Ah0 )ij | = maxi j (Ah0 )ij = kAh0 ek∞ où e = (1, ..., 1)⊤ (vecteur dont toutes
les composantes sont 1) et comme la solution de −y ′′ (x) = 1, si α ≤ x ≤ β, y(α) = y(β) = 0 qui est
(et a une dérivée quatrième nulle) est calculée exactement en résolvant le système linéaire
y(x) = (x−α)(β−x)
2
135
Ah0 yh0 = e, on peut affirmer que (A−1
h0 e)i =
C=
(β−α)2
96
max0≤x≤1
ih(N +1−i)h
2
|y (4) (x)|.
et kA−1
h0 k∞ ≤
(β−α)2
8
ce qui conduit au résultat avec
2) Un algorithme de résolution du sytème linéaire (symétrique, tri-diagonal) (6.87).
a) Pour résoudre le système linéaire (6.87), écrit sous la forme :

b1 a 1
0
.
0
 a1 b2
a
.
.
2


Au = d avec A =  0 .
.
.
0
 .
. aN −2 bN −1 aN −1
0 .
0
aN −1
bN



 , d = (d1 , ..., dN )⊤ ,


(6.88)
on utilise l’algorithme (où les données sont b1 ,...,bN ,a1 ,...,aN −1 , d1 , ...,dN ) :
dk −ak−1 wk−1
ak
on pose a1 = 1, z1 = ab11 , w1 = db11 puis zk = bk −ak−1
zk−1 , wk = bk −ak−1 zk−1 pour k = 2, 3, ..., N ;
alors u1 , ..., uN sont donnés par : uN = wN , uk = wk − zk uk+1 pour k = N − 1, N − 2, ..., 1.
Montrer que si bk − ak−1 zk−1 6= 0 pour k = 2, ..., N on a :





1 z1 0 .
0

 
  0 1 z2 .
. 

 



=
 . .
. .
0 

 



 
 . .
. 1 zN −1 
0 .
. 0
1
(6.89)
De quel système triangulaire inférieur les wk sont-ils solutions ? De quel système triangulaire supérieur les uk sont-ils solutions ?
Remarque : Cet algorithme construit une décomposition LU de la matrice A sans stratégie de pivot.
Dans le cas des matrices symétriques définies positives, comme c’est le cas ici, un stratégie de pivot est inutile
comme le montre l’exercice 4-2-3 page 60 du livre de Ciarlet, Miara et Thomas (1982, 1986).
b) (facultatif ) Si


b1 a 1 0
.
0
 a 1 b2 .
.
. 



δk = det  0 . .
.
0 
(6.90)
,
 .
. . bk−1 ak−1 
0 . 0 ak−1 bk
b1 a 1 0
.
0
a 1 b2 .
.
.
0 . .
.
0
.
. . bN −1 aN −1
0 . 0 aN −1
bN
a1 /z1
0
.
.
0
a1
a2 /z2
.
.
.
0
.
.
.
.
.
.
aN −2 aN −1 /zN −1
0
0
.
0
aN −1
aN /zN
pour k ≥ 1, et si on convient de poser δ0 = 1, montrer que :
δk = bk δk−1 − (ak−1 )2 δk−2 pour k ≥ 2.
(6.91)
c) (facultatif ) Montrer également que pour k ≥ 1 :
δk−1
zk
=
.
ak
δk
Ainsi bk − ak−1 zk−1 =
δk
δk−1 ,
(6.92)
k ≥ 1 et l’algorithme de 2)a) est justifié si peut prouver que δk 6= 0 pour k ≥ 0.
d) En utilisant les expressions des ak et bk , qu’on peut lire dans (6.87), montrer par récurrence que δk > 0
et qu’ainsi l’algorithme est justifié.
QUESTIONS DE PROGRAMMATION
3) Manipulations à partir du code Fortran.
136
La solution exacte dans le cas où c(x) = x, f (x) = (1 + 2x − x2 )ex , α = 0, β = 1, γ = 1, δ = 0 est
y(x) = (1 − x)ex .
Dans le cas où c(x) = 400, f (x) = −400 cos2 (πx) − 2π 2 cos(2πx), α = 0, β = 1, γ = δ = 0, elle vaut
20(x−1) +e−20x
y(x) = e 1+e−20
− cos2 (πx)
a) Compléter en même temps :
- Le tableau des erreurs e = maxi |yi − yiex |/h2 dans les cas de la méthode des différences finies d’ordre
deux (Df2) et des éléments finis d’ordre 2 (Ef2), ainsi que dans le cas des différences finies d’ordre 4 (DF4) ,
pour les deux exemples ci-dessus ;
N
e Df2
e Ef2
e Df4
3
7
15
31
63
127
255
.
- Le tableau des constantes d’erreur C = e/h2 dans les cas (Df2) et (Ef2), ainsi que de C = e/h4 dans le
cas (DF4). Commentez...
N
C Df2
C Ef2
C Df4
3
7
15
31
63
127
255
.
b) Savoir calculer avec ce programme la solution approchée d’une équation différentielle en un point
x donné : faire les annales. Attention, la solution exacte n’est pas en général calculable ... donc l’erreur non
plus ...
4) Usage de Maple (plutôt facultatif ).
Créer un programme Maple (en vous inspirant de celui du TP7) afin de résoudre des équations différentielles du deuxième ordre. Essayer les deux exemples ci-dessus, les annales ...
Examiner les possibilités de résolution numérique sous Maple ...
NB : Attention ! ! Maple ne parvient pas à résoudre numériquement certaines équations
d’ordre 2. Préférer Fortran pour ce TP ...
FIN DES QUESTIONS OBLIGATOIRES
B) PROPOSITIONS D’ÉTUDES FACULTATIVES.
5) Le schéma de Cowell d’ordre 4 (dont l’origine se trouve dans des calculs de mécanique céleste).
En utilisant la formule de Taylor à l’ordre 6 ( !) avec reste intégral (ou avec maple), on peut vérifier que
(si y est 6 fois continûment différentiable) :
1 ′′
h4 (6)
y(x − h) − 2y(x) + y(x + h)
′′
′′
−
(y
(x
−
h)
+
10y
(x)
+
y
(x
+
h))
=
−
y (ξx ).
h2
12
240
Obtenir à partir de là, le système suivant, à matrice non symétrique, qui remplace (6.87) :
137
(6.93)

2
h
2
2 + 10
0
.
0
12 h c1 −1 + 12 c2

h2
10 2
h2
−1 + 12 c1 2 + 12 h c2
−1 + 12 c3
.
.
1 

0
.
.
.
0
Ah yh = bh avec Ah = 2 
h 
2
2
10 2

h cN −1 −1 + h12 cN
.
.
−1 + h12 cN −2 2 + 12
2
2
0
.
0
−1 + h12 cN −1 2 10
12 + h cN


γ
f0 +10f1 +f2
h2
+
(1
−
c
)
0
2
12
12
h


f1 +10f2 +f3


12


..

.
bh = 
.



fN−2 +10fN−1 +fN


12
fN−1 +10fN +fN+1
h2
δ
+ (1 − 12 cN +1 ) h2
12




,


(6.94)
On peut étendre alors toute l’étude précédente (la matrice est encore monotone, l’erreur est en O(h4 ),
et bien que la matrice tri-diagonale obtenue ne soit pas symétrique, l’algorithme de résolution peut être
généralisé (voir le code tp8.f).
6) Notions sur la méthode des éléments finis.
Dans la méthode variationnelle et des éléments finis en particulier, on cherche une solution approchée
sous la forme d’une combinaison linéaire d’un nombre fini de fonctions de base données a priori. Il vaut mieux
se placer dans des cas où ces fonctions de base engendrent un espace vectoriel et c’est pourquoi on prend
comme inconnue la fonction :
γ(β − x) + δ(x − α)
.
β −α
Remarquant alors que u
e est solution du problème aux limites :
(6.95)
u
e(x) = u(x) − g(x) avec g(x) =
“trouver une fonction x ∈ [α, β] → u
e(x) ∈ R telle que :
−e
u′′ (x) + c(x)e
u(x) = f (x) − c(x)g(x) pour α < x < β, u
e(α) = 0, u
e(β) = 0, ”
(6.96)
on multiplie l’équation différentielle de (6.96) par une fonction v s’annulant en α et en β, on intègre le
R β ′′
produit sur [α, β] et en intégrant par parties − α u
e (x)v(x)dx, on constate que u
e est solution du problème
R
Rβ
1 β ′2
dit “variationnel” (car il correspond à la minimisation de “l’énergie” 2 α (e
u (x) + c(x)e
u2 (x))dx − α (f (x) −
c(x)g(x))e
u(x)dx) :
“ trouver une fonction x ∈ [α, β] → u
e(x) ∈ R telle que :
Z
β
′
′
(e
u (x)v (x) + c(x)e
u(x)v(x))dx =
Z
β
α
α
(f (x) − c(x)g(x))v(x)dx,
(6.97)
pour toute fonction v suffisamment régulière telle que v(α) = v(β) = 0.”
a) Si Vh est l’espace (de dimension N ) engendré par les fonctions continues et dérivables par morceaux,
appelées fonctions “chapeau” (ou éléments finis P1 ) :

x−α−(i−1)h

si α + (i − 1)h ≤ x ≤ α + ih

h
α+(i+1)h−x
(6.98)
wi (x) =
si α + ih ≤ x ≤ α + (i + 1)h , 1 ≤ i ≤ N
h


0 si non
alors la méthode des éléments finis pour résoudre (de manière approchée) (6.97) avec des éléments
P1 consiste
Pj=N
u
ej wj (x)
à chercher une fonction u
eh de Vh qui vérifie (6.97) pour toute fonction vh de Vh . Si u
fh (x) = j=1
⊤
e = (e
montrer que u
u1 , ..., u
eN ) est solution du système linéaire :
eu = d
e avec A
e = (e
Ae
aij )1≤i,j≤N , e
aij =
Z
β
α
(wi′ (x)wj′ (x)+c(x)wi (x)wj (x))dx, dei =
138
Z
β
(f (x)−c(x)g(x))wi (x)dx,
α
(6.99)
et que aij = 0 si |i − j| > 1.
Pratiquement il faut encore évaluer les intégrales et si sur chacun des intervalles [α + ih, α + (i + 1)h] on
utilise la formule des trapèzes :
Z
α+(i+1)h
ϕ(x)dx ≃
α+ih
h
(ϕ(α + ih) + ϕ(α + (i + 1)h),
2
(6.100)
3
(erreur de la forme, voir TP 6 : − h12 ϕ′′ (ξ), α + ih < ξ < α + (i + 1)h) alors on retrouve la méthode des
différences finies d’ordre 2.
b) Montrer que si on utilise la formule de Simpson :
Z
α+(i+1)h
α+ih
ϕ(x)dx ≃
1
h
(ϕ(α + ih) + 4ϕ(α + (i + )h) + ϕ(α + (i + 1)h)),
6
2
(6.101)
5
(erreur de la forme, voir TP 6 :− h90 ϕ(4) (ξ), α + ih < ξ < α + (i + 1)h) alors on a, en notant ϕi+1/2 =
ϕ(α + (i + 21 )h) :
2 h
+ (c
+ 2ci + ci+1/2 ).
(6.102)
h 6 i−1/2
Tout calcul fait (qu’on ne demande pas) on montre qu’après multiplication des deux membres de (6.99)
par h, la méthode des éléments finis de type P1 avec intégration numérique par la formule de Simpson conduit
au système linéaire (6.88) avec cette fois :
e
aii =
bi = 2 +
di =
h2
h2
(ci−1/2 + 2ci + ci+1/2 ) 1 ≤ i ≤ N, ai = −1 + ci+1/2 1 ≤ i ≤ N − 1
6
6
(6.103)
γ(β − x) + δ(x − α)
h2
(f
+fi +fi+1/2 −ci−1/2 gi−1/2 −ci gi −ci+1/2 gi+1/2 ) 1 ≤ i ≤ N g(x) =
(6.104)
3 i−1/2
β−α
et la solution approchée du problème de départ au point α + ih est u
ei + gi .
On peut démontrer et on l’admet que si u ∈ C 2 ([α, β]) (voir le livre de Ciarlet, 1985) et si les quadratures
sont exactes ou si u ∈ C 4 ([α, β]) et les quadratures sont approchées, alors enqnotant uh = u
eh + g la
Rβ
1
′2
2
solution approchée et en introduisant respectivement les normes “H ”, kuk1 =
α (u (x) + u (x))dx et
qR
β 2
2
“L2 ”, kuk0 =
α u (x)dx, on a les ordres de convergence ku − uh k1 = O(h), ku − uh k0 = O(h ) et il existe
de nombreux autres résultats de convergence plus précis.
c) On pourra étudier la partie du code Fortran tp9.f qui concerne ce point ainsi que le code en C tp9.c
où des points plus sophistiqués concernant la méthode des éléments finis (table de connectivité, assemblage,
éléments d’Hermite) sont abordées.
FIN
139
Téléchargement