Commit 6bc83479 authored by boulanlo's avatar boulanlo

Module 2 exercise 1

parent e391755a
#+TITLE: Your title #+TITLE: On the computation of pi
#+AUTHOR: Your name #+AUTHOR: Louis Boulanger
#+DATE: Today's date #+DATE: October 13th 2020
#+LANGUAGE: en #+LANGUAGE: en
# #+PROPERTY: header-args :eval never-export # #+PROPERTY: header-args :eval never-export
...@@ -11,71 +11,55 @@ ...@@ -11,71 +11,55 @@
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script> #+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script> #+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* Some explanations * Asking the maths library
This is an org-mode document with code examples in R. Once opened in
Emacs, this document can easily be exported to HTML, PDF, and Office
formats. For more information on org-mode, see
https://orgmode.org/guide/.
When you type the shortcut =C-c C-e h o=, this document will be
exported as HTML. All the code in it will be re-executed, and the
results will be retrieved and included into the exported document. If
you do not want to re-execute all code each time, you can delete the #
and the space before ~#+PROPERTY:~ in the header of this document.
Like we showed in the video, R code is included as follows (and is
exxecuted by typing ~C-c C-c~):
My computer tells me that $\pi$ is /approximately/
#+begin_src R :results output :exports both #+begin_src R :results output :exports both
print("Hello world!") pi
#+end_src #+end_src
#+RESULTS: #+RESULTS:
: [1] "Hello world!" : [1] 3.141593
And now the same but in an R session. This is the most frequent * Buffon's needle
situation, because R is really an interactive language. With a Applying the method of [[https://en.wikipedia.org/wiki/Buffon%27s_needle_problem][Buffon's needle]], we get the *approximation*
session, R's state, i.e. the values of all the variables, remains
persistent from one code block to the next. The code is still executed
using ~C-c C-c~.
#+begin_src R :results output :session *R* :exports both #+begin_src R :results output :exports both
summary(cars) set.seed(42)
N = 100000
x = runif(N)
theta = pi/2*runif(N)
2/(mean(x+sin(theta)>1))
#+end_src #+end_src
#+RESULTS: #+RESULTS:
: speed dist : [1] 3.14327
: Min. : 4.0 Min. : 2.00
: 1st Qu.:12.0 1st Qu.: 26.00 * Using a surface fraction argument
: Median :15.0 Median : 36.00 A method that is easier to understand and does not make use of the sin
: Mean :15.4 Mean : 42.98 function is base on the fact that if $X \sim U(0,1)$ and $Y \sim
: 3rd Qu.:19.0 3rd Qu.: 56.00 U(0,1)$, then $P\left[X^2 + Y^2 \le 1 \right] = \pi/4$ (see [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte
: Max. :25.0 Max. :120.00 Carlo method" on Wikipedia]]). The following code uses this approach:
Finally, an example for graphical output: #+begin_src R :results output graphics file :file "./monte_carlo.png" :exports both :session *R*
#+begin_src R :results output graphics :file "./cars.png" :exports results :width 600 :height 400 :session *R* set.seed(42)
plot(cars) 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()
#+end_src #+end_src
#+RESULTS: #+RESULTS:
[[file:./cars.png]] [[file:./monte_carlo.png]]
Note the parameter ~:exports results~, which indicates that the code
will not appear in the exported document. We recommend that in the
context of this MOOC, you always leave this parameter setting as
~:exports both~, because we want your analyses to be perfectly
transparent and reproducible.
Watch out: the figure generated by the code block is /not/ stored in It is then straightforward to obtain a (not really good) approximation
the org document. It's a plain file, here named ~cars.png~. You have to $\pi$ by counting how many times, on average, $X^2 + Y^2$ is
to commit it explicitly if you want your analysis to be legible and smaller than 1:
understandable on GitLab.
Finally, don't forget that we provide in the resource section of this #+begin_src R :exports both :session *R*
MOOC a configuration with a few keyboard shortcuts that allow you to 4*mean(df$Accept)
quickly create code blocks in R by typing ~<r~ or ~<R~ followed by #+end_src
~Tab~.
Now it's your turn! You can delete all this information and replace it #+RESULTS:
by your computational document. : 3.156
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment