From 1b848681db6aca68ff17e56e96f4db947d563c0a Mon Sep 17 00:00:00 2001 From: 16fd6933414ad4ae0fb1412e7effdbc7 <16fd6933414ad4ae0fb1412e7effdbc7@app-learninglab.inria.fr> Date: Sat, 13 Jun 2020 13:40:56 +0000 Subject: [PATCH] Update toy_document_fr.Rmd --- module2/exo1/toy_document_fr.Rmd | 72 ++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/module2/exo1/toy_document_fr.Rmd b/module2/exo1/toy_document_fr.Rmd index 0427748..0839e1d 100644 --- a/module2/exo1/toy_document_fr.Rmd +++ b/module2/exo1/toy_document_fr.Rmd @@ -1,37 +1,47 @@ +--- title: "On the computation of pi" author: "Tegegne" date: "June 13, 2020 - -output: html_document +output: html_document --- -`` `{r setup, include = FALSE} -knitr :: opts_chunk $ set (echo = TRUE) -`` '' -## By asking the math lib -My computer tells me that $ \ pi $ is * approximately * -`` `` r cars} + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## Asking the maths library +My computer tells me that $\pi$ is *approximatively* + +```{r} pi -`` '' -## Using the Buffon needle method -But calculated with the __method__ of [Buffon needles] (https://fr.wikipedia.org/wiki/Aiguille_de_Buffon), we would obtain as __approximation__: -`` `{r} -set.seed (42) -N = 100,000 -x = runif (N) -theta = pi / 2 * runif (N) -2 / (mean (x + sin (theta)> 1)) -`` '' -## With a surface "frequency" argument -Otherwise, a simpler method to understand and not involving a call to the sine function is based on the fact that if $ X \ sim U (0,1) $ and $ Y \ sim U (0,1) $ then $ P [X ^ 2 + Y ^ 2 \ leq 1] = \ pi / 4 $ (see [Monte Carlo method on Wikipedia] (https://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte- Carlo # D% C3% A9termination_de_la_valeur_de_% CF% 80)). The following code illustrates this fact: -`` `{r} -set.seed (42) +``` + +## Buffon's needle +Applying the method of [Buffon's needle](https://en.wikipedia.org/wiki/Buffon%27s_needle_problem), we get the __approximation__ + +```{r} +set.seed(42) +N = 100000 +x = runif(N) +theta = pi/2*runif(N) +2/(mean(x+sin(theta)>1)) +``` + +## 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\sim U(0,1)$ and $Y\sim U(0,1)$, then $P[X^2+Y^2\leq 1] = \pi/4$ (see ["Monte Carlo method" on Wikipedia](https://en.wikipedia.org/wiki/Monte_Carlo_method)). The following code uses this approach: + +```{r} +set.seed(42) N = 1000 -df = data.frame (X = runif (N), Y = runif (N)) -df $ Accept = (df $ X ** 2 + df $ Y ** 2 <= 1) -library (ggplot2) -ggplot (df, aes (x = X, y = Y, color = Accept)) + geom_point (alpha = .2) + coord_fixed () + theme_bw () -`` '' -It is then easy to obtain an approximation (not great) of $ \ pi $ by counting how many times, on average, $ X ^ 2 + Y ^ 2 $ is less than 1: -`` `{r} -4 * mean (df $ Accept) -`` '' \ No newline at end of file +df = data.frame(X = runif(N), Y = runif(N)) +df$Accept = (df$X**2 + df$Y**2 <=1) +library(ggplot2) +ggplot(df, aes(x=X,y=Y,color=Accept)) + geom_point(alpha=.2) + coord_fixed() + theme_bw() + +``` + +It is then straightforward to obtain a (not really good) approximation to $\pi$ by counting how many times, on average, $X^2 + Y^2$ is smaller than 1: + +```{r} +4*mean(df$Accept) +``` \ No newline at end of file -- 2.18.1