Vous êtes sur la page 1sur 9

Plan du cours

Problemes et precision 3
Problemes numeriques 3
Precision numerique 4
Vitesse de convergence 6
Methodes numeriques et langage C
Calcul numerique de fonctions et resolution dequations Programmation de series 7
Series numeriques 8
Recurrence 10
R. Flamary
Resolution dequations 14
Dichotomie 15
Methode de Newton 18
7 decembre 2015 Point fixe 22

Calcul de fonctions usuelles 24


Racine carree 25
Fonctions trigonometriques 29
Fonction exponentielle 32

2 / 33

Calcul numerique de fonctions et resolution dequations Precision numerique


Algorithme iteratif
Problemes
I Principe :
I Calculer y tel que
I Initialisation approximative de la solution.
y = f (x)
I Dans une boucle : mise a jour de la solution (amelioration de la precision)
I Trouver x tel que I De nombreux calculs numeriques du cours sont sous cette forme.
f (x) = 0
I La question de la precision numerique determine le nombre diterations.
I En utilisant uniquement des operations standards fournies par un processeur.
I Il existe plusieurs approches pour la condition darret des iterations.
I Les deux problemes sont lies mais different dans leur objectif.

Nombre n diterations max. Precision minimale 


Objectifs du cours
I On arrete apres n iterations. I On arrete lorsque la variation de
I Programmation (efficace) des series entieres.
I Typiquement boucle for la solution entre deux iterations
I Methodes classiques de resolution dequation (Dichotomie, Newton). est inferieure ou egale a .
I Complexite du calcul facile a
I Exemples de calcul de fonctions usuelles. I Difficulte devaluer le nombre
estimer T () = nT (iteration).
I
diterations necessaires.
Representation des fonctions en series entieres. I Precision finale du calcul plus
I Meilleur controle de la precision
difficile a evaluer (en general).
du resultat.
3 / 33 4 / 33
Exemple de precision numerique Vitesse de convergence
Soit la serie suivante permettant de calculer la constante de Neper :
I Soit la suite (xk ) qui converge vers la valeur x .

