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