Cours d'Analyse Numérique en Python
Cours d'Analyse Numérique en Python
Programmation Mathématique
Simulations sur SageMath/Python et Projet sur les RN
ESSAI, 6 rue des métiers - BP 675, Tunis 1080 ; Tél : 71 703 717 / 71 704 309 - Fax : 71 704 329
Mél : inestej@[Link] - Web : [Link]
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Attention, malgré une re-lecture soigneuse, il est possible que ce cours contienne des fautes de
frappe ou des erreurs. Si vous en trouvez, merci de nous en avertir de préférence par e-mail :
inestej@[Link].
Avant-propos
Ce document regroupe les notes du cours enseigné en première année de l’Ecole Supérieure de
la Statistique et de l’Analyse de l’Information à l’Université de Carthage. Cet enseignement se
compose à la fois de cours magistraux et de séances de travaux pratiques.
Il s’agit de pésenter plusieurs méthodes numériques de base utilisées dans l’approximation des
fonctions par interpoation polynomiale. Nous introduisons également la résolution des équations
non linéaires et celle des systèmes linéaires. Le but de cette matière est de familiariser les élèves-
ingénieurs avec les techniques de simulations numériques, en abordant notamment la notion de
convergence, de précision et de stabilité. L’analyse des méthodes sont complétées par un travail
d’implémentation et d’application réalisé par les étudiants sur le logiciel SAGEmath/Python.
2 Interpolation et Approximation 21
2.1 Formule d’Interpolation de Lagrange . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Algorithme d’Aitken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.1 Formule de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2 La méthode des différences divisées . . . . . . . . . . . . . . . . . . . . . 24
2.2.3 Algorithme de Neville . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Complexité d’algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 Estimation de l’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Interpolation Spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6 Introduction à l’Approximation . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6.1 Résultats fondamentaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6.2 Approximation polynomiale discrète . . . . . . . . . . . . . . . . . . . . . 29
2.7 Exercices d’Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3 Intégration numérique 33
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Formules de Newton-Côtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 Méthode du trapèze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.2 Méthode de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Remarque sur la Formule Composite . . . . . . . . . . . . . . . . . . . . 35
3.3 Exemples d’Implémentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2
Cours d’Analyse Numérique Ines Abdeljaoued Tej
L’avantage de l’analyse numérique est de pouvoir donner une réponse numérique à un pro-
blème qui n’a pas de solution analytique. Par conséquent, les résultats ne sont qu’approximatifs
contrairement aux résultats du Calcul Formel. Un cours d’analyse numérique va vous apprendre
à écrire les problèmes mathématiques en code, ainsi que vous apprendre quelles sortes de mo-
dèles mathématiques fonctionnent le mieux avec différentes sortes d’équations.
Lorsque l’ingénieur ne peut pas calculer toutes les valeurs, le mieux est d’approcher le problème
en calculant des valeurs de certains points. C’est la discrétisation, qui doit être accompagnée
d’une mesure de l’erreur commise, c’est-à-dire mesurer la distance entre la solution approchée et
la véritable solution du problème. Une étape de simplification, comme la linéarisation pour des
problèmes non linéaires, permet d’obtenir des problèmes pour lesquels on dispose de méthodes
de résolution numérique performantes : résolution de systèmes linéaires, optimisation par une
méthode de gradient, recherche de valeurs propres.
Comme suite aux résultats du calcul par ordinateur, il convient d’être circonspect et d’étudier
les sources d’erreurs : les données elles-mêmes, l’arrondi, la méthode utilisée. La démarche qui
vient d’être présentée est celle que suit le numéricien en charge de la simulation numérique d’un
problème.
Etant donné la valeur connue d’une certaine fonction en un certain nombre de points, quelle
valeur prend cette fonction en un autre point quelconque situé entre deux points donnés ? Une
méthode très simple est d’utiliser l’interpolation linéaire, qui suppose que la fonction inconnue
évolue linéairement entre chaque paire de points successifs connus. Nous introduisons dans le
5
Cours d’Analyse Numérique Ines Abdeljaoued Tej
premier chapitre l’interpolation polynomiale ainsi que d’autres méthodes d’interpolation utili-
sant des fonctions localisées telles que les splines.
Un autre problème fondamental est le calcul des solutions d’une équation donnée. Les algo-
rithmes de recherche de racines d’une fonction sont utilisés pour rśoudre les équations non
linéaires. Si la fonction est différentiable et que sa dérivée est connue, alors nous choisirons la
méthode de Newton sinon, d’autres méthodes seront détaillés dans le deuxième chapitre.
Le troisième chapitre porte sur l’étude des méthodes de calcul du vecteur x solution du système
d’équations linéaires Ax = b. La première partie de ce chapitre sera consacrée aux méthodes
directes et la deuxième aux méthodes itératives. Nous aborderons ensuite en troisième partie
les méthodes de résolution de problèmes aux valeurs propres.
Le champ de l’analyse numérique est divisé en différentes disciplines suivant le type de pro-
blème à résoudre, et chaque discipline étudie diverses méthodes de résolution des problèmes
correspondants. Il s’agit dans un premier temps d’étudier les principales méthodes en Analyse
Numérique (Méthode de Lagrange, algorithmes du point fixe, de Newton, du gradient conjugué,
la factorisation LU, etc...). Nous nous intéressons ensuite aux principes qui sous-tendent ces
méthodes ainsi qu’à leur mise en oeuvre pratique en langage Scilab et Maxima. Il s’agira enfin
d’implémenter et de tester plusieurs algorithmes d’Analyse Numérique et plusieurs approches
de résolution.
Nous donnons à la fin de chaque chapitre une liste d’exercices de difficultés variables. Ces exer-
cices ne sont profitables que si l’élève-ingénieur les travaille. Qu’il garde à l’esprit ce proverbe
chinois :
Pour conclure, ce cours est une introduction à des approches plus complexes des mathématiques
de l’ingénieur : d’autres thématiques seront développés dans les cours d’Optimisation Convexe,
de Calcul de Variations, de Recherche Opérationnelle, etc...
Python est un langage de programmation adapté au calcul scientifique. Il est interprété, inter-
actif et orienté objet. Il possède de nombreuses extensions pour le calcul, le traçage, le stockage
de données. Combiné avec des fonctionnalités comme Tkinter, une interface graphique pour les
utilisateurs, Python permet de développer de bonnes interfaces graphiques pour les codes. Par
exemple, les principaux mots cles sous Python sont :
L’aspect le plus intéressant est qu’il existe un ensemble de modules pour le calcul scientifique
sous Python. Des modules pour pratiquement tout (vecteurs, tenseurs, transformations, déri-
vées, algèbre linéaire, transformées de Fourier, statistiques, groupes, etc) sont disponibles. Il
est aussi possible d’utiliser des bibliothèques C et Fortran à partir de Python. Finalement,
écrire un programme numérique est chose aisée en Python. Il est également possible de réaliser
des algorithmes et des calculs parallèles : des interfaces existent vers netCDF (fichiers binaires
portables), MPI et BSPlib.
Comme exemple, existe Scipy, la bibliothèque d’outils scientifiques libres pour Python. Elle
inclut des modules pour créer des graphiques et faire du traçage, des modules d’optimisation,
d’intégration, de fonctions spéciales, de manipulation de signaux et d’images, d’algorithmes
génétiques, de solveurs d’équations différentielles ordinaires, etc.
Le responsable, K. Hinsen, propose un bon didacticiel intitulé Scientific Computing in Python
(Calcul scientifique avec Python). Consuler aussi I. Lima dans [?].
7
Cours d’Analyse Numérique Ines Abdeljaoued Tej
" √ √ #
25i 79 − 25 5i 79 − 5 1 √ 1
a= √ ,b = √ , c = − i 79 +
6i 79 + 34 i 79 − 11 10 10
5. var(’x’)
f=-x^3+3*x^2+7*x^2-4
On construit l’objet courbe, stocké dans la variable p :
p = plot(f, x, -5, 5)
350
300
250
200
150
100
50
-4 -2 2 4
6. La commande if :
x = 3
print x > 5
if x > 5:
print x
print "plus grand"
print "Fin du programme"
else:
print "Introduire une autre valeur"
7. L’opérateur booléen and :
a = 7
b = 9
print a > 5 and b > 10
if a > 5 and b < 10:
print "Les deux expressions sont vraies"
8. L’opérateur booléen or :
print a > 5 or b > 10
if a > 5 or b > 10:
print "Au moins une des deux expressions est vraie"
9. L’opérateur booléen not :
a = 7
print a > 5
print not a > 5
10. La boucle while :
x = 1 #initialisation
while x <= 40:
print x,
x = x + 2 #incrementation de x par 2
11. Les ensembles :
x = Set([2,3,51,21])
print type(x)
print x[0]
print x
y = Set([51])
[Link](y)
a = Set([1,3,2,5,5])
[Link]()
3 in a
[Link](x)
[Link](x)
12. Les listes :
y = [1,1/2,0.75,’Bonjour’,x]
type(y)
y[3]
y[4]
add([1,2,3,4])
13. Les n-uplets :
z = (1,3,5,4)
type(z)
z[0]
a,b,c = (1,2,3)
a; b; c
14. Les opérateurs in et not in :
54 in [2,54,2]
30 not in [2,54,2]
15. La boucle for :
for i in [1,2,3,4,5]:
i,
16. Les fonctions :
def salut(s):
"""
Retourne Bonjour ou Au revoir.
"""
if s>3:
return "Bonjour"
else:
return "Au revoir"
d=zip(a,b)
for (x,y) in d:
x,y
24. Calcul de 0 + 1 + · · · + N − 1 :
def sum1(N):
s = 0
for k in range(N):
s += k
return s
SAGEmath: time sum1(10^6)
Cette fonction peut être sauvegardée dans un fichier ([Link] par exemple). Les com-
mandes suivantes permettent de lire ou d’exécuter le fichier :
SAGEmath: cat [Link]
SAGEmath: load [Link]
SAGEmath: time sum2(10^6)
1. N. Metropolis et S. Ulam ont inventé en 1947 ce type de méthode. Le nom fait allusion aux jeux de hasard
pratiqués dans les casinos de Monte-Carlo
Lettres E S A I T N R U L O D C P
Fréquences (%) 14.7 7.9 7.6 7.5 7.2 7.1 6.6 6.3 5.5 5.4 3.7 3.3 3
Soit le message codé suivant 2 :
code = "YR PNEER QR Y ULCBGRAHFR "
code += "RFG RTNY FV WR AR Z NOHFR "
code += "N YN FBZZR QRF PNEERF "
code += "QRF QRHK NHGERF PBGRF"
On crée l’objet message composé des lettres de code et l’ensemble lettres des différentes
lettres apparaissant dans le message codé :
message = [i for i in code]
lettres = set(message)
1. Si une lettre apparaît souvent dans un message, on s’attend à ce qu’elle apparaisse autant
dans un message codé. On calcule donc le tableau d’effectifs en comptant les lettres du
message :
2. TP inspiré des supports du Laboratoire d’informatique et de mathématiques de l’Institut de recherche sur
l’enseignement des mathématiques de la Réunion : http ://[Link]/IMG/pdf/[Link]
for j in lettres:
print(j+’-->’+str([Link](j)))
Comparer ce résultat avec le tableau ci-dessus, et donnez le décodage de la lettre E, S
et A.
2. Pour continuer le décodage, et vu que les fréquences d’apparition des lettres sont trop
proches, on peut utiliser les propriétés lingustiques, comme le fait qu’un mot long com-
mence souvent par une consonne ou qu’il y a peu de mots de deux lettres. On peut
également tester si le procédé de chiffrement utilisé est bien celui proposé par Jules Cé-
sar.
Ce procédé date de 120 avant J.C., il utilise la technique suivante : il suffit de procéder
à une permutation circulaire de toutes les lettres de l’alphabet, en remplaçant chaque
lettre par celle qui est située à s rangs plus loin (ici s correspond à la clé de chiffrement).
Dans cet exemple, la lettre A correspond à N, la lettre E correspond à R et la lettre F
correspond à S. Vérifiez, grâce au code suivant, que la clé de chiffrement est bien s = 13
et en déduire le message déchiffré.
s = 13 # s est la cle de chiffrement selon la méthode de Jules César
n=len(message)
MessageDechiffre=""
for i in range(n):
caractere = message[i]
p = ord(caractere) #Varie entre 65 et 91
q = p + s
if q > 91:
q = q - 26
if q == 91:
q = 65
r = chr(q)
print caractere, p, r, q
MessageDechiffre = MessageDechiffre + r
print MessageDechiffre
3. Pourquoi est-ce que le codage de César est facile à casser ? Indication : trouver le nombre
de clés différentes qu’on peut utiliser pour le codage de César.
L’algorithme se base sur le théorème suivant : Théorème. Soit p un nombre premier. On pose
s la puissance maximale de 2 divisant p − 1 :
p − 1 = 2s .d avec d pair.
1. On désigne par t la taille en bits de la clé RSA que l’on souhaite utiliser. Il nous faut donc
trouver deux nombres premiers de taille t/2. Pour cela, on utilise la fonction random pour
trouver un nombre de t/2 bits au hasard puis netx_prime le nombre premier suivant.
2. Déterminez le plus petit nombre premier de 10 chiffres (pensez à la conversion en écriture
binaire et à la commande random_prime(2ˆ1023, 2ˆ1024)).
import random
randint(10\^9, 10\^10)
[Link](2048)
3. Implémentez l’algorithme de Miller-Rabin. Le pseudo-code obtenu de Wikipédia est
donné ci-dessous. La fonction Témoin_de_Miller(a,n) renvoie Vrai si a est un témoin
de Miller que n est composé, Faux si n est fortement pseudo-premier en base a. Elle
prend en entrée un nombre n entier, impair ≥ 3 et a un entier > 1. On calcule s et d
tels que n − 1 = 2s d avec d impair. Ici s > 0 car n est impair. On note x le reste de la
division de ad par n, puis dans la boucle Tant que, le reste de la division de x2 par n.
Témoin_de_Miller(a, n):
x := a^d % n #x entier reste de la division de ad par n
si x = 1 ou x = n - 1
renvoyer(Faux)
Tant que s > 1
x := x^2 % n
si x = n - 1
renvoyer(Faux)
s := s - 1
Fin de boucle tant que
renvoyer(Vrai)
Le test de Miller-Rabin peut alors être décrit comme suit, Miller-Rabin(n, k) renvoie
Vrai si n est fortement pseudo-premier en base a pour k entiers a, Faux s’il est composé.
C’est un algorithme qui a une complexité polynomiale en terme de temps de calcul :
O([Link](n)3 ) obtenue en remarquant que la décomposition n − 1 = 2s d se calcule en
O(log(n)).
Miller-Rabin(n,k):
répéter k fois :
choisir a aléatoirement dans l’intervalle [2, n-2]
si Témoin_de_Miller(a,n)
renvoyer(Faux)
Fin de boucle répéter
renvoyer(Vrai)
4. La fonction is_prime est un test de primalité qui prouve si un nombre donné est premier
ou pas. La fonction is_pseudoprime est un test probabiliste de primalité : l’option > 0
utilise le test de primalité probabiliste de Miller-Rabin. Ce test s’appuie sur le petit
théorème de Fermat. Testez ces deux fonctions et expliquez à quoi servent les fonctions
netx_prime et random_prime ou encore next_probable_prime 3 .
Ici Ali est l’émetteur et il ne connaît que la clé publique, c’est-à-dire les nombres e et n. Il
calcule M e ≡ N (modulo n) et envoie au destinataire le message N . Le récepteur qui est Besma
calcule N d ≡ W (modulo n). On constate que W est exactement le message M .
Exercice à faire : Les messages qu’on peut chiffrer sont les entiers M compris entre 0 et n-1.
Le codage du message M s’obtient par le calcul de N et le déchiffrement par le calcul de W .
1. Calculez N = M e (modulo n). Pour cela utilisez la commande help(mod) ou encore la
commande %.
2. Le décodage ou le déchiffrement d’un message codé s’obtient par le calcul de W = Nd
modulo n. Donnez deux fonctions de cryptage et de décryptage, par clés RSA : on
appellera les fonctions N = encrypt(e, n, M) et W = decrypt(d, n, N).
3. Les attaques actuelles du RSA se font essentiellement en factorisant l’entier n de la
clé publique. La sécurité du RSA repose donc sur la difficulté à factoriser de grands
entiers. Pour garantir une certaine fiabilité des transactions, il faut choisir des clés
plus grandes : des clés de 21024 voire 22048 bits, i.e. des clés à 1024*ln(2)/ln(10) ou
2048*ln(2)/ln(10) chiffres.
La comande factor factorise les entiers qu’on lui passe en paramètre. Générez des clés
RSA de plus en plus grande et constatez l’augmentation du temps de calcul de la facto-
risation de ces données.
Le RSA est une méthode de chiffrement assez sûre, mais il n’est pas exclu que des services
secrets comme la NSA ou le FSB aient réussi le décryptage du RSA.
3. http : //[Link]/les − nombres − en − python/, voir aussi
http ://[Link]/staff/[Link]/[Link] pour une bonne utilisation des outils de
génération de nombre pseudo-aléatoires
4. Le nombre e est appelé la graine et on pose φ = (p − 1)(q − 1).
5. Le code python pour l’algorithme RSA a été inspiré de https ://[Link]/JonCooperWorks/5314103
alors que la structure du TP a suivi les travaux pratiques du master Informatique de l’Université de Lille 1 :
https ://[Link]/prive/sgambs/TP7_intro_securite.pdf
1.2.4 Correction
Algorithme d’Al Kindi
Soit le message chiffré suivant :
Lettres A C B E G F H K L O N Q P R U T W V Y Z
Fréquences (%) 2 1 3 5 4 9 4 1 1 1 7 4 3 17 1 1 1 1 4 3
Les trois premières fréquences indiquent les lettres E, S et N. Ainsi, la lettre R correspond très
probablement à la lettre E, la lettre F correspond à la lettre S et la lettre N correspond à la
lettre A. En tenant compte de la clé de chiffrement s = 13, on peut en déduire le message
déchiffré :
Les procédures sur Python sont les suivantes. On peut s’amuser à coder et à décoder, grâce à
la méthode de déchiffrement de Cesar, n’importe quel texte contenant les lettres majuscules de
l’alphabet.
def decodage_cesar(cle,code):
n = len(code)
MessageDechiffre = ""
for i in range(n):
caractere = code[i]
p = ord(caractere) #Varie entre 65 et 91
q = p + s
if q > 91:
q = q - 26
if q == 91:
q = 65
r = chr(q)
#print caractere, p, r, q
MessageDechiffre=MessageDechiffre+r
return(MessageDechiffre)
decodage_cesar(cle,code)
Algorithme de Miller-Rabin
sage: import random
sage: def decompose(n):
... s = 0
... d = n
... while d % 2 == 0:
... d = d/2
... s += 1
... return s, d
sage: decompose(33)
(0, 33)
sage: def Temoin_de_Miller(a,n):
... s,d = decompose(n-1)
... #print n-1, 2^s*d
... x = a^d % n
... if x == 1 or x == n - 1:
... return(False)
... while s > 1:
... x = x^2 % n
... if x == n - 1:
... return(False)
... s = s - 1
... return(True)
sage: def Miller_Rabin(n,k):
... i = 0
... while i<k:
... a = randint(2,n-2)
... if Temoin_de_Miller(a,n)==True:
... return(False)
... i += 1
... return(True)
sage: n = 122201
sage: a = 10
sage: k = 10
sage: print Temoin_de_Miller(a, n), Miller_Rabin(n, k)
False True
sage: next_prime(122187)
122201
Algorithme RSA
sage: import random
sage: """
sage: Ce que fait Besma :
... D’abord B génère n ainsi que e et d.
... Ensuite B envoie les clés publiques n et e à Ali.
...
sage: """
sage: p = 100
sage: p = next_prime(p)
sage: q = next_prime(p)
sage: print p,q
sage: n = p*q
sage: #la graine est choisie par hasard ;
sage: #il faut vérifier que e et phi sont premiers entre-eux :
sage: phi = (p-1)*(q-1)
sage: e = [Link](1,phi)
sage: print e, n, "les exposants de déchiffrements"
101 103
2522 10403 les exposants de déchiffrements
sage: phi = (p-1)*(q-1)
sage: #On cherche d tel que d*e+a*phi=1
sage: #print phi, e, n, d
sage: """
sage: Ali reçoit les clés de déchiffrement n et e.
sage: Pour envoyer le message M codé, A calcule N :
sage: """
sage: # Soit un message M :
sage: M = randint(2,n-1)
sage: print M
sage: def encrypt(e, n, M):
... return pow(M,e,n)
sage: N = encrypt(e, n, M)
sage: print N
sage: """
sage: Ce que fait B : En recevant N de Ali, Besma calcule W :
Interpolation et Approximation
Soient n + 1 couples : (x0 , f0 ), (x1 , f1 ), . . ., (xn , fn ) ∈ R × R tels que les xi soient tous distincts.
On cherche un polynôme P : R −→ R tel que P (xi ) = fi pour i = 0..n.
Nous introduisons dans un premier temps la formule d’interpolation de Lagrange qui prouve
l’existence et l’unicité du polynôme P de degré au plus n. Ensuite nous présenterons l’algorithme
d’Aitken et la méthode des différence divisées qui utilise la formule d’interpolation de Newton.
Puis, nous introduirons l’algorithme de Neville qui présente une méthode très pratique pour le
calcul sur machine du polynôme P en un point. Nous introduirons enfin l’interpolation Spline
qui est un outil fondamental du graphisme sur ordinateur.
Théorème 2.1.1. Soient (xi , fi ) pour i = 0..n des points réels ou complexes, avec xi 6= xj pour
i 6= j. Il existe un unique polynôme P de degré inférieur ou égal à n vérifiant P (xi ) = fi pour
i = 0..n.
qui
Pi=nvérifient Li (xi ) = 1 et pour j 6= i : Li (xj ) = 0. Le polynôme P est alors égal à P (x) =
i=0 fi Li (x) et il est appelé polynôme ou formule de Lagrange.
21
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Pour montrer l’existence d’un tel polynôme, il suffit de remarquer que la famille (L0 , L1 , . . . , Ln )
forme une base de l’espace vectoriel des polynômes
Pi=n de degré inférieur ou égal à n (qui est de
dimension n + 1). En effet, pour tout x, i=0 αi Li (x) = 0 implique en particulier que αk = 0
pour k = 0..n (onPremplace x par xk ). On retrouve la formule de Lagrange en écrivant P dans
cette base : P = i=ni=0 fi Li (x) et P (xi ) = fi pour tout i = ..n.
2
Exercice 2.1.1. Construire les polynômes d’interpolation de Lagrange de f (x) = e−x sur les
entiers de [−2, 2].
Exercice 2.1.2. Ecrire un algorithme qui calcule Li (x) pour n, i et x fixés.
avec ak = v0 (x1 k ) et v(x) = (x−x0 )(x−x1 ) . . . (x−xn ). Cette formule nécessite pour une première
valeur de x l’ordre de 2n2 opérations afin de déterminer P (x). Pour d’autres valeurs de x, 2n
opérations sont nécessaire au calcul de P a condition de conserver les valeurs ak .
Théorème 2.2.1. Le polynôme de Lagrange P (x) sur les points x0 , x1 , . . . , xn est égal à Fn,n (x).
La preuve du théorème 2.2.1 se base sur le fait que Fk,j (x) avec k ≥ j est le polynôme de
Lagrange sur les points x0 , x1 , . . . , xj−1 , xk .
Par exemple, pour calculer Fk,2 (x), on considère le produit croisé suivant : F1,1 (x)(xk − x) −
Fk,1 (x)(x1 − x). Nous obtenons :
F1,1 (x)(xk − x) − Fk,1 (x)(x1 − x)
Fk,2 (x) = .
xk − x1
Nous calcuons les éléments du tableau progressivement afin de déterminer Fn,n (x) = P (x).
Démonstration du théorème 2.2.1 : Par récurrence sur j : Fk,0 (x) = fk pour k = 0..n.
Supposons que Fk,j (x) est le polynôme de Lagrange sur les points x0 , x1 , . . . , xj−1 , xk pour tout
k = j..n.
En particulier, et d’après l’hypothèse de récurrence, Fj,j (x) est le polynôme de Lagrange sur
x0 , x1 , . . . , xj−1 , xj .
Montrons que Fk,j+1 (x) est le polynôme de Lagrange sur x0 , x1 , . . . , xj , xk pour k = j + 1..n.
Pour i = 0..j − 1 :
Fj,j (xi )(xk − xi ) − Fk,j (xi )(xj − xi )
Fk,j+1 (xi ) = = fi
xk − xj
Nous utilisons pour cela l’hypothèse de récurrence : Fj,j (xi ) = fi et Fk,j (xi ) = fi pour i =
0..j−1). D’autre part, en utilisant la définition, on trouve que Fk,j+1 (xj ) = fj et Fk,j+1 (xk ) = fk .
En prenant j = n, on obtient le résultat du théorème.
Remarque 2.2.1. Le polynôme Fk,j (x) avec k ≥ j est le polynôme de Lagrange sur les points
x0 , x1 , . . . , xj−1 , xk de degré inférieur ou égal à j.
et pour i = 0 et j = n, on a :
Définition 2.2.1 (Formule de Newton). Le polynôme de Lagrange P (x) sur les points x0 , x1 , . . . , xn
est donné par la formule de Newton :
k=n
X
P (x) = D0,n (x) = f0 + c0,k (x − x0 )(x − x1 ) . . . (x − xk−1 ) .
k=1
La formule de Newton permet de déterminer le polynôme de Lagrange. Pour cela, nous utilisons
un tableau analogue à la méthode d’Aitken : les coefficients de P (x) sont sur la diagonale du
tableau triangulaire.
Exemple 2.2.2. En utilisant la méthode des différences divisées et plus précisément la proposi-
tion 2.2.2 dans l’exemple 2.1.1 on obtient :
xj i=j i=j−1 i=j−2 i=j−3
j =0 0 c0,0 = 1
j =1 1 c1,1 = 2 c0,1 = 1
j =2 −1 c2,2 = −1 c1,2 = 32 c0,2 = − 21
j =3 2 c3,3 = 4 c2,3 = 53 c1,3 = 61 c0,3 = 1
3
c −c
Nous remplissons le tableau ligne par ligne avec ci,i = fi pour i = 0..n et ci,j = i+1,j i,j−1
xj −xi
pour 0 ≤ i < j ≤ 3. Ainsi, D0,3 (x) = 31 (x − 0)(x − 1)(x + 1) + (− 21 )(x − 0)(x − 1) + x + 1 =
1 3
3
x − 12 x2 + 67 x + 1.
La croissance de cette complexité est en fonction de la taille des données. Les algorithmes usuels
peuvent être classés en un certain nombre de grandes classes de complexité (source wikipédia) :
— Les algorithmes sub-linéaires, dont la complexité est en général en O(logn). C’est le cas
de la recherche d’un élément dans un ensemble ordonné fini de cardinal n.
— Les algorithmes linéaires en complexité O(n) ou en O(nlogn) sont considérés comme
rapides, comme l’évaluation de la valeur d’une expression composée de n symboles ou
les algorithmes optimaux de tri.
— Plus lents sont les algorithmes de complexité située entre O(n2 ) et O(n3 ), c’est le cas de
la multiplication des matrices et du parcours dans les graphes.
— Au delà, les algorithmes polynomiaux en O(nk ) pour k > 3 sont considérés comme
lents, sans parler des algorithmes exponentiels (dont la complexité est supérieure à tout
polynôme en n) que l’on s’accorde à dire impraticables dès que la taille des données est
supérieure à quelques dizaines d’unités.
On remarque que l’erreur dépend de la fonction f n+1 (ζ) et des points d’interpolation par (x −
x0 )(x − x1 ) . . . (x − xn ). Considérons le cas où les points d’interpolation sont équidistants, c’est-
à-dire, xi = a + hi pour i = 0..n avec h = b−a n
. Si f est continue et que toutes ses dérivées sont
continues jusqu’à l’ordre n + 1, alors
1 b − a n+1
| f (x) − P (x) |≤ ( ) maxa≤x≤b | f (n+1) (x) | (2.4.2)
2(n + 1) n
Cette quantité ne tend pas nécessairement vers 0 car les dérivées f (n+1) de f peuvent grandir
très vite lorsque n croît. Dans l’exemple suivant, nous présentons deux cas sur la convergence
de l’interpolation de Lagrange.
Exemple 2.4.1. Soit f (x) = sin(x), | f k (x) | ≤ 1 : l’interpolé P converge vers f quelque soit
1
le nombre de points d’interpolation et leur emplacement. Par contre, pour f (x) = 1+25x 2 sur
[−1, 1] et bien que f soit indéfiniment continûment dérivable sur [−1, 1], les grandeurs
max−1≤x≤1 | f k (x) | , k = 1, 2, 3, . . .
explosent très rapidement et l’inégalité (2.4.2) ne nous assure plus la convergence de l’interpo-
lation.
Nous venons de voir que l’interpolant de Lagrange peut diverger lorsque le nombre de points
d’interpolation n devient grand et lorsque les points d’interpolation sont équidistants. Une
première solution consiste à découper l’intervalle [a, b] en plusieurs sous-intervalles, c’est l’in-
terpolation par intervalles. On peut également utiliser des points judicieusement placés (zéros
des polynômes de Tchebychev par exemple).
Exercice :
Les polynômes de Tchebychev constituent un outil important dans le domaine de l’interpola-
tion. Soit n ∈ N. Noter que pour minimiser l’erreur d’interpolation de Lagrange, les racines des
polynômes de Tchebychev sont les candidats pour être les points d’interpolations. Le polynôme
de Tchebychev de degré n est noté par Tn (x) = cos(n arccos(x)) pour tout x ∈ [−1, 1] et il
vérifie Tn+2 (x) = 2xTn+1 (x) − Tn (x) avec T0 (x) = 1 et T1 (x) = x.
L’interpolation spline est une approche locale en faisant de l’interpolation par morceaux : sur
un sous-intervalle donné, on fait de l’interpolation polynomiale de degré faible (≤ 3). Les splines
réalisent une interpolation polynomiale par morceaux et on imposera aux noeuds un degré de
régularité suffisant. Avec les splines, on obtient une très bonne approximation, sans effets de
bord, contrairement à l’interpolation de Lagrange.
Etant donnée une fonction f définie sur [a, b] et un ensemble de noeuds a ≤ x0 < x1 < · · · <
xn ≤ b. Nous appelons spline d’ordre 3 ou spline cubique interpolant f aux noeuds, une fonction
S vérifiant les conditions suivantes :
1. S coïncide avec un polynôme Pi de degré 3 sur chacun des intervalles [xi−1 , xi ] pour
i = 1..n.
2. S(xi ) = Pi (xi ) = fi pour i = 0..n.
3. Pi (xi ) = Pi+1 (xi ) pour i = 0..n − 1, (continuité de S).
0 0 0
4. Pi (xi ) = Pi+1 (xi ) pour i = 0..n − 1, (continuité de S ).
00 00 00
5. Pi (xi ) = Pi+1 (xi ) pour i = 0..n − 1, (continuité de S ).
6. S satisfait une des conditions au bord suivantes :
00 00 0 0 0 0
S (x0 ) = S (xn ) = 0 (spline libre) ou bien S (x0 ) = f0 et S (xn ) = fn (spline forcée
lorsque f est dérivable).
Proposition 2.5.1. Les polynômes Pi (x) sont données par les formules suivantes :
(xi − x)((xi − x)2 − h2i ) (x − xi−1 )((x − xi−1 )2 − h2i ) fi−1 (xi − x) fi (x − xi−1 )
Pi (x) = Mi−1 + Mi + +
6hi 6hi hi hi
Exemple 2.5.1. On reprend l’exemple 2.1.1 de la section précédente. On cherche la spline cubique
S(x) telle que S(0) = 1, S(1) = 2, S(−1) = −1 et S(2) = 4. On pose x0 = −1, x1 = 0, x2 = 1
et x3 = 2. Ils sont bien ordonnées. Alors f0 = −1, f1 = 1, f2 = 2, f3 = 4 et hi = 1 pour i = 1..3.
On prend M0 = M3 = 0 ; M1 et M2 sont solution du système :
2
3 M1 + 16 M2 = −1
1 2
M1 + M2 = 1
6 3
Nous obtenons :
P1 (x) = − 13 x3 − x2 + 34 x + 1 x ∈ [−1, 0]
S(x) = P2 (x) = 23 x3 − x2 + 43 x + 1 x ∈ [0, 1]
1 3 2 5
P3 (x) = − 3 x + 2x − 3 x + 2 x ∈ [1, 2]
Notons E = R[x] l’espace vectoriel des polynômes en la variable x et à coefficient dans R. Soit
V l’espace vectoriel des polynômes de degré ≤ p. On pose u0 = xp , u1 = xp−1 , . . . , up−1 = x et
up = 1.
Exemple 2.6.1. On considère la fonction f (x) = x2 + 2x sur [−1, 1]. Calculer les valeurs de f
aux points d’abscisses −1, − 21 , 0, 12 et 1. Donner la droite de meilleure approximation discrète de
f pour ces 5 points au sens des moindres carrés. On note x0 = −1, x1 = − 12 , x2 = 0, x3 = 12 et
x4 = 1. Alors y0 = −1, y1 = − 34 , y2 = 0, y3 = 45 et y4 = 3. On calcule i=4 x2i = 52 , i=4
P P
Pi=4 Pi=4 i=0 i=0 xi = 0,
5
i=0 xi yx = 5 et i=0 yi = 2 . On obtient le système suivant à partir du système (2.6.2) :
Pi=4 2 5 Pi=n Pi=n
i=0 xi = 2 i=0 xi = 0 a0 i=0 xi yi = 5
= .
Pi=n Pi=n 5
i=0 xi = 0 n+1=5 a1 i=0 yi = 2
et a0 = 2, a1 = 12 . Donc P1 (x) = 2x + 12 .
(b) La fonction x3 prend les valeurs de P . Utiliser la formule vue en cours pour exprimer
l’erreur d’interpolation commise en remplaçant x3 par le polynôme d’interpolation
P.
1
10. (a) Interpoler ex aux points 0, 2
et 1 par un polynôme du second degré.
(b) Trouver une expression pour l’erreur d’interpolation et une borne de l’erreur indé-
pendante de ζ.
11. (a) Sachant que la température initiale d’un objet est de 0o C, puis de 5o C après une
minute et 3o C après deux minutes, quelle a été la température maximale et quant
a-t-elle été atteinte ?
(b) Quelle est la température moyenne entre 1 et 2 minutes ?
12. Considérons l’ensemble des points
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 7, f1 = 2, f2 = −1, f3 = −14.
(a) Calculer les polynômes d’interpolation de Lagrange L0 et L3 .
(b) Vérifier que Li (xi ) = 1 et que Li (xj ) 6= 0 pour tout i et j 6= i de 0 à 3.
(c) Citer deux méthodes permettant de calculer le polynôme de Lagrange.
(d) Vérifier que le polynôme de Lagrange sur les points (x0 , f0 ), (x1 , f1 ), (x2 , f2 ) et (x3 , f3 )
est égal à :
P (x) = −2x3 + x2 − 2x + 2 .
(e) Afin de déterminer une approximation du nuage de points (xi , fi ) pour i de 0 à 3,
calculer la droite de régression linéaire P0 par la méthode des moindres carrés discrets.
(f) Quelle est la différence entre P et P0 .
Intégration numérique
3.1 Introduction
Soit f une fonction continue d’un intervalle [a, b] dans R. On désire approcher numériquement
la quantité Z b
f (x) dx .
a
La méthode de Newton-Côtes utilise les polynômes de Lagrange P (x) pour approcher la fonction
f (x) sur [a, b] ; on considère comme valeur approchée de l’intégrale de f entre a et b :
Z b
P (x) dx .
a
33
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Pi=n
Ce qui donne i=0 αi = n.
Remarque 3.2.2. Pour n = 1, on obtient α0 = α1 = 12 , d’où
b
b−a
Z
f (x) dx = (f (a) + f (b)) .
a 2
Pour n = 2, on obtient α0 = 31 , α1 = 4
3
et α2 = 13 . D’où :
b
b−a
Z
f (x) dx = (f (a) + 4f (a + h) + f (b)) .
a 6
Théorème 3.2.1. La méthode du trapèze est d’ordre deux. Plus précisément, si f est suffisam-
ment dérivable et h = b−a
N
, alors il existe c ∈]a, b[ tel que
b
b − a 2 00
Z
f (x) dx − T (h) = − h f (c) .
a 12
Exercice 3.2.1. Reprendre l’exemple 3.1.1 avec la méthode du trapèze.
et
N −1
X h
S(h) = (f (x2i ) + 4f (x2i+1 ) + f (x2i+2 ))
i=0
3
Théorème 3.2.2. La méthode de Simpson est d’ordre quatre. Plus précisément, si f est suffi-
samment dérivable et h = b−a
2N
, alors il existe c ∈]a, b[ tel que
b
b − a 4 (4)
Z
f (x) dx − S(h) = − h f (c) .
a 180
Exercice 3.2.2. Reprendre l’exemple 3.1.1 avec la méthode de Simpson.
Les méthodes analytiques de résolution d’équations algébriques polynomiales sont limités à cer-
taines formes et à de faible degré (équations quadratiques, cubiques, quartiques, ax2n +bxn +c =
0, etc...). La résolution des équations polynomiales de degré 4 est déjà plus pénible et à partir
du degré 5, E. Galois a montré qu’il n’est pas toujours possible de donner une forme exacte des
racines au moyen des coefficients (on utilise alors le groupe de l’équation, l’ideal des relations
entre les racines ou encore le corps de décomposition du polynôme : ce sont des méthodes for-
melles [?]).
Pour la résolution des équations polynomiales, nous sommes amenés à l’utilisation des méthodes
numériques. Il en est de même pour les équations contenant des fonctions transcendantes (i.e.
non-algébriques) telles que exp(x), ch(x), etc... En étudiant les méthodes de résolution d’une
équation f , on se posera deux questions :
1. La méthode converge-t-elle vers x∗ où f (x∗ ) = 0. En d’autre termes la suite (xn )n∈N
générée par la méthode converge-t-elle vers la solution x∗ .
2. Dans l’affirmative, avec quelle rapidité (ceci permet de comparer les méthodes entre-
elles).
On est donc certain qu’il y a entre a et b au moins un zéro de f . Pour approcher de façon
précise l’un de ces zéros, on utilise l’algorithme suivant :
Algorithme 1 (Dichotomie).
36
Cours d’Analyse Numérique Ines Abdeljaoued Tej
A chaque itération, l’algorithme construit un nouvel intervalle, autour de x∗ , qui est de longueur
égale à la moitié de la longueur de l’intervalle précédent. Au bout de n itérations, la longueur
de l’intervalle est alors de b−a
2n
.
Le nombre d’itérations nécessaire pour obtenir une précision de calcul égal à est définie par :
log (b − a) − log
n≥ .
log 2
Remarque 4.1.1. Les avantages de cet algorithme sont la convergence assurée et une marge
d’erreur sûre. Par contre il est relativement lent. Il est souvent utilisé pour déterminer une
approximation initiale à utiliser avec un algorithme plus rapide.
La signification géométrique consiste à mener par le point (xn , f (xn )) la tangente à la courbe
f (x). La pente de cette tangente est
0
T (x) = f (xn ) + (x − xn )f (xn ) .
Si on cherche le point d’intersection de la tangente avec l’axe des x, i.e. si on résoud T (x) = 0,
on retrouve xn+1 tel que défini par la suite.
Théorème 4.1.1. [Convergence globale de la méthode de Newton] Soit f une fonction de Classe
C 2 sur [a, b] et g(x) = x − ff0(x)
(x)
. Si f vérifie :
1. f (a).f (b) < 0
0
2. ∀x ∈ [a, b], f (x) 6= 0 (c’est la stricte monotonie),
00
3. ∀x ∈ [a, b], f (x) 6= 0 (concavité dans le même sens).
00
Alors en choisissant x0 ∈ [a, b] tel que f (x0 ).f (x0 ) > 0, la suite (xn ) définie par x0 et xn+1 =
g(xn ) converge vers l’unique solution de f (x) = 0 dans [a, b].
Preuve : Les deux premières conditions du théorème assurent l’existence et l’unicité d’une
racine x∗ unique de f dans [a, b]. D’autre part, comme xn+1 = xn − ff0(x n)
(xn )
on obtient :
f (xn )
xn+1 − x∗ = xn − x∗ −
f 0 (xn )
f (x∗ ) − f (xn )
= xn − x∗ +
f 0 (xn )
∗ −x 2
(x∗ − xn )f 0 (xn ) + (x
∗ 2
n)
f 00 (ζn )
= xn − x +
f 0 (xn )
Ainsi :
∗
∗ ∗ f 0 (xn ) + x −x
2
n 00
f (ζn )
xn+1 − x = (xn − x )(1 − 0
)
f (xn )
(xn − x∗ )2 f 00 (ζn )
=
2 f 0 (xn )
Si f 00 et f 0 sont de même signe, alors xn+1 − x∗ > 0 et la suite est alors minorée par x∗ à partir
du rang 1. Sinon, si f 00 et f 0 sont de signes contraires, alors xn+1 − x∗ < 0 et la suite est alors
majorée. De plus, et selon les cas, la suite va être soit décroissante (f 00 > 0 et f 0 > 0 ou bien
f 00 < 0 et f 0 < 0) donc convergente soit croissante (f 00 > 0 et f 0 < 0 ou bien f 00 < 0 et f 0 > 0)
et donc convergente.
Algorithme 2 (Newton).
Remarque 4.1.2. Il est essentiel de fixer une limite au nombre d’itérations car la convergence
n’est pas assurée. On verra dans la suite qu’on peut construire des exemples pour lesquels cet
algorithme ne converge pas. Cependant lorsque la convergence aura lieu, elle sera trés rapide
comme le montre le théorème 4.1.2. D’autre part, le test d’arrêt n’assure pas que la racine x∗
soit à une distance de x.
en+1
Définition 4.1.1. La méthode définie par xn+1 = g(xn ) est dite d’ordre p si la limite de | epn
|
lorsque n −→ +∞ est une constante réelle strictement positive.
Théorème 4.1.2. Soit f une fonction de Classe C 2 . Si x∗ est une racine simple de f , alors la
méthode de Newton est au moins d’ordre 2.
f (x).f 00 (x)
Preuve : On remarque que g 0 (x) = (f 0 (x))2
donc g 0 (x∗ ) = 0. D’autre part :
On définit xn+1 comme étant l’intersection de la sécante S(x) avec l’axe des x : S(xn+1 ) = 0 et
on obtient
xn − xn−1
xn+1 = xn − f (xn ) .
f (xn ) − f (xn−1 )
Remarque 4.1.3. La méthode de la sécante est une méthode itérative à deux pas en ce sens que
xn+1 dépend de xn et de xn−1 . Dans la méthode de Newton-Raphson xn+1 ne dépend que de
xn . C’est une méthode à un pas.
Une façon commode de procéder est de choisir x0 arbitrairement puis de choisir x1 = x0 + h
où h est un accroissement petit. Si xn et xn+1 sont proches (on peut espérer que ce sera le cas
0
si la méthode converge), on peut considérer que f (xxnn)−f (xn−1 )
−xn−1
est une approximation de f (xn ).
Dans ce sens l’algorithme de la sécante est une approximation de l’algorithme de Newton.
1. n := 2 ;
q0 := f (x0 ) ;
q1 := f (x1 ) ;
2. Tant que n ≤ N + 1 Faire
c := x1 − q1 xq11 −x
−q0
0
;
3. Si | c − x1 |≤ Alors Imprimer(c) ; Fin.
4. n := n + 1 ;
x0 := x1 ; x1 := c ;
q0 := q1 ; q1 := f (c) ;
Fin Tant que ;
Imprimer(La méthode a échoué après N itérations) ;
Fin.
pas de la première.
Le théorème suivant caractérise les fonctions g qui donnent des suites convergentes :
Théorème 4.1.3. Si dans l’intervalle [a, b], g vérifie les conditions suivantes :
1. x ∈ [a, b] alors g(x) ∈ [a, b],
0
2. l’application g est strictement contractante, c’est-à-dire maxx∈[a,b] | g (x) |= L < 1 .
Alors pour tout x0 ∈ [a, b], la suite définie par xn+1 = g(xn ) converge vers l’unique point fixe
x∗ de g sur [a, b].
Il est souvent délicat de déterminer un intervalle [a, b] dans lequel les hypothèses du théorème
0
4.1.3 sont vérifiées. Si on peut estimer | g (x∗ ) |, on a le résultat suivant :
0 0
Théorème 4.1.4. Soit x∗ une solution de l’équation x∗ = g(x∗ ). Si g est continue et | g (x∗ ) |<
1 alors il existe un intervalle [a, b] contenant x∗ pour lequel la suite définie par x0 ∈ [a, b] et
xn+1 = g(xn ) converge vers x∗ .
0
Proposition 4.1.5. Soit x∗ une solution de l’équation x∗ = g(x∗ ). Si g est continue au voisi-
0
nage de x∗ et si | g (x∗ ) |> 1 alors pour tout x0 ∈ [a, b] différent de x∗ , la suite xn+1 = g(xn )
ne converge pas vers x∗ .
Un des points essentiels dans l’efficacité des méthodes envisagées concerne la taille des systèmes
à résoudre. Entre 1980 et 2000, la taille de la mémoire des ordinateurs a augmenté. La taille
des systèmes qu’on peut résoudre sur ordinateur a donc également augmenté, selon l’ordre de
grandeur suivant :
Il s’agira donc de construire et d’analyser des méthodes numériques pour la solution de pro-
blèmes d’algèbre linéaire et d’analyse. On étudiera les notions de stabilité, de consistance, de
convergence des méthodes numériques.
43
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Nous considérons un espace vectoriel de dimension n sur R ou sur C. Toutes les matrices consi-
dérées dans la suite sont des matrices carrées.
Rappelons qu’une matrice est dite régulière si elle est inversible, sinon elle est singulière. Une
matrice A est dite normale si AA∗ = A∗ A où A∗ est la matrice adjointe définie par < Au, v >=<
u, A∗ v > pour tout u, v ∈ Cn . Le signe <, > dénote le produit scalaire dans Cn , soit < u, v >=
t
ūv. Une matrice unitaire est une matrice vérifiant A∗ A = AA= In . Elle est hermitienne si
A∗ = A.
Une matrice est dite symétrique si elle est réelle et si t A = A (dans ce cas, t A = A∗ ). La matrice
A est orthogonale si t AA = A t A = In .
Théorème 5.1.1. Etant donné une matrice carrée A, il existe une matrice unitaire U telle que
U −1 AU soit triangulaire. Etant donné une matrice normale A, il existe une matrice unitaire U
telle que U −1 AU soit diagonale.
Si V est muni d’une norme k . k, on définit sur l’ensemble des matrices carrées d’ordre n la
norme suivante :
k Ax k
k A k= supx6=0 = maxkxk=1 k Ax k
kxk
Cette quantité définit bien une norme puisqu’elle vérifie
k A k= 0 ⇒ A=0
k λA k = |λ| k A k
kA+B k ≤ k A kk B k
Nous considérons un système de n équations linéaires à n inconnues
a1,1 x1 +a1,2 x2 +. . . +a1,n xn = b1
a1,1 x1 +a1,2 x2 +. . . +a1,n xn = b1
.. .. .. .. ..
. . . . .
a1,1 x1 +a1,2 x2 +. . . +a1,n xn = b1
30.9 −11
Autrement dit, de très petites variations sur b ont conduit à de grandes variations sur x. Le
conditionnement de A est c(A)=4488 >>> 1. Ce phénomène de mauvais conditionnement
explique pour partie la difficulté de prévoir certains phénomènes. Les appareils de mesure ne
sont jamais parfaits, et il est impossible de connaître exactement b. Cela peut entrainer une
très grande imprécision sur la valeur de x.
Les conditionnements de matrice utilisés dans la pratique correspond aux trois normes usuelles
[Link] , p=1, 2, 8. On note c (A) = kAkp ∗ kA−1 kp .
Si le conditionnement de A est de l’ordre 1 alors on dit que A est bien conditionnée sinon, elle
est mal conditionnée.
3 -1 0 5 3 -1 0 5
-2 1 1 0 l2 ⇒ l2 + 2/3l1 ↔ 0 1/3 1 10/3
2 -1 4 15 l3 ⇒ l3 − 2/3l1 0 -1/3 4 35/3 l3 ⇒ l3 + l2
Nous effectuons une élimination ascendante (back-substitution) ou une remontée afin de ré-
soudre le nouveau système triangulaire obtenu par la méthode de Gauss :
3 -1 0 5 x3 = 3
↔ 0 1/3 1 10/3 x2 = 1
0 0 5 5 x1 = 2
Nous considérons un système de n équations linéaires à n inconnues
a1,1 x1 + a1,2 + · · · + a1,j xj + · · · + a1,n xn
= b1
a2,1 x1 + a2,2 + · · · + a2,j xj + · · · + a2,n xn = b2
. ..
.
. .
A=
ai,1 x1 + ai,2 x2 + · · · + ai,j xj + · · · + ai,n xn = bi
. ..
.. .
an,1 x1 + an,2 x2 + · · · + an,j xj + · · · + an,n xn = bn
les ai,j et les bi,j étant fixés. Ce système est équivalent à Ax = b et par combinaisons linéaires
successives des lignes du système, on triangularise supérieurement. La résolution du système
(1)
A(1) x = b(1) avec A(1) = A une matrice inversible telle que a1,1 6= 0 :
(1) (1) (1) (1)
a1,1 a1,2 . . . a1,j . . . a1,n (1)
(1)
a2,1 a(1) (1) (1) b1
2,2 . . . a2,j . . . a2,n
b(1)
.
. .. .. .. .. .. 2
. . . . . .
(1) (1)
(1)
A = (1) et b = b3
.
ai,1 a(1) . . . a
(1)
. . . a
(1)
.
..
i,2 i,j i,n
. .. .. .. .. ..
.
. . . . . .
(1)
(1) (1) (1) (1) bn
an,1 an,2 . . . an,j . . . an,n
a1,1 est appelé élément pivot de la transformation M1 et on obtient un nouveau système équi-
valent au système de départ : M1 A(1) x = M1 b(1) où
(1) (1) (1) (1)
a1,1 a1,2 . . . a1,j . . . a1,n (1)
(2) (2) (2) b1
0 a2,2 . . . a2,j . . . a2,n (2)
.
. .. .. .. .. .. b2
(2) . . . . . . (2) (1)
(2)
A = et b = M1 b = b3
(2) (2)
(2)
0 a . . . a . . . a .
..
i,2 i,j i,n
. .. .. .. .. ..
.
. . . . . .
(2)
(2) (2) (2) bn
0 an,2 . . . an,j . . . an,n
(2) (2)
les seuls éléments à calculer sont les ai,j , pour i = 2..n et bi , i = 2..n. Ce calcul s’effectue
grâce aux formules suivantes :
(1) (1)
mi,1 = ai,1 /a1,1
(2) (1)
bi = mi,1 bi
a(2) = a(1) − m a(1)
i,j i,j i,1 i,j
(2)
De la même manière, on réitère la procédure de l’élimination de Gauss en supposant que a2,2 6= 0
selon les formules
(2) (2)
mi,2 = ai,2 /a2,2
(3) (2)
bi = mi,2 bi
a(3) = a(2) − m a(2)
i,j i,j i,2 i,j
Complexité de calcul
Le coût de la méthode de Gauss est donné par : n−1
P Pn−1
k=1 (2(n−k)(n−k +1)+n−k) = i=1 (2i(i+
1) + i) opérations soit 23 n3 + 12 n2 − 76 n auxquelles il faut encore ajouter n 2 opérations pour
l’élimination ascendante (algorithme de remontée). La méthode de Gauss exige donc finalement
le calcul de 32 n3 + 32 n2 − 76 n opérations en tout. Tout ceci n’est évidemment valable que si les
pivots successifs des transformations sont non nuls.
Remarque 5.2.1. Si, au cours des calculs, on rencontre un pivot nul, il faut permuter la ligne de
ce pivot avec une ligne d’indice supérieur, présentant un pivot non nul dans la même colonne.
Ceci sera toujours possible si le système donné est compatible (detA 6= 0). En pratique, on ne
permute pas les lignes entre-elles, on change simplement le numéro des lignes à permuter en
stockant dans un vecteur de travail les indices des pivots successifs. Pour la "back-substitution"
on tient compte de l’ordre utilisé lors de la triangularisation.
Proposition 5.2.2 (Unicité). On suppose que A est régulière et admet une factorisation A=
LU, alors U est régulière et la factorisation est unique.
Preuve : det(A)=det(LU)=det(L)det(U)=det(U).
Si A est régulière (det(A) 6= 0) alors U l’est aussi. Supposons que A=L1 U1 =L2 U2 alors L−1
2 L1 =
−1 −1
U2 U1 = D. Comme L2 est une matrice triangulaire inférieure à diagonale unité donc L2 trian-
gulaire inférieur à diagonale unité. De même, comme L1 est une matrice triangulaire inférieure
à diagonale unité donc D = L−1 2 L1 est une matrice triangulaire inférieure à diagonale unité.
D’autre part, U1 est une matrice triangulaire supérieure donc U1−1 est une matrice triangulaire
supérieure et U2 est une matrice triangulaire supérieure donc D = U2 U1−1 est une matrice
triangulaire supérieure. Ainsi D est la matrice unité, L1 = L2 et U1 = U2 .
Proposition 5.2.3 (Existence). On suppose que l’élimination de Gauss est faisable sans per-
mutation de lignes sur un système de matrice A supposée régulière. Alors A possède une facto-
risation LU avec U régulière.
Théorème 5.2.4. La matrice A(n,n) posséde une factorisation LU avec U régulière si et seule-
ment si ses sous-matrices principales Ak k=1. . .n sont régulières.
La méthode ne fonctionne qu’avec les matrices carrés régulières (det A 6= 0). La méthode fournit
la matrice inverse de A grâce à la relation A−1 = U−1 L−1 . La matrice U est identique à la ma-
trice triangulaire fournie par la méthode de Gauss. La matrice L = (Mn−1 Mn−2 . . .M2 M1 )−−1
s’écrit:
1 0 0 ··· 0
m21
1 0 ··· 0
L=
m31 m32 1 · · · 0 où les Mik sont les facteurs multiplicatifs rencontrés lors
.. .. .. . . ..
. . . . .
mn1 mn2 mn3 · · · 1
de la triangularisation de Gauss.
4 −9 2
Exemple 5.2.2. Effectuer la factorisation LU de la matrice : A = 2 −4 4 .
−1 2 2
4 −9 2
D’après les formules : m21 = 0.5 et m31 = -0.25 ce qui nous donne A = 0 0.5 3 .
0 −0.25 2.5
1 0 0
De la même manière m32 = -0.5 et nous obtenons que L = 0.5 1 0 et U =
−0.25 −0.5 1
4 −9 2
0 0.5 3 .
0 0 4
Théorème 5.2.5. Une matrice A symétrique est définie positive si tous ses déterminants sont
positifs
Théorème 5.2.6. Si les valeurs propres d’une matrice A symétrique sont toutes strictement
positives alors A est définie positive. De même si A est définie positive alors toutes ses valeurs
propres sont strictement positives.
Rappel : Les valeurs propres d’une matrice triangulaire sont les éléments de sa diagonale.
Théorème 5.2.7. Si A est une matrice symétrique définie positive, alors il existe au moins
une matrice réelle triangulaire inférieure R tel que A=RRT
de plus si Rii > 0 ∀ i=1,2,. . .,n alors la factorisation est unique.
q
rii = aii − i−1 2
P
k=1 rik pour i = 2 . . . n
h i
rji = r1ii aji − i−1
P
r
k=1 jk ∗ rik pour i = 2 . . . n , j = i + 1 . . . n
1 1 1 1
1 5 5 5
Exemple 5.2.3. Soit A = 1 5 14 14 . La matrice symétrique A décomposée par la mé-
1 5 14 15
1 0 0 0
1 2 0 0
thode de Cholesky tel que A=RRT avec R = 1 2 3 0
1 2 3 1
Remarque 5.2.3. Le coût du calcul est de l’ordre de n2 /2 opérations arithmétiques et n ex-
tractions de racine carré, c’est plus économique que la factorisation LU pour une matrice
symètrique.
Cette méthode fournit un test efficace pour déterminer si une matrice symétrique est définie
positive ou non :
Dans de très nombreux problèmes concrets, les systèmes à résoudre ont des matrices symétriques
définies positives en raison même des phénomènes qu’ils modélisent. La méthode de factorisation
de Cholesky revêt donc une importance particulière.
Toutefois, comme toutes les méthodes directes, son coût de calcul et les erreurs d’arrondis
deviennent un handicap quasiment insurmontable pour des systèmes comptant de l’ordre de
200 équations. En pratique on est surtout amené à résoudre des systèmes de plusieurs dizaines
de milliers d’équations dont les matrices, fort heureusement, sont généralement creuses. La
rèsolution de tels systèmes nécessite l’emploi de méthodes itératives.
Preuve : Immédiate.
Définition 5.2.4. . Un vecteur propre est dit normalisé si la plus grande de ses coordonnées
est égale à 1.
v1
v2
Remarque 5.2.5. Il est facile de transformer un vecteur propre v = .. en formant un
.
vn
v1
v2
nouveau vecteur v 0 = 1c .. avec c = vj et
.
vn
Preuve : Sachant que A admet n valeurs propres associées à n vecteurs propres distincts
vj 1 ≤ j ≤ n, linéairement indépendants normalisées et formant une base de dimension n.
On peut alors écrire X0 dans cette base :
après k itérations
Yk−1 = AXk−1
" " k−1 k−1 ##
k−1
(λ1 ) λ2 λn
=A α1 v1 +α2 v + · · · +αn vn
C1 C2 . . .Ck−1 λ1 2 λ1
" " k−1 k−1 ##
(λ1 )k−1 λ2 λn
= α1 Av1 +α2 Av + · · · +αn Av n
C1 C2 . . .Ck−1 λ1 2 λ1
" " k−1 k−1 ##
(λ1 )k−1 λ2 λn
= α1 λ1 v1 +α2 v + · · · +αn nvn
C1 C2 . . .Ck−1 λ1 2 2 λ1
" " k k ##
(λ1 )k λ2 λn
= α1 v1 +α2 v + · · · +αn vn
C1 C2 . . .Ck−1 λ1 2 λ1
k
λj λ
or λ1 <1 ∀ j ∈ [2, n] alors limk→+∞ αj λ1j =0 ∀ j ∈ [2, n]
ainsi
α1 (1 )k
lim Xk = v1
k→+∞ C1 C2 . . .Ck
comme Xk et v1 sont normalisés, on a :
)k
limk→+∞ C1αC1 (21...C k
= 1 (éq 3.3.1)
donc
lim Xk =v1
k→+∞
6.1 Rappel
On dit qu’une fonction g définie sur un intervalle [a, b] est lipschitzienne de constante L si
En pratique, la fonction g est de classe C 1 sur [a, b] et cette inégalité est une conséquence de la
formule des accroissements finis :
Lemme 6.1.1. 1. On montre par récurrence que si un+1 ≤ un α + β pour tout n alors
n −1
un ≤ u0 α + β αα−1
n
.
2. On montre grâce à une étude de fonction que si X > 0 alors (1 + X)n ≤ enX .
Théorème 6.2.1 (admis). On supprose que f est lipschitzienne par rapport à sa deuxième
variable uniformément par rapport à sa première variable. Il existe donc L > 0 tel que
La condition (6.2.2) sera satisfaite si f admet une dérivée partielle par rapport à sa deuxième
variable qui soit bornée dans [a, b] × R. On obtient grâce au Théorème des Accroissements
54
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Finis :
∂f
f (x, z1 ) − f (x, z2 ) = (x, zc )(z1 − z2 )
∂z
∂f
⇒ | f (x, z1 ) − f (x, z2 ) | ≤ maxx∈[a,b] | (x, zc ) | | z1 − z2 | .
∂z
On présente dans les sections suivantes des méthodes d’approximation de la solution y(x) de
(6.2.1). Pour cela, on subdivise l’intervalle [a, b] uniformément et on approche la fonction y en
ces points.
Soit n un entier naturel non nul. On pose xi = a + ih avec h = b−a n
et i = 0..n. On va calculer
une approximation yi de y(xi ) pour i = 0..n et estimer l’erreur d’approximation ei = yi − y(xi ).
Entrée : n, τ , a et b, et la fonction f .
Sortie : Une approximation de yx.
x0 := a ;
y0 := τ ;
h := b−an
;
Pour i allant de 0 à n Faire
xi+1 := xi + h ;
2
yi+1 := yi + hf (xi , yi ) + h2 ( ∂f
∂x
+ f ∂f
∂z
)(xi , yi ) ;
Fin Pour ;
Imprimer(La méthode de Taylor d’ordre 2 donne une
approximation de y en (xi , yi ), i = 0..n).
Fin.
Théorème 6.4.1. Si f est de Classe C 2 sur [a, b] × R, lipshitzienne par rapport à sa deuxième
variable uniformément par rapport à sa première variable (avec la constante L) et si ∂f
∂x
+ f ∂f
∂z
est lipshitzienne par rapport à sa deuxième variable uniformément par rapport à sa première
variable (avec la constante L1 ), alors pour h ∈ [0, h0 ] on a :
h0
(e(b−a)(L+ 2 L1 )
− 1) maxx∈[a,b] | y (3) (x) | 2
| en |≤ h .
L 6
Preuve : Voir la démonstration du théorème 6.5.1.
Théorème 6.5.1. Soit une méthode à un pas définie par yn+1 = yn + h.φ(xn yn , h) où φ est
continue sur [a, b] × R × [0, h0 ] lipshitzienne par rapport à sa seuxième variable uniformément
par rapport à la première et à la troisième de constante Lφ et telle que
y(x + h) − y(x)
− φ(x, y(x), h) ≤ khp
h
où y est solution de l’EDO y 0 (x) = f (x, y(x)) et f de Classe C p sur [a, b] × R. Alors
| en | ≤ K hp .
Un réseau de neurones artificiel est une structure composée d’entités (les neurones) capables de
calcul interagissant entre eux. Il permet de traiter, par le biais de l’informatique, des problèmes
de différentes natures que les outils classiques ont du mal à résoudre. Les explications et autres
définitions sont tirés du polycope de Marie Cottrel de l’Université de la Sorbonne 1 .
7.1 Historique
Les recherches sur le cerveau ont fait d’énormes progrès, tant du point de vue de la compréhen-
sion du fonctionnement qu’à l’échelle cellulaire et membranaire. On sait désormais mesurer et
enregistrer l’activité électrique d’un neurone ou d’un ensemble de neurones. Le cerveau humain
dispose de l’ordre de 1011 avec plus de 1015 connexions. Il y a des propriétés collectives des
neurones qui agissent en relations excitatrices ou inhibitrices. On distingue dans le cerveau des
sous-ensembles, des connexions internes et externes, des entrées et des sorties, pour réaliser
certaines tâches (parole, vision, émotion,...).
Les années 1940 sont connues pour l’apprentissage du codage et de la recherche opérationnelle :
A. Turing avait mis en place la machine de Turing, premier ordinateur conçu pour déchiffrer
le code Enigma. Depuis, le besoin de proposer des machines ou des modèles reproduisant des
fonctions des cerveaux humains ont été développés. Il s’agit d’outils de calcul, de mémoire
pour reproduire des comportements intelligents. Des chercheurs dans différents domaines ont
travaillé sur l’intelligence artificielle.
Le tableau suivant donne brièvement un historique des réseaux de neurones artificiels :
1940 - 1960 Mac Cullogh & Pitts 43 modèle de neurone
concepts Hebb loi d’adaptation
Rosenblatt 58 perceptron
1960 - 1980 Widrow-Hoff 58 adaline
transition et déclin Minsky & Papert 69 limites aux perceptron
1980 - ... Hopfield 82 réseaux dynamiques
renouveau Kohonen 72, 82, 84 auto-organisation
Rumelhart, Le Cun 86 rétro-propagation
Werbos 74
1. Marie Cottrel, Les réseaux de neurones historique, méthodes et applications SAMOS-MATISSE, Université
Paris 1, Sorbonne
57
Cours d’Analyse Numérique Ines Abdeljaoued Tej
7.2 Définitions
Un neurone biologique est une cellule nerveuse dont la fonction est de transmettre, dans cer-
taines conditions, un signal électrique (0.01s). C’est comme un relai entre une couche de neu-
rones et celle qui la suit. Le corps
Le corps d’un neurone est relié d’une part par un ensemble de dendrites (entrées du neurone)
et d’autre par à un axone, qui est la partie étirée de la cellule. L’axone représente pour nous la
sortie du neurone. Les charges électriques, reçues par les connexions synaptiques (en amont),
s’accumulent dans le noyau du neurone jusqu’à atteindre un certain seuil. Au delà de ce seuil,
la transmission du signal électrique se déclenche via son axone vers d’autres neurones (en aval).
On remarque que les liaisons axone-dendrite entre deux neurones (connexions synaptiques) ne
sont pas toutes de la même efficacité. Ainsi l’entrée associée à une certaine dendrite du neurone
pourra avoir plus d’influence qu’une autre sur la valeur de sortie. On peut représenter la qualité
de la liaison par un poids, sorte de coefficient s’appliquant au signal d’entrée. Le poids sera
d’autant plus grand que la liaison est bonne. Un poids négatif aura tendance à inhiber une
entrée, tandis qu’un poids positif viendra l’accentuer 2 .
2. Texte et dessin d’Adrien Vergé, Réseaux de neurones artificels, Lycée Michelet, TIPE 2009.
Linéaire f (x) = x
1
Sigmoïde f (x) =
1 + e−x
ex − e−x
Tangente hyperbolique f (x) =
ex + e−x
Chaque neurone comportant plusieurs entrée et une seule sortie, on peut d’une façon générale,
superposer dans une même couche, la couche 1 qui a s1 neurones formels à e1 entrées. On
obtient alors un système admettant e1 entrées et s1 sorties. Puis, lorsqu’on concatène N couches
connectées les unes à la suite des autres (le nombre d’entrées d’une couche étant égal au nombre
de sorties de la couche précédente : sn−1 = en ), on obtient un réseau de N couches de neurones.
les données aberrantes auxquelles ils sont sensibles. Pour les PMC, les données doivent être
normalisées. La particularité du réseau de neurones comme outil mathématique repose sur sa
capacité d’apprentissage. Grâce à un processus d’entraînement, on peut améliorer les perfor-
mances du réseau, c’est-à-dire qu’en réponse à une certaine entrée, il fournit la bonne sortie. Il
s’agira de modifier les poids des liaisons en réaction aux entrées qu’on lui soumet, de manière à
ce que la sortie corresponde au résultat désiré. Le réseau s’améliore en réduisant l’erreur qu’il
commet à chaque simulation. On utilise pour cela un algorithme d’apprentissage. Il y a deux
types d’algorithme d’apprentissage :
— Les apprentissages supervisés : on fournit un grand nombre de couples (x, c) où x est
l’entrée et c est la sortie désirée. La correction s’effectue selon l’erreur obtenue pour
chaque couple. Dans le cas d’un perceptron, la correction de l’erreur se fait comme suit :
wi ← wi + ∆wi
avec
∆wi = η(t − c)xi
où
t = f (~x) est la valeur cible
c est la sortie désirée du perceptron
η une constante de petite taille (e.g., .1) appelée taux d’apprentissage
On prouve la convergence lorsque les données d’apprentissage sont linéairement sépa-
rables et η suffisamment petit. On parle en général d’apprentissage par l’exemple.
— Les apprentissages non supervisés : ne connaissant pas la sortie désirée pour une entrée
donnée, on n’a pas de signal d’erreur le réseau apprendra par lui-même à classer des
entrées similaires en trouvant des points communs aux stimuli appliquées.
La correction de l’erreur en réaction à des stimuli en entrée constitue le processus d’apprentis-
sage
To understand, consider simpler linear unit, where
o = w0 + w1 x1 + · · · + wn xn
Let’s learn wi ’s that minimize the squared error
1X
~ ≡
E[w] (td − od )2
2 d∈D
Where D is set of training examples.
∂E ∂E ∂E
∇E[w]
~ ≡ , ,···
∂w0 ∂w1 ∂wn
Training rule :
~ = −η∇E[w]
∆w ~
i.e.,
∂E
∆wi = −η
∂wi
∂E ∂ 1X
= (td − od )2
∂wi ∂wi 2 d
1X ∂
= (td − od )2
2 d ∂wi
1X ∂
= 2(td − od ) (td − od )
2 d ∂wi
X ∂
= (td − od ) (td − w~ · x~d )
d
∂w i
∂E X
= (td − od )(−xi,d )
∂wi d
Gradient-Descent(training_examples, η)
Each training example is a pair of the form h~x, ti, where ~x is the vector of input
values, and t is the target output value. η is the learning rate (e.g., .05).
— Initialize each wi to some small random value
— Until the termination condition is met, Do
— Initialize each ∆wi to zero.
— For each h~x, ti in training_examples, Do
— Input the instance ~x to the unit and compute the output o
— For each linear unit weight wi , Do
wi ← wi + ∆wi
But we know :
∂od ∂σ(netd )
= = od (1 − od )
∂netd ∂netd
∂netd ~ · ~xd )
∂(w
= = xi,d
∂wi ∂wi
So :
∂E X
= − (td − od )od (1 − od )xi,d
∂wi d∈D
Backpropagation Algorithm :
Initialize all weights to small random numbers.
Until satisfied, Do
— For each training example, Do
1. Input the training example to the network and compute the network outputs
2. For each output unit k
δk ← ok (1 − ok )(tk − ok )
3. For each hidden unit h
X
δh ← oh (1 − oh ) wh,k δk
k∈outputs
where
Input Output
10000000 → 10000000
01000000 → 01000000
00100000 → 00100000
00010000 → 00010000
00001000 → 00001000
00000100 → 00000100
00000010 → 00000010
00000001 → 00000001
Nous considérons une fonction sin(x) bruitée et nous comparons avec le modèle polynomial
(interpolation) ainsi que le PMC.
library(nnet)
library(MASS)
# Les donn\’ees
x <-sort(10*runif(50))
y <- sin(x)+0.2*rnorm(x)
data <- [Link](x,y)
# Construction du PMC linout=TRUE pour \^etre entre 0 et 1
nn <- nnet(x,y,size=4,maxit=100,linout=TRUE)
plot(x,y,col="blue",pch=16)
# Le PMC en mode de fonctionnement
lines(x1,predict(nn,[Link](x=x1)),col="red")
# La courbe sin(x)
x1<-seq(0,10,by=0.01)
lines(x1,sin(x1),col="green")
3. Troisième année ISUP, Filière GRIE, Master 2 De Statistique, Major Data Science
Si vous disposez d’une licence SAS, alors il y a moyen de manipuler des réeaux de neurones
artificiels via le package Proc Neural.
7.6 Conclusion
Un réseau de neurones est avant tout un outil de traitement de l’information. En le formant via
l’apprentissage, il peut être capable d’effectuer des tâches de econnaissance, de classification,
d’approximation, de prévision, etc. Nous utilisons par exemple les réseaux de neurones pour
réduire l’écho dans les communications téléphoniques outre-mer (réseau Adaline). Ils peuvent
aussi servir à éliminer du bruit, dans les prévisions météorologiques, dans la compression de
données, dans la modélisation du marché monétaire, dans le développement de l’Intelligence
Artificielle, etc. Il y a aussi moyen de leur apprendre à reconnaître des faces, le son de la voix
et autres lésions cancéreuses. Voir par exemple le projet NetTalk qui est un réseau de 309
neurones relié en entrée à un scanner et branché en sortie à un haut parleur. NetTalk a appris
à lire un texte à haute voix après avoir appris à reconnaître 50000 mots d’un dictionnaire toute
une nuit. Une fois entraîné, le réseau est capable de lire de nouveaux mots qu’il n’ a jamais vu
auparavent. De nos jours, ce sont de vrais neurones animales qui sont utilisés : en Angleterre ce
sont des neurones de rats, mises en culture et connectés par des électrodes au système moteur
d’une machine, qui apprend à éviter les murs à force de se cogner.
Les codes suivants représentent des exercices corrigés ou des Projets de Fin d’années que nous
avons encadrés en Analyse Numérique. Il s’agit de problèmes liés à l’interpolation polynomiale,
à la recherche de solutions d’équations non linéaires et aux problèmes d’Analyse Numérique
matricielle.
A.1 Interpolation
TP2 : Estimation de l’erreur
Théorème : Soient f une fonction de classe C n+1 sur un intervalle [a, b] et P le polynôme de
Lagrange de f en les points x0 < x1 < · · · < xn ∈ [a, b]. Alors
(x − x0 )(x − x1 ) . . . (x − xn ) (n+1)
f (x) − P (x) = f (ζ) (A.1.1)
(n + 1)!
Démonstration : La relation est triviale pour x = xi ∀i = 0..n. Soit x 6= xi , pour tout i = 0..n.
f (x)−P (x)
On pose k(x) = (x−x0 )(x−x 1 )...(x−xn )
et w(t) un polynôme qui s’annule en x0 , x1 , . . ., xn , et x
définit par : w(t) = f (t) − P (t) − (t − x0 )(t − x1 ) . . . (t − xn )k(x). Il s’annule en (n + 2) points.
En appliquant le thórème de Rolle, on montre que wn+1 (t) s’annule en au moins un point ζ :
f (n+1) (ζ)
w(n+1) (ζ) = f (n+1) (ζ) − (n + 1)! k(x) = 0 et k(x) = .
(n + 1)!
Cette quantité ne tend pas nécessairement vers 0 car les dérivées f (n+1) de f peuvent grandir
très vite lorsque n croît. Dans l’exemple suivant, nous présentons deux cas sur la convergence
de l’interpolation de Lagrange.
Exemple : Soit f (x) = sin(x), | f k (x) | ≤ 1 : l’interpolé P converge vers f quelque soit
1
le nombre de points d’interpolation et leur emplacement. Par contre, pour f (x) = 1+14x 2 sur
[−1, 1] et bien que f soit indéfiniment continûment dérivable sur [−1, 1], les grandeurs
max−1≤x≤1 | f k (x) | , k = 1, 2, 3, . . .
66
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Enfin, si on considère à la place des abscisses xi équidistants, les zéros de Tchebychev, nous
obtenons la figure 5 pour n = 5 points et ensuite la figure 6 pour n = 13 :
SAGEmath: a=-1; b=1; n=5;
SAGEmath: ydata=[simplify((a+b)/2+(b-a)/2*cos((2*k+1)*3.14/(2*n+2)))
for k in range(n+1)]
SAGEmath: print(ydata)
[0.965960168538399, 0.707388269167200, 0.259459981914882, -0.257921542147459,
-0.706261644820005, -0.965546938710468]
SAGEmath: f=1/(1+14*x^2)
SAGEmath: P=lagrange(f, ydata)
SAGEmath: A=plot(f, -1,1, rgbcolor=(0,2,1))
SAGEmath: B=plot(P, -1,1, rgbcolor=(1,0,0))
SAGEmath: A+B
Figure A.5 – Interpolation sur les zé- Figure A.6 – Interpolation sur les zéros de
ros de Tchebychev pour n = 5 Tchebychev pour n = 13
−36
— g2 (x) = x3 +6x−60
1
— g3 (x) = (−6x2 + 60x − 36) 4
1. Ecrire une procédure qui prend en entrée g, x0 et N et qui calcule le Nème terme de la
liste xn+1 = g(xn ).
2. Vérifier ensuite la convergence de la méthode du point fixe pour chacun des gi sur [0, 4].
Pour cela, il faut chercher à satisfaire toutes les conditions du théorème de convergence
de la méthode du point fixe :
3. Ecrire un script qui permet d’accélérer la convergence de g3 .
def euler(f,n,tau,a,b):
h = (b-a)/n
x = [x0]
y = tau
for i in range(n):
x += [x[i]+h]
y += [y[i]+h*f(x[i],y[i])]
return x,y
Ci-dessous une image en noir et blanc de taille 2500 X 4000 pixels dont la matrice A représen-
tative est générée par un logiciel de lecture de l’image (via un scanner ou un appareil photo
numérique). le résultat renvoyé correspond à une matrice A de rang r. la matrice admet donc
r valeurs singulières non nulles. Soit σ1 la valeur maximale de ces valeurs singulières et soient
σ1 , σ2 , ...σr ces valeurs singulières triées par ordre décroissant. On sait alors qu’il existe une
matrice U de taille 2500, une matrice V de taille 4000 telsque A = U diag(σ1 , σ2 , ...σr ) V t . En
désignant par ui les vecteurs colonnes de U , et par vi les vecteurs colonnes de V , on obtient
Pr
que A = i=1 σi ui vit .
Mais si on regarde de plus près les valeurs singulières non nulles σ1 , σ2 , ...σr , on constate que
nombreuses d’entre-elles sont très petite (voir négligeable) devant les autres. On peut alors
décider que σσ1i > , où est un filtre choisi par l’utilisateur, par exemple = 10−3 . Dans ce
cas, σi est considérée comme nulle : on réduit ainsi le nombre de valeurs singulières à conserver
dans l’expression de A selon la décomposition SVD.
Notons σ1 , σ2 , ...σk les valeurs singulières conservées. Dans l’exemple proposé ci-dessous, avec
k = 3, l’image est floue mais on constate facilement que c’est un paysage. Pour k = 13 l’image
est déjà ressemblante à l’originale. pour k = 80 on peut dire que l’image obtenue est identique à
l’originale. La connaissance de A est alors donnée par la connaissance de 80 valeurs singulières,
plus 80 vecteurs de taille 2500, plus de 80 valeurs de taille 4000. Soit 520 080 au lieu de 10 000
000.
A.4.2 Correction
%matplotlib inline
import [Link] as plt
import numpy as np
import time
import pylab
import numpy
@interact
def svd_image(i = ( "Eigenvalues(quality)",(20,(1..A_image.shape[0])))):
Il s’agit d’abord de tester la notion de problème bien ou mal posé par la voie des matrices bien
ou mal conditionnées. Ensuite, il faudra implémenter la factorisation LU et la factorisation de
Cholesky et de comparer ses deux factorisations.
et
4.218611 6.32791 10.546530
A= ,b =
3.141594 4.712390 7.853980
1. Dessinez les deux droites associées au premier système. Vous remarquerez que le premier
système est formé de deux droites presque parallèles. Ainsi, résoudre le système revient
à chercher l’intersection de ces deux droites presque parallèles.
2. Résoudre ces deux systèmes et comparer les solutions. Que remarquez-vous ? Il est clair
que si on perturbe le deuxième système, l’intersection de ces deux nouvelles droites
presque parallèles sera fortement modifié.
3. Calculer le nombre de conditionnement ||A||.||A−1 || de chacun de ces système. Le condi-
tionnement étant loin de 1, ceci explique les différences des solutions. On parle de pro-
blème mal conditionné.
A.6 Factorisation LU
On considère la matrice
4 8 12
A= 3 8 13
2 9 18
1. Ecrire l’algorithme de factorisation LU.
2. Comparer le résultat avec celui de la fonction python qui permet une factorisation LU.
Soit R une matrice triangulaire inférieure telle que A = RRt . Alors R aura la forme suivante :
l1
m1 l2
... ...
R=
· · · c N −2
· · · lN −1
mN −1 lN
1. Trouver le l et m en fonction de a et de c.
2. Compléter l’algorithme de décomposition de Cholesky suivant (l est mémorisé dans a et
m
est mémorisé pdans c) :
a(1) = a(1)
Pour i allant de 1 à N-1 Faire
c(i) = ?/ ? √
a(i + 1) = ?−?∗?
Les éléments non nuls de la matrice R correspondent-ils aux éléments non nuls de la
matrice A ?
...
SAGEmath: for i in range(1,N):
... A[i,i-1]=c[i-1]
...
SAGEmath: show(A)
3.00000000000000 −1.00000000000000 0.000000000000000
−1.00000000000000 3.00000000000000 −1.00000000000000
0.000000000000000 −1.00000000000000 3.00000000000000
show(A.cholesky_decomposition())
1.73205080756888 0.000000000000000 0.000000000000000
−0.577350269189626 1.63299316185545 0.000000000000000
0.000000000000000 −0.612372435695794 1.62018517460197
SAGEmath: def cholesky(a,c):
... a[0]=sqrt(a[0]).n()
... for i in range(N-1):
... c[i]=c[i]/a[i].n()
... a[i+1]=(sqrt(a[i+1]-c[i]^2)).n()
... A = matrix(CC,N,N)
... for i in range(N):
... A[i,i]=a[i]
... for i in range(1,N):
... A[i,i-1]=c[i-1]
... return(A)
SAGEmath: a = [3.0 for i in range(N)]
SAGEmath: c = [-1.0 for i in range(N-1)]
SAGEmath: show(cholesky(a,c))
1.73205080756888 0.000000000000000 0.000000000000000
−0.577350269189626 1.63299316185545 0.000000000000000
0.000000000000000 −0.612372435695794 1.62018517460197
4. La méthode de Jacobi consiste à calculer la suite xk+1 = Jxk +D−1 b avec J = In +D−1 A
et D la matrice diagonale contenant les éléments de la diagonale de A. Appliquez la
3
méthode de Jacobi, en partant de x0 = 2 . Vous remarquerez que x2 = x∗ la
2
solution du système Ax = b.
5. Résoudre le système Ax
=b grâce à la factorisaton de Cholesky puis grâce à la méthode
0
de Jacobi, avec x0 = 0 :
0
4 2 1 4
A= -1 2 0 ,b = 2
2 1 4 9
Exercice B.0.1. Citer deux méthodes d’interpolation polynomiale. Quelle est la différence entre
ces méthodes et la méthode des moindres carrés discrets ?
1. Montrer que l’équation f (x) = 0 admet une unique solution sur [0, 1].
2. Nous désirons déterminer la solution de l’équation f (x) = 0 avec la méthode de Newton
sur [0, 1].
(a) Est-ce que la fonction f vérifie les conditions du théorème de convergence globale de
la méthode de Newton pour x0 = 1. Donner le théorème.
(b) Calculer la racine de f sur l’intervalle [0, 1] avec une précision de calculs égale à 10−6 .
3. Ecrire l’algorithme général de la méthode de Newton qui prend en entrée les points x0 ,
a < b et une fonction f et rend la racine de f (x) = 0 sur [a, b] ou bien un mesSAGEmath
d’erreur.
1. Montrer que l’équation f (x) = 0 admet une unique solution sur [0, 1].
2. Nous désirons déterminer la solution de l’équation f (x) = 0 avec la méthode de Newton
sur [0, 1]. En quoi consiste cette méthode ?
3. Ecrire l’algorithme général de la méthode de Newton qui prend en entrée les points x0 ,
a < b et une fonction f et rend la racine de f (x) = 0 sur [a, b] ou bien un mesSAGEmath
d’erreur.
78
Cours d’Analyse Numérique Ines Abdeljaoued Tej
7. Calculer la racine de P (x) = 0 sur l’intervalle [0, 3] par la méthode de Newton avec
x0 = 1. La précision des calculs est à 10−6 près.
Exercice B.0.7. 1. Soit f une fonction continue sur un intervalle [a, b] ⊂ R avec f (a).f (b) <
0. Expliquer géométriquement la méthode de la sécante dans la recherche d’une solution
de l’équation f (x) = 0 sur [a, b].
2. Donner l’ordre de la méthode de Newton pour la recherche d’une racine simple d’une
fonction de classe C 2 .
6. Vérifier que P (xi ) = fi pour i de 0 à 3 et montrer qu’il existe une unique racine de P
sur l’intervalle [0, 3].
7. Donner le théorème de convergence globale de la méthode de Newton pour une fonction
de classe C 2 .
8. Calculer la racine de P (x) = 0 sur l’intervalle [0, 3] par la méthode de Newton avec
x0 = 3. La précision des calculs est à 10−6 près.
9. Ecrire l’algorithme de Newton qui prend en entrée les points x0 , a < b et une fonction f
et rend la racine de f (x) = 0 sur [a, b] ou bien un mesSAGEmath d’erreur.
Exercice B.0.9. 1. Calculer par la méthode de la puissance, la valeur propre dominante à
−2
10 près de
4 -1 -1 1
A= -1 2 -1 avec x0 = 1 .
-1 -1 2 1
2. Ecrire l’algorithme de la méthode de la puissance inversée.
Exercice B.0.10. Etant donnés une matrice A triangulaire inférieure de taille (n, n) avec des
1 sur la diagonale et un vecteur b de taille n, calculer la complexité en nombre d’opérations
élémentaires de la méthode de descente appliquée au système Ax = b.
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 1, f1 = 0, f2 = 1, f3 = 4.
1. Afin de déterminer une approximation du nuage de points (xi , fi ) par la droite de ré-
gression linéaire, nous appliquerons la méthode des moindres carrés discrets :
(a) Soit A la matrice associée au système des moindres carrés :
Pi=n 2 Pi=n
i=0 xi i=0 xi
A=
Pi=n
i=0 xi n+1
Exercice B.0.12. Etant donnés une matrice A triangulaire supérieure de taille (n, n) inversible
et un vecteur b de taille n, calculer la complexité en nombre d’opérations élémentaires de la
méthode de remontée appliquée au système Ax = b.
C.1 2008-2009
Nom et Prénom : Groupe :
Ecole ou Institut de l’année dernière :
Exercice : Soient (xi , fi ) pour i = 0..n des points réels ou complexes. Ecrire un algorithme
permettant de calculer le polynôme de Lagrange se basant sur les polynômes d’interpolation
Li (x) pour i = 0..n.
Déterminer la complexité de cet algorithme en fonction de n.
Correction :
Entrée : (xi , fi ) pour i = 0..n
Sortie : Le polynôme de Lagrange P(x).
P := 1 ;
Pour i allant de 0 à n Faire
L :=1 ;
Pour j allant de 0 à n Faire
Si i <> j alors
L := L + (x − xj )/(x − xi ) ;
Fin Si ;
Fin Pour ;
P :=P + fi + L ;
Fin Pour ;
Afficher(P ) ;
Fin.
82
Cours d’Analyse Numérique Ines Abdeljaoued Tej
Exercice 1 (6pt).
1. Donner le théorème de Gershgorin appliqué à une matrice A de taille n × n quelconque.
2. Expliquer la méthode de la puissance appliqée à une matrice A en donnant l’algorithme.
3. Calculer les deux premières itérations de la méthode de la puissance apliquée à :
!
√1
1 0 2
A= avec y0 = √1
.
0 2 2
Exercice 2 (4pt). Exercice : Soient (xi , fi ) pour i = 0..n des points réels ou complexes.
Ecrire un algorithme permettant de calculer le polynôme de Lagrange se basant sur les poly-
nômes d’interpolation Li (x) pour i = 0..n.
Déterminer la complexité de cet algorithme en fonction de n.
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 1, f1 = 0, f2 = 1, f3 = 4.
1. Donner le théorème de convergence globale de la méthode de Newton pour une fonction
de classe C 2 . Peut-on appliquer ce théorème au calcul de la racine de P (x) = 0 sur
l’intervalle [0, 3] avec x0 = 1 ?
Pi=n Pi=n
i=0 x2i i=0 xi
2. Soit A = . Donner la décomposition LU de A.
Pi=n
i=0 xi
n+1
Pi=n
a0 i=0 x i f i
3. Résoudre le système A = par une descente puis une remontée.
Pi=n
a1 i=0 fi
4. En déduire une approximation du nuage de points (xi , fi ) par la droite de régression
linéaire.
5. Quelle est la différence entre le polynôme de Lagrange et la droite de régression linéaire ?
Exercice 1 (6pt).
P := 1 ;
Pour i allant de 0 à n Faire
L :=1 ;
Pour j allant de 0 à n Faire
Si i <> j alors
L := L + (x − xj )/(x − xi ) ;
Fin Si ;
Fin Pour ;
P :=P + fi + L ;
Fin Pour ;
Afficher(P ) ;
Fin.
Il y a o(4n2 ) opérations élémentaires. Il s’agit de o(2n2 ) additions/soustractions, o(n2 ) multi-
plications et o(n2 ) divisions.
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 1, f1 = 0, f2 = 1, f3 = 4.
1. Voir le cours pour le théorème de convergence globale de la méthode de Newton pour
une fonction de classe C 2 .
On ne peux appliquer ce thèorème au calcul de la racine de P (x) = x2 sur l’intervalle
00
[0, 3] : il faudra restreindre l’intervalle car P 0 (0) = 0 et P (0) = 0).
6 2
2. Soit A = . La décomposition LU de A est triviale :
2 4
1 0 6 2
L= , U = .
1 10
3
1 0 3
a0 8
8
3. La résolution du système A = par une descente donne 10 puis la
a1 6 3
1
remontée donne .
1
4. Une approximation du nuage de points (xi , fi ) est donnée par la droite de régression
linéaire d’équation P0 (x) = x + 1.
5. Conclure sur la variation en terme de degré, de complexité des calculs et en terme de
différence entre interpolation et approximation.
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 1, f1 = 0, f2 = 1, f3 = 4.
1. Donner le théorème de convergence globale de la méthode de Newton pour une fonction
de classe C 2 . Peut-on appliquer ce théorème au calcul de la racine de P (x) = 0 sur
l’intervalle [0, 3] avec x0 = 1 ?
Pi=n 2
Pi=n
i=0 xi i=0 xi
2. Soit A = . Donner la décomposition LU de A.
Pi=n
i=0 xi n+1
Pi=n
a0 i=0 xi fi
3. Résoudre le système A = par une descente puis une remontée.
Pi=n
a1 i=0 fi
4. En déduire une approximation du nuage de points (xi , fi ) par la droite de régression
linéaire.
5. Quelle est la différence entre le polynôme de Lagrange et la droite de régression linéaire ?
C.2 2009-2010
1. Ecrire l’algorithme de la méthode de Cholesky qui prend en entrée A et qui calcule une
matrice R triangulaire vérifiant A = Rt R.
2. Supposons que la fonction racine nécessite au plus 9 opérations élémentaires. Déterminer
la complexité de la méthode de factorisation de Cholesky de A en fonction de n.
3. Donner la factorisation de Cholesky de la matrice
1 1
A=
1 2
Exercice 2 (4pt). Calculer par la méthode de la puissance la valeur propre et le vecteur propre
!
√1
1 0 2
dominants de la matrice A = avec X0 = √1
.
0 2 2
Exercice (8pt).
1. Etant donné une matrice A = (aij ), λ une de ses valeurs propres associé au vecteur
propre v et i l’indice de la coordonné vi de v vérifiant | vi |= max1≤j≤n | vj |. Montrer
que
j=n
X
| λ − aii |≤ | aij | .
j=1,j6=i
0
3. Que se passe-t-il lorsqu’on considère X0 = ?
2
x0 = −1, x1 = 0, x2 = 1, x3 = 2,
f0 = 0, f1 = −1, f2 = 0, f3 = 3.
1. Calculer le poynôme de Lagrange P sur les points d’interpolation xi , i = 0..3.
2. Donner le théorème de convergence de la méthode du point fixe pour une fonction de
classe C 1 sur un intervalle [a, b]. Peut-on appliquer ce théorème au calcul de la racine de
P (x) = 0 sur l’intervalle [0, 2] avec g(x) = 21 P (x) + x et X0 = 0 ?
Pi=n Pi=n
i=0 x2i i=0 xi
3. Soit A = . Donner la décomposition LU de A.
Pi=n
i=0 xi
n+1
Pi=n
a0 i=0 xi fi
4. Résoudre le système A = par une descente puis une remontée.
Pi=n
a1 i=0 fi
5. En déduire une approximation du nuage de points (xi , fi ) par la droite de régression
linéaire p1 (x) = a0 x + a1 .
6. Quelle est la différence entre le polynôme de Lagrange et la droite de régression linéaire ?
C.3 2010-2011
Indication
: la formule des différences divisées est la suivante :
ci,i = f (xi ) pour i = 0, .., n
c −ci,j−1
ci,j = i+1,j xj −xi
pour 0 ≤ i < j ≤ n.
2. Répondre par Vrai ou Faux aux affirmations suivantes et justifier votre réponse :
(a) Il existe une infinité de polynômes de degré > n interpolant les points (xi , f (xi ))i=0,.,.n .
π
(b) Le polynôme de Lagrange de sin(x) sur les points 0, 2
et π est égal à P (x) = x3 +3x2 .
Intégration.
R2
3. Calculer par la méthode des trapèzes une approximation T (h) de 0 x2 dx. Considérer
pour cela une subdivision de l’intervalle [0, 2] en 2 sous intervalles de même amplitude.
Pn−1 h
4. Soient h = b−a
n
et xi = a + ih. Sachant que T (h) = i=0 2
(f (xi ) + f (xi+1 )), vérifier que
n−1
h T (h) h X h
T( ) = + f (a + kh + ).
2 2 2 k=0 2
(a) Vrai. Il existe une infinité de polynômes de degré supérieur strictement à n interpo-
lant les points (xi , f (xi ))i=0,.,.n . En particulier, par deux points passe une infinité de
courbes, mais une seule est une droite.
(b) Faux. Le polynôme de Lagrange de sin(x) sur les points 0, π2 et π n’est pas égal à
P (x) = x3 + 3x2 . Ici, P est un polynôme de degré supérieur au nombre de points +
1 et P (xi ) 6= sin(xi ).
Intégration.
R2
3. Une approximation T (h) de 0 x2 dx par la méthode des trapèzes avec une subdivision
de l’intervalle [0, 2] en 2 sous intervalles de même amplitude est égale à T (1) = 3.
4. Soient h2 = b−a2n
et xi = a + i h2 pour i = 0, . . . , 2n. Il suffit de regrouper les indices i dans
T ( h2 ) en deux groupes : le premier constitué d’indices pairs (donnant T (h) 2
) et le second
h
Pn−1 h
groupe d’indices impairs (donnant 2 k=0 f (a + kh + 2 )). Ainsi, nous obtenons que
n−1
h T (h) h X h
T( ) = + f (a + kh + ). (C.3.1)
2 2 2 k=0 2
1
Figure C.1 – Intégration pour h = 1 Figure C.2 – Intégration pour h = 2
7. La fonction f (x) = x3 − 1 vérifie les conditions du théorème sur l’intervalle [0.5, 1.5].
Elle est strictement monotone et elle change de signe. Elle admet donc une unique racine
obtenue, par la méthode de Newton, de la manière suivante : x∗ à 10−1 près. Partant
de x0 = 1.5, nous obtenons x1 = 1.1481, x2 = 1.0182 et x3 = 1.0003. La courbe rouge
représente f 0 et la courbe bleue représente f ”.