From 1827a72a4825d6ce79f3e7d88cc4d3f461858bcd Mon Sep 17 00:00:00 2001 From: abd0a8b1ee7edf344d88ad77d0d7196d Date: Wed, 8 Jun 2022 13:49:51 +0000 Subject: [PATCH] Update Logbook.md --- journal/Logbook.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/journal/Logbook.md b/journal/Logbook.md index 32a7fde..8b91846 100644 --- a/journal/Logbook.md +++ b/journal/Logbook.md @@ -51,6 +51,89 @@ His canon tables (cross-references between the Gospel books) ## Module 2 +# Asking the maths library +My computer tells me that π is approximatively + + +```python +from math import * +print(pi) +``` + + 3.141592653589793 + + +# Buffon’s needle +Applying the method of Buffon’s needle, we get the approximation + + +```python +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) +``` + + + + + 3.128911138923655 + + + +# 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: + + + +```python +%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') +``` + + +![png](output_5_0.png) + + +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: + + +```python +4*np.mean(accept) + +``` + + + + + 3.112 + + + + +```python + +``` **Exercice 02-2** *What is the average ?* -- 2.18.1