TD: Intégrale multiple

Transcription

TD: Intégrale multiple
TD: Intégrale multiple
1 Position du problème
Si l’on veut calculer certaines propriétés de l’atome de magnesium (12 électrons), on est amené à intégrer des
fonctions par rapport aux 3 coordonnées de chaque électron. On doit donc réaliser des intégrales à 3 × 12 = 36
dimensions. Si l’on utilise 64 points pour calculer numériquement chaque intégrale, il faudra réaliser 6436 ' 1065
évaluations de la fonction à intégrer. Même avec un ordinateur rapide (106 opérations.s−1 ), il faudrait 1059 s
pour faire cette intégrale (c’est-à-dire beaucoup plus que l’age de l’Univers ' 1017 s).
Une méthode plus rapide (et plus précise !) consiste
R x au sort N valeurs de la fonction f à intégrer
R x à tirer
pour calculer sa valeur moyenne hf i et à calculer: I = x11max x22max . . . f (x1 , x2 , . . .).dx1 .dx2 . . . sous la forme
min
min
approchée: Iapprox = (x1max − x1min ).(x2max − x2min ). . . . .hf i.
Appliquer cette méthode
R 1 pour
R 1 calculerR 1l’intégrale à 10 dimensions suivante:
I = x1 =0 x2 =0 . . . . x10 =0 (x1 + x2 + . . . + x10 )2 .dx1 .dx2 . . . . .dx10
Pour cela:
1. tirer au sort les valeurs de x1 à x10 (dans l’intervalle d’intégration),
2. calculer f (x1 , x2 , . . . , x10 ) et en déduire Iapprox ,
3. réiterer N fois (N = 2, 4, 8, . . . , 8192) les étapes 1 et 2
calculer hIapproxN i: la moyenne des N évaluations de Iapprox .
4. tracer hIapproxN i = f (N ) et montrer que la précision du calcul est proportionnelle à
|I − hIapproxN i| = f ( √1N ).
√1
N
en traçant
2 Code avec Mathematica
Intégration à 10 variables
Expression analytique
In[1]:= Integrate[(a+b+c+d+e+f+g+h+i+j)^2,
{a,0,1},{b,0,1},{c,0,1},{d,0,1},{e,0,1}, {f,0,1},{g,0,1},{h,0,1},{i,0,1},{j,0,1}]
Out[1]= 155 / 6
Méthode de Monte-Carlo
In[2]:= SeedRandom[];Somme=0;res={};erreur={};
For[i=1,i<=16384,i++; x=0; For[j=1,j<=10,j++;x+=Random[];]; Somme+=x^2;
res=Prepend[res,{i,Somme/i}]; erreur=Prepend[erreur,{1/Sqrt[i],Abs[Somme/i-155/6]}];];
ListPlot[res,PlotRange->All]
Out[4]= -Graphics-
1
ISEN-Brest. Kany.
TD: Intégrale multiple
In[5]:= ListPlot[erreur,PlotRange->{{0,0.2},{0,2}}]
Out[5]= -Graphics-
3 Code avec Python
# -*- coding: utf-8 -*import math
import sympy
import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
from numpy import linalg
28
27
26
25
24
23
22
simulation
valeur exacte
2000
4000
6000 8000 10000 12000 14000 16000
nombre de tirages
2
ISEN-Brest. Kany.
TD: Intégrale multiple
2.0
1.5
1.0
0.5
0.0
0.00
0.05
0.10
N^(-1/2)
0.15
0.20
3

Documents pareils