X n
X
1 1
e= et lapproximation en = I On dit que la suite est convergente dordre q vers x si il existe ]0, 1[ tel que
k! k!
k=0 k=0
|xk+1 x |
lim =
k |xk x |q
Prcision en fonction des itrations
100 I est la vitesse de convergence qui majore la deviation a la limite entre 2
10-2 iterations.
Calcul de la serie 10-4 I Les ordres q les plus communs sont :
I Flottant 64 bits. 10-6
I
10-8 q = 1, convergence lineaire.
I e en erreur de la solution. 10-10 I q > 1, super-lineaire.
I 1
n!
mise a jour de la solution. 10-12 I q = 2, convergence quadratique.
I
10-14 I La convergence quadratique implique un doublement du nombre de chiffres precis
|en en1 | variation de la |een |
10-16 a chaque iteration.
solution. 10-18
1
n!
I La vitesse de convergence des methodes iteratives permet de predire un ordre de
10-20 |en en1|
10-22 0 5 10 15 20 25
grandeur des nombres diterations necessaires pour obtenir une precision donnee.
n

5 / 33 6 / 33

Fonction analytique et serie entiere Programmation de serie numerique

n
X
Toute fonction analytique peut etre exprimee sous la forme dune serie entiere : Sn = uk
k=0

X Principe general
f (x) = ak (x x0 )k
k=0 I Boucle for.
I Initialisation de laccumulateur a 0 ou a u0 .
ou les ak sont des reels et la serie converge vers f (x) dans un voisinage de x0
I I Ajout de ui pour chaque valeur de i.
Les fonctions analytiques sont continues et infiniment differentiables.
(k) I Programmation dune fonction u(i) ?
I La serie entiere est une serie de Taylor avec ak = f (x0 )
n!
Implementation type Discussion
Applications 1 float sum_u_i(int n)
I On suppose que la fonction
2 {
I Calcul numerique de fonctions complexes (exponentielle,trigos,...). 3 float res=0; float u(int i) est definie.
I Approximations physiques. 4 for (int k=0;k<=n;k++) I Efficacite depend de uk
5 res=res+u(k);
6 return res; I T (sum u i)=
7 } I S(sum u i)=

7 / 33 8 / 33
Calcul de tous les elements de la serie Fonction recursive (rappel)
n I Une fonction recursive est une fonction qui sappelle elle meme.
X
Sn = uk I Pour le calcul de series, les fonctions recursives ont souvent une complexite
k=0
spatiale S(n) ou S(log(n)) (a cause de la pile).
Principe
I Il est necessaire de sassurer que la fonction se termine quelle que soit la valeur
I Pour des raisons de complexite numerique, il est parfois necessaire de calculer donnee en entree (theoreme de terminaison).
tous les elements de la serie Sk jusqua Sn .
Code source Sortie
I Utilise toujours une boucle for. 1 int factorielle(int i) 1 $./ex_factoriel
I La fonction retourne un pointeur vers les valeurs de la serie. 2 { 2 i=0, i!=1
3 if (i<=0) 3 i=1, i!=1
I Necessite une allocation memoire (malloc), liberer la memoire avec free. 4 return 1; 4 i=2, i!=2
5 else 5 i=3, i!=6
Implementation type Discussion 6 return i*factorielle(i-1); 6 i=4, i!=24
1 float* sum_u_i(int n)
I On suppose que la fonction 7 } 7 i=5, i!=120
2 { 8 8 i=6, i!=720
3 float *res=malloc((n+1)* float u(int i) est definie.
9 int main() 9 i=7, i!=5040
sizeof(float)); I Efficacite depend de uk 10 { 10 i=8, i!=40320
4 res[0]=u(0); 11 for (int i=0;i<=8;i++)
5 for (int k=1;k<=n;k++) I T (sum u i)= 12 printf("i=%d, i!=%d\n",i,
6 res[k]=res[k-1]+u(k); I factorielle(i));
S(sum u i)=
7 return res; 13 return 0;
8 } 14 }

9 / 33 10 / 33

Recurrence pour le calcul de series (1) Recurrence pour le calcul de series (2)
I Une recurrence dans la suite est une fonction simple permettant de calculer uk+1 Fonction a calculer :
n
X
a partir de uk : f unc(x, n) = xi
uk+1 = r(uk , k) i=1

I Trouver une recurrence dans une serie numerique permet souvent de la calculer I La recurrence est evidente :
avec une complexite moindre. xi = xi1 x
I Si T (u) > T (r) il faut utiliser la relation de recurrence. I On calculera donc dans la boucle le terme xi qui sera mis a jour a chaque
I Exemple dun codage non efficace de la fonction suivante (Ex. 5 Cours 1) : iteration.
n
X
f unc(x, n) = xi Code Complexite
i=1
1 float func(float x,int n) I Nb operations :
2 {
3 float f=0,xi=x;
Code Complexite
4 for (int i=1;i<=n;i++) I Complexite T () :
1 float func(float x,int n) I Nb operations : 5 {
2 { I Complexite S() :
6 f=f+xi;
3 float f=0;
7 xi=xi*x;
4 for (int i=1;i<=n;i++)
I Complexite T () : 8 }
5 f=f+puissance(x,i);
9 return f;
6 return f; I Complexite S() : 10 }
7 }

11 / 33 12 / 33
Exercice 1 Resolution dequations unidimensionnelles
Soit la serie de Taylor de la fonction exponentielle :
Objectif

X xk Trouver un reel x [a, b] satisfaisant la condition :
exp(x) =
k!
k=0
f (x) = 0
Coder une implementation efficace utilisant la recurrence permettant de calculer la
serie jusqua lordre n.
Quelle est sa complexite ? Quelle serait la complexite si on utilisait les fonctions I f (x) est une fonction continue sur lintervalle [a, b].
puissance et factorielle toutes deux de complexite T () = O(n). I On suppose egalement que f (a)f (b) < 0.
Solution Complexite I Le passage de la fonction en 0 est assure par le theoreme des valeurs
I Nb operations : intermediaires.

Methodes de resolution
I Complexite T () :
I Dichotomie.
I Complexite S() :
I Methode de la fausse position.
Si 2 fonctions O(n) dans la boucle :
I Methode de Newton.
I Complexite T () :
I Methode du point fixe.
I Complexite S() :

13 / 33 14 / 33

Dichotomie Exercice 2 : Dichotomie en C

Code Exercice
1 double dichotom(double a,double b,
Diviser pour mieux regner I Completer la fonction a gauche.
double eps)
I Mise a jour de lintervalle [a, b] assurant une 2 { I On suppose que la fonction
3 double c=(a+b)/2;
contraction. double f(double x) est definie.
4 double fa=f(a),fc=f(c);
I Calculer f (c) avec c = a+b
. 5 I Possibilite dutiliser les fonctions de
2
I
6 <math.h>
Si f (a)f (c) > 0 alors a c, sinon b c 7
I Convergence atteinte lorsque
I c est la solution de lequation. 8
9 |b a| < .
10
I Minimiser le nombre doperations
11
Proprietes sachant que lappel a f (x) est
12
0 potentiellement couteux.
I Precision numerique n = bn an simple a calculer : n = (conv. lineaire).
13

2n 14 return c;
I Nombre diterations jusqua convergence : n = log2 0
. 15 }

I On prend souvent  = a+b
ou est la precision machine ( = 1016 en 64 bits).
2
I Dans tous les cas n est majore par le nombre de bits de la mantisse.

15 / 33 16 / 33
Methode de la fausse position Methode de Newton
Variante de la dichotomie Principe

I On trace une droite entre les points I Methode iterative (pas dintervalle). 6 Mthode de Newton 6 Mtho
(a, f (a)) et (b, f (b)). I Initialisation x0 . 5 f(x) 5 f(x)
I c est labscisse du point dordonnee nulle 4
Tangente en x0 4
Tangen
I La derivee de la fonction en f (xk ) donne
de cette droite : une approximation lineaire : 3 3
f (a) f (b) 2 2
(c b) + f (b) = 0 f(x) = f (xk ) + (x xk )f 0 (xk ) 1 1
ab
I
0 0
Ce qui nous donne : La nouvelle valeur est obtenue en x0 x1
annulant lapproximation : 1 1
ab
c=a f (a) 2 2
f (a) f (b) 1.0 1.5 2.0 2.5 3.0 3.5 1.0 1.5 2
f (xk ) x
xk+1 = xk
f 0 (xk )
I Si f (a)f (c) > 0 alors a c, sinon b c
Proprietes
Proprietes I Convergence quadratique a proximite dune solution.
I Convergence superlineaire (plus rapide que la dichotomie). I Iterations peu precises loin dune solution.
I Une variation sappelant la methode de la secante ne necessite pas que I Peut diverger si f a une derivee nulle.
f (a)f (b) < 0. I Methode de la fausse position est une Newton approchee (gradient approche).
17 / 33 18 / 33

Convergence de la methode de Newton Fractale de Newton


La convergence de la methode de Newton vers une solution de lequation est assuree si Soit lequation complexe suivante :
la fonction f (x) verifie les conditions suivantes :
f (z) = z p 1 = 0
1. f est de classe C 2 sur [a, c] (continue et derivable deux fois).
2. f (a)f (b) < 0. ( x, f (x) = 0 avec la continuite). La methode de Newton converge vers les solutions du probleme de la forme
z = ek2i/p . Si on determine le point de convergence pour chaque pixel dinitialisation
3. x [a, b] f 0 (x) 6= 0. on obtient une fractale de Newton :
00
4. f (x) est de signe constant sur [a, b] (une seule solution dans lintervalle).
Pour p = 3 Pour p = 5
5. |f (a)|/|f 0 (a)| < b a et |f (b)|/|f 0 (b)| < b a (on reste dans lintervalle [a, b]).

Exercice 3 :
Verifier la convergence sur [1, A] pour f (x) = x2 A = 0 avec A > 1

Source: [3, Chap 4]


19 / 33 20 / 33
Exercice 4 : Methode de Newton Methode du point fixe

Code Exercice Principe


1 double newton(double x0,double eps)
I Completer la fonction a gauche. I Si on peut reecrire f (x) = 0 sous la forme
2 {
3 double x; I On suppose que la fonction
4
g(x) = x
double f(double x) ainsi que sa
5
6
derivee double df(double x) sont Lequation ci dessus est une equation du point fixe associee a f (x) = 0.
definies. I
7
Algorithme
8 I Possibilite dutiliser les fonctions de
9 1. On initialise x0 R
<math.h>
10 2. Pour chaque iteration k :
11 I Convergence atteinte lorsque xk+1 g(xk )
12
|xk xk1 | < .
13 Proprietes Exercice 5
14
I Minimiser le nombre doperations
Soit lequation de Ferrari
15 sachant que lappel a f (x) et f 0 (x) I Cet algorithme converge vers la f (x) = x4 + 6x2 60x + 36. Donner 2
16 return x; est potentiellement couteux. solution de lequation f (x) = 0 sous
17 } fonctions g(x) point fixe de cette
certaines conditions. equation.
I Il peut exister plusieurs fonctions g
pour une equation donnee.

21 / 33 22 / 33

Convergence de la methode du point fixe Calcul de fonctions usuelles


Probleme
I Calculer les valeurs de fonctions mathematiques usuelles.
Theoreme du point fixe de Banach
I Utiliser uniquement des operations disponibles sur le processeur (somme,
Soit E un espace metrique complet et g : E E une application contractante
(k-lipschitzienne pour k < 1). multiplication).
I I Questions :
g possede un unique point fixe x et ce point fixe est attractif.
I Implementation en virgule flottante.
I Toute suite de E verifiant la recurrence xk+1 = g(xk ) converge vers x
I Serie de Taylor, methode de Newton ?
Resultat majeur pour prouver la convergence de suites I Precision dune implementation physique ?
Application lipschitzienne
Soient E une partie de R,f : E R une application et k un reel positif, on dit que f Fonctions etudiees Discussion
est k-lipschitzienne si I I
Racine carree et racine carree Calculs approches implementes en
2
(x, y) E , |f (x) f (y)| k |x y|. inverse. materiel.
I Fonctions trigonometriques. I Extensions INTEL recentes
Si k [0, 1[ on dit que f est contractante. (SSE,MMX,AVX,SMVL).
I Exponentielle.
I Calcul sur des sequences en
memoire (tres efficaces).

23 / 33 24 / 33
Racine carree Racine carree (2)
Soit la fonction racine carree

sqrt(x) = x Initialisation
I Vitesse de convergences des methodes iterative dependent de linitialisation.
I Probleme equivalent a resoudre I Pour un flottant en base binaire de la forme m.22n on initialise par :
lequation :
x0 = 2n
f (x) = x2 S

I Si on applique la methode de Newton Autres variantes et generalisation


on trouve literation :
I Methodes de calculs decimale par decimale (Batons de Neper, Algorithme de la
potence). Plus lente que la methode de Heron mais ne necessite pas dinversion.
f (xn )
xk+1 = xn = I Approximation de Bakhshali. Equivalente a 2 iteration de la methode de Newton.
f 0 (xn )
I Methode de Newton pour la racine nieme :
I
 
Methode exposee par Heron dAlexandrie dans son ouvrage Metrica. 1 A
xk+1 = (n 1)xk + n1
I Certains calculs egyptiens suggerent que le methode est encore plus ancienne. n xk
I Interpretation geometrique simple (moyenne des cotes dun rectangle).
I Vitesse de convergence quadratique (Newton).
25 / 33 26 / 33

Racine carree inverse Racine carree inverse rapide


1
isqrt(x) = Principe Code
x float Q_rsqrt( float number )
Soit x un flottant IEEE 754. 1
2 {
Methode de Newton I Calcul sur les flottants peut etre plus 3 long i;
I Equation : couteux que sur des entiers. 4 float x2, y;
5 const float threehalfs = 1.5F;
I Approximation de log2 (S) en traitant 6
f (x) = le flottant comme un entier : 7 x2 = number * 0.5F;
1 8 y = number;
I Iterations : IS Llog2 (S)+C, log2(S) (IS +C) 9 i = * ( long * ) &y; // evil
L floating point bit level
xk+1 = hacking
I log2(x) = 1/2log2 (S) on trouve 10 i = 0x5f3759df - ( i >> 1 ); //
donc : what the fuck?
Cas dutilisation 11 y = * ( float * ) &i;
Ix 12 y = y * ( threehalfs - ( x2 * y * y
I Illumination dans les scenes 3D en infographie. ) ); // 1st iteration
I Dans le code 32 C = 0x5f3759df 13 // y = y * ( threehalfs - ( x2 * y *
Calcul rapide de vecteur normal :
y ) ); // 2nd iteration, this
v I La derniere etape est une iteration de can be removed
v = p Newton (et une seconde commentee). 14
kvk
15 return y;
I Tire du code source de Quake 3. 16 }

27 / 33 28 / 33
Fonction sinus Exercice 6 : Fonction Sinus
X
(1)n 2n+1
sin(x) = x
X
(1)n 2n+1 n=0
(2n + 1)!
sin(x) = x
n=0
(2n + 1)!
Code Exercice
Implementation dans la Glibc (Bibliotheque C standard) 1 double sinslow(double x)
I Completer la fonction a gauche.
2 {
I Methodes de reduction de lintervalle : sin(x + k2) = sin(x). 3 double res=x,temp=x; I Utiliser la serie de Taylor pour calculer
4
I Utilisation de la fonction fsin des processeurs intel en 32 et 64 bits. la valeur du sinus.
5

I 6 I Convergence atteinte lorsque


Sinon implementation detaillee dans sysdeps/ieee754/dbl-64/s sin.c
7 |xk xk1 |
< 1e 16.
8
|xk |
Algorithme simplifie dans fdlibm 9
10

I Methodes de reduction de lintervalle sur [ 4 , 4 ]. 11


Discussion
12 return res;
I Fonction sinus impaire donc calcul uniquement pour x > 0. I
13 } Problemes ?
I Si |x| < 227 alors on retourne x.
I Sinon on utilise une approximation polynomiale de degre 13.

29 / 33 30 / 33

Exercice 7 : Fonction Sinus Fonction exponentielle


Code Exercice
1 double sinfast(double x)
I Completer la fonction a gauche. X
xn
2 {
exp(x) =
3 I Coder la methode de reduction de n!
n=0
4
lintervalle sur [, ].
5
I Implementation dans fdlibm
6 Appeler la fonction sinslow lorsque
7 vous avez reduit lintervalle. I Reduction de lintervalle, on cherche lentier k tel que
8
9
ln(2)
10 x = k ln(2) + r, |r| <=
11 } 2
I Calcul precis de exp(r) avec approximation polyomiale.
I exp(x) = 2k exp(r)
I Approximation polynomiale de Renez tres precise autour de 0 (bornee par 259 ).
I Cas particuliers :
I pour x > 7.09782712893383973096e + 02
I 0 pour x < 7.45133219101941108420e + 02

31 / 33 32 / 33
Ressources bibliographiques I

[1] Freely distributable libm (fdlibm), http://www.netlib.org/fdlibm/, version du


2015-09-28.
[2] The gnu c library, http://www.gnu.org/software/libc/, version du 2015-09-28.

[3] J. Bastien and J.-N. Martin, Introduction a lanalyse numerique : applications sous
Matlab : cours et exercices corriges. Dunod, 2003.

[4] R. P. Brent and P. Zimmermann, Modern computer arithmetic. Cambridge


University Press, 2010, vol. 18.

[5] D. Goldberg, What every computer scientist should know about floating-point
arithmetic, ACM Computing Surveys (CSUR), vol. 23, no. 1, pp. 548, 1991.

[6] D. Henderson, Elementary functions : Algorithms and implementation,


Mathematics and Computer Education, vol. 34, no. 1, p. 94, 2000.

[7] W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery, Numerical


recipies in C. Cambridge university press Cambridge, UK, 1992.

33 / 33

Vous aimerez peut-être aussi