Académique Documents
Professionnel Documents
Culture Documents
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
2 / 33
5 / 33 6 / 33
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
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
Exercice 3 :
Verifier la convergence sur [1, A] pour f (x) = x2 A = 0 avec A > 1
21 / 33 22 / 33
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
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
29 / 33 30 / 33
31 / 33 32 / 33
Ressources bibliographiques I
[3] J. Bastien and J.-N. Martin, Introduction a lanalyse numerique : applications sous
Matlab : cours et exercices corriges. Dunod, 2003.
[5] D. Goldberg, What every computer scientist should know about floating-point
arithmetic, ACM Computing Surveys (CSUR), vol. 23, no. 1, pp. 548, 1991.
33 / 33