diff --git a/module2/exo1/toy_document_fr2.Rmd b/module2/exo1/toy_document_fr2.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..046cca77bdceac19b17e8390f7ac529c73df4187 --- /dev/null +++ b/module2/exo1/toy_document_fr2.Rmd @@ -0,0 +1,50 @@ +# **1 À propos du calcul de π** +## **1.1 En demandant à la lib maths** +Mon ordinateur m’indique que π vaut _approximativement_ + +\textcolor{blue}{ln[1]}: \textcolor{green}{from} \textcolor{blue}{math} \textcolor{green}{import *} + \textcolor{green}{print} (pi) + +3.141592653589793 + +## **1.2 En utilisant la **méthode** des aiguilles de Buffon** + +Mais calculé avec la **méthode** des ...[\textcolor{blue}{aiguilles de Buffon}](https://fr.wikipedia.org/wiki/Aiguille_de_Buffon)..., on obtiendrait comme **approximation** : + +\textcolor{blue}{In [2]}: \textcolor{green}{import} \textcolor{blue}{numpy} \textcolor{green}{as} \textcolor{blue}{np} + np.random.seed(seed\textcolor{grey}{=42}) + N = \textcolor{grey}{10000} + x\textcolor{grey}{=} np.random.uniform(size\textcolor{grey}{=}N, low\textcolor{grey}{=0}, high\textcolor{grey}{=1}) + theta \textcolor{grey}{=} np.random.uniform(size\textcolor{grey}{=}N, low\textcolor{grey}{=0}, high\textcolor{grey}{=0}pi\textcolor{grey}{/2}) + \textcolor{grey}{2/}(\textcolor{green}{sum}((x\textcolor{grey}{+}np\textcolor{grey}{.}sin(theta))\textcolor{grey}{>1})\textcolor{grey}{/}N) + + \textcolor{red}{Out[2]:} 3.1289111389236548 + +##**1.3 Avec un argument "fréquentiel" de surface** + +Sinon, une méthode plus simple à comprendre et ne faisant pas intervenir d’appel à la fonction +sinus se base sur le fait que si X ∼ U(0, 1) et Y ∼ U(0, 1) alors P[X2 + Y2 ≤ 1] = π/4 (voir +... [\textcolor{blue}{méthode de Monte Carlo sur Wikipedia}](https://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte-Carlo#D%C3%A9termination_de_la_valeur_de_%CF%80) .... Le code suivant illustre ce fait : + +\textcolor{blue}{ln [3]}\textcolor{grey}{:}\textcolor{green}{%matplotlib} inline + \textcolor{green}{impor} \textcolor{blue}{matplotlib.pyplot} \textcolor{green}{as} \textcolor{blue}{plt} + + np.random.seed(seed\textcolor{grey}{=42}) + N \textcolor{grey}{= 1000} + x \textcolor{grey}{=} np.random.uniform(size\textcolor{grey}{=}N, low\textcolor{grey}{=0}, high\textcolor{grey}{=1}) + y \textcolor{grey}{=} np.random.uniform(size\textcolor{grey}{=}N, low\textcolor{grey}{=0}, high\textcolor{grey}{=1}) + accept \textcolor{grey}{=} (x\textcolor{grey}{*}x\textcolor{grey}{+}y\textcolor{grey}{*}y) \textcolor{grey}{<= 1} + reject \textcolor{grey}{=} np.logical_not(accept) + + fig, ax \textcolor{grey}{=} plt.subplots(\textcolor{grey}{1}) + ax.scatter(x[accept], y[accept], c\textcolor{grey}{=}'b', alpha\textcolor{grey}{=0.2}, edgecolor\textcolor{grey}{=}\textcolor{green}{None=}) + ax.scatter(x[reject], y[reject], c\textcolor{grey}{=}'r', alpha\textcolor{grey}{=0.2}, edgecolor\textcolor{grey}{=}\textcolor{green}{None=}) + ax.set_aspect(\textcolor{red}{'equal'}) + + + Il est alors aisé d’obtenir une approximation (pas terrible) de π en comptant combien de fois, +en moyenne, X2 + Y2 est inférieur à 1 : + +\textcolor{blue}{ln [4]:} \textcolor{grey}{4*}np.mean(accept) + +\textcolor{red}{Out[4]:} 3.1120000000000001