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