Méthodes numériques et langage C Intégration numérique
Transcription
Méthodes numériques et langage C Intégration numérique
Intégration numérique y I= Méthodes numériques et langage C Z f(x) b a f (x)dx = F (b) − F (a) S Intégration numérique a b x Objectif R. Flamary 7 décembre 2015 I Calcul numérique de la surface s à partir d’un nombre fini d’appels à la fonction. I Cas particulier lorsque l’on a accès à un échantillonnage régulier. I On appelle une formule de quadrature une expression linéaire fournissant une intégration approchée sur un intervalle. Raisons I f n’est connue qu’en certains points. I Primitive F connue mais pas une fonction élémentaire. (intégrale de exp(x2 )). I Primitive trop difficile à calculer numériquement. 2 / 16 Définitions Intégration par quadrature simple I= Z b I= f (x)dx a Z b a et b deux réels avec a < b. I On suppose f intégrable sur [a, b]. I f ne dispose pas de singularités sur [a, b]. avec h = (b − a) Formule du rectangle Hypothèses I f (x)dx a I = hf (a) (ou hf (b)) + O h2 0 f (µ) 2 µ ∈ [a, b] Méthode d’ordre 0, exacte pour les fonctions constantes. a b a b Formule du point milieu Mise en oeuvre Approche classique : I = hf a+b 2 +O h3 00 f (µ) 24 µ ∈ [a, b] I Décomposition du domaine en morceaux (un intervalle en sous-intervalles contigus). Méthode d’ordre 1, exacte pour des fonctions linéaires. I Intégration approchée de la fonction sur chaque morceau. Formule du trapèze I Sommation des résultats numériques ainsi obtenus. I=h Utilisation de polynômes pour approcher la fonction sur chaque morceau. f (a) + f (b) +O 2 h3 00 f (µ) 12 µ ∈ [a, b] Méthode d’ordre 1, exacte pour des fonctions linéaires. 3 / 16 f a b 4 / 16 Intégration par quadrature simple (2) Formules de Newton-Cotes Formule de Simpson I Popularisée pas Simpson mais utilisée par Kepler 100 ans plus tôt. I Interpolation de f par un polynôme d’ordre 2. I On calcule la valeur de la fonction en a, b et m = I Interpolation polynomiale de Lagrange : P (x) = f (a) I I I Intégration numérique sur [a, b] sur n + 1 points régulièrement échantillonnés. I Soit xi = a + i∆ avec ∆ = I La formule de degré n est définie par (b−a) n Z I= a+b . 2 = h n b f (x) dx ≈ a ∀i. et fi = f (xi ), n X wi f (xi ) i=0 où les wi sont appelés coefficients de quadrature. I (x − m)(x − b) (x − a)(x − b) (x − a)(x − m) +f (m) +f (b) . (a − m)(a − b) (m − a)(m − b) (b − a)(b − m) f (x) ≈ L(x) = Intégrale approchée obtenue en intégrant le polynome : + f (b) f (a) + 4f a+b h5 (4) 2 +O f (µ) I=h 6 90 ∗ 25 Méthode d’ordre 2, exacte pour des fonctions quadratiques et cubiques. On déduit les poids wi d’une interpolation de Lagrange de la fonction : I a f (xi )li (x), avec li (x) = i=0 n Y j=0,j6=i x − xj xi − xj L’intégrale devient donc I≈ f n X Z b L(x) dx = a Z b a n X f (xi ) li (x) dx = i=0 n X f (xi ) i=0 b Z |a b li (x) dx . {z } wi 6 / 16 5 / 16 Formule de Newton-Cotes (2) I= Z b a I Quadrature de Gauss I Nom Trapèze Simpson Boole On approche encore une fois l’intégrale par wi f (xi ) I= i=0 Permet de retrouver les formules de quadrature simple : Degré 1 2 4 I f (x) dx ≈ n X (1) Formule h (f0 + f1 ) 2 h (f + 4f1 + f2 ) 0 6 h (7f + 32f + 12f2 + 32f3 + 7f4 ) 0 1 90 Erreur 3 − h12 f (2) (µ) h5 − 2880 f (4) (µ) h7 − 1935360 f (6) (µ) pour µ ∈ [a, b] et h = (b − a). I Problème d’instabilité numérique pour de grand n (Phénomène de Runge). I En pratique, on préfère découper la fonction en petits intervalles et utiliser des quadratures de degré faible sur ces intervalles. 7 / 16 b a f (x) dx ≈ n X wi f (xi ) i=1 I Les wi sont les coefficients de quadrature et les xi sont choisis comme les racine de polynômes orthogonaux. I On n’utilise pas d’échantillonnage régulier, possibilité d’avoir une meilleure approximation de f . I Intégration exacte pour des polynômes de degré 2n − 1. I Formule définie pour n’importe quel degré n. Z Exemple pour [a, b] = [−1, 1] avec les polynômes de Legendre : Nb de points 1 2 Poids wi 2 1, 1 3 5 8 5 , , 9 9 9 Points xi 0 − √13 , √13 √ − √35 , √ √3 5 Poly. de Legendre x (3x2 − 1)/2 (5x3 − 3x)/2 8 / 16 Méthodes composites Méthodes composites (2) Méthode du point milieu I=h n−1 X f (mk ) f k=0 f h Méthode du trapèze x0 m0 x1 m1 x2 m2 x3 a b n−1 I=h f (a) + f (b) X + f (xk ) 2 k=1 I I Les formules de Newton Cotes ont toutes une erreur sous la forme d’une puissance de (b − a). La longueur de l’intervalle d’intégration devient donc h = I Nous définissons les points d’échantillonnage régulier suivants : xk = a + kh, mk = a + (k + 1/2)h, f Méthode de Simpson En pratique on découpe [a, b] en n sous intervalles et on utilise les formules de Newton-Cotes sur les petits intervalles. I ! h I= 6 b−a . n avec h = ∀k ∈ 0, . . . , n f (a) + f (b) + 2 n−1 X f (xk ) + 4 k=1 n−1 X f (mk ) k=0 ! f b−a . n 10 / 16 9 / 16 Pointeur de fonction en C I Implémentation des méthodes composites en C Comment passer une fonction en paramètre pour l’intégrer ? I On utilise des pointeurs de fonction. I Un pointeur de fonction est déclaré par : Méthode du point milieu 1 2 type_ret (*nomfunc)(params); 3 4 Code source 1 2 3 4 double sum_f_a_b(double (*f)(double) ,double a,double b) { return f(a)+f(b); } 5 Sortie 1 2 3 4 6 $./ex_pfunc sqrt(1)+sqrt(2)=2.414214 cos(0)+cos(1)=1.540302 exp(0)+exp(1)=3.718282 7 8 6 7 8 9 10 11 double int_middle(double (*f)(double ),double a,double b,int n) { double res=0; double h=(b-a)/n; for (int i=0;i<n;i++) res+=f(a+(i+.5)*h); return res*h; } Méthode de Simpson 5 1 int main() { printf("sqrt(1)+sqrt(2)=%f\n", sum_f_a_b(sqrt,1,2)); printf("cos(0)+cos(1)=%f\n", sum_f_a_b(cos,0,1)); printf("exp(0)+exp(1)=%f\n", sum_f_a_b(exp,0,1)); } 2 3 4 5 6 7 8 11 / 16 h h 6 f (a)+f (b) 2 + Pn−1 k=1 f (xk ) f P Pn−1 f (a) + f (b) + 2 n−1 k=1 f (xk ) + 4 k=0 f (mk ) double int_simpson(double (*f)( double),double a,double b,int n) { double h=(b-a)/n; double res=f(a)+f(b)+4*f(a+h/2); for (int i=1;i<n;i++) res+=2*f(a+i*h)+4*f(a+(i+.5)*h); return res*h/6; } f 12 / 16 Méthodes adaptatives Méthode de Simpson adaptative en C Principe Implémentation simplifiée I Échantillonnage fin pas nécessaire sur tout l’intervalle [a, b]. 1 I On adapte l’échantillonnage le long de l’intervalle de manière récursive. 2 I integrate(f,a,b,tau) : R 1. Calcul de I ≈ a , bf (x)dx R 2. Estimation de l’erreur ≈ |I − a , bf (x)dx| 3. Si > τ , I =integrate(f,a,(a+b)/2,tau)+integrate(f,(a+b)/2,b,tau) 4. Retourner I 3 Approches classiques : 8 I I I 4 Discussion double simpson(double (*f)(double), double a,double b) { return (b-a)/6*(f(a)+4*f((a+b)/2)+f (b)); } 5 6 7 9 Méthode de Romberg (Trapèze+ extrapolation de Richardson). Méthode de Simpson adaptative (Simpson+ extrapolation de Richardson). 10 Méthode de Simpson adaptative Sur l’intervalle [a, b] avec m = a+b , la méthode de Simpson s’appelle avec S(a, b). 2 11 12 1. Calculer S(a, b), S(a, m) et S(m, b). 13 2. Si l’erreur |S(a, b) − S(a, m) − S(m, b)|/15 > τ on divise l’intervalle [a, b]. 14 3. Sinon, on retourne S(a, m) + S(m, b) + (S(a, m) + S(m, b) − S(a, b))/15. double int_adaptsimpson(double (*f)( double),double a,double b,double tau) { double m=(a+b)/2; double Sab=simpson(f,a,b),Sam= simpson(f,a,m),Smb=simpson(f,m ,b); if (fabs(Sab-Sam-Smb)/15<tau) return Sam+Smb+(Sam+Smb-Sab)/15; else return int_adaptsimpson(f,a,m,tau )+int_adaptsimpson(f,m,b,tau ); } I Fonction récursive (complexité dépend de f et τ ). I Paramètre de précision τ directement lié à l’erreur acceptable. I Implémentation non efficace, comment faire mieux ? 14 / 16 13 / 16 Méthodes de Monte Carlo I= Z b a f (x)dx ≈ Comparaison numérique n b−a X f (xi ), n i=1 xi ∼ U (a, b) I= ∀i I Intégration numérique utilisant des réalisations de variables aléatoires. I I La méthode converge vers la bonne valeur lorsque n → ∞ L’erreur en espérance = O √1n décroı̂t très lentement. Très utilisée pour les intégrales multiples car erreur indépendante de la dimension. 10-4 I Version plus efficaces basées sur l’échantillonnage préférentiel (VEGAS, MISER). 10-6 Implémentation 1 2 3 4 5 6 7 double int_montecarlo(double (*f )(double),double a,double b, int n) { double res=0; for (int i=0;i<n;i++) res+=f(a+rand()*1.0/RAND_MAX* (b-a)); return res/n; } 1 4 0 p 1 − x2 dx = π Vitesse de convergence 100 10-2 Erreur I Z Discussion I n nombre de réalisations. Rectangle Pt. Milieu Simpson Gauss (deg 3) Gauss (deg n) Monte Carlo Trapèze Adapt. Simpson Adapt. Gauss 10-8 10-10 I rand()/RAND_MAX réalisation d’une variable aléatoire uniforme sur [0, 1]. 10-12 10-14 I a+rand()*1.0/RAND_MAX*(b-a) réalisation d’une variable aléatoire uniforme sur [a, b]. 15 / 16 10-16 0 10 101 104 102 103 Nb d'appel de la fonction f 105 106 16 / 16