From 7f7f852f3957f40220d599f259efa60cba9e0225 Mon Sep 17 00:00:00 2001 From: 2436ecc7fc5a95213b924aaa1c93ae41 <2436ecc7fc5a95213b924aaa1c93ae41@app-learninglab.inria.fr> Date: Sun, 12 Jun 2022 09:17:25 +0000 Subject: [PATCH] Add new file --- module2/exo1/module2/exo1/toy_document_en.Rmd | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 module2/exo1/module2/exo1/toy_document_en.Rmd diff --git a/module2/exo1/module2/exo1/toy_document_en.Rmd b/module2/exo1/module2/exo1/toy_document_en.Rmd new file mode 100644 index 0000000..f8ac4f3 --- /dev/null +++ b/module2/exo1/module2/exo1/toy_document_en.Rmd @@ -0,0 +1,42 @@ +1 On the computation of π +1.1 Asking the maths library +My computer tells me that π is approximatively +In [1]: from math import * +print(pi) +3.141592653589793 +1.2 Buffon’s needle +Applying the method of Buffon’s needle, we get the approximation +In [2]: import numpy as np +np.random.seed(seed=42) +N = 10000 +x = np.random.uniform(size=N, low=0, high=1) +theta = np.random.uniform(size=N, low=0, high=pi/2) +2/(sum((x+np.sin(theta))>1)/N) +Out[2]: 3.1289111389236548 + +1.3 Using a surface fraction argument +A method that is easier to understand and does not make use of the sin function is based on the +fact that if X ∼ U(0, 1) and Y ∼ U(0, 1), then P[X +2 + Y +2 ≤ 1] = π/4 (see "Monte Carlo method" +on Wikipedia). The following code uses this approach: +In [3]: %matplotlib inline +import matplotlib.pyplot as plt +np.random.seed(seed=42) +N = 1000 +x = np.random.uniform(size=N, low=0, high=1) +y = np.random.uniform(size=N, low=0, high=1) +accept = (x*x+y*y) <= 1 +reject = np.logical_not(accept) +fig, ax = plt.subplots(1) +ax.scatter(x[accept], y[accept], c='b', alpha=0.2, edgecolor=None) +ax.scatter(x[reject], y[reject], c='r', alpha=0.2, edgecolor=None) +ax.set_aspect('equal') + +It is then straightforward to obtain a (not really good) approximation to π by counting how +many times, on average, X +2 + Y +2 +is smaller than 1: +In [4]: 4*np.mean(accept) +Out[4]: 3.1120000000000001 \ No newline at end of file -- 2.18.1