A method that is easier to understand and does not make use of the $\sin$ function is based on the fact that if $X\simU(0,1)$ and $Y\simU(0,1)$, then $P[X^2+Y^2\leq 1] = \pi/4$ (see [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte Carlo method" on Wikipedia]]). The following code uses this approach:
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 [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte Carlo method" on Wikipedia]]). The following code uses this approach:
#+begin_src R :results output graphics :file figure_pi_mc1.png :exports both :width 600 :height 400 :session *R*
A method that is easier to understand and does not make use of the $\sin$ function is based on the fact that if $X\simU(0,1)$ and $Y\simU(0,1)$, then $P[X^2+Y^2 \le1]=\pi/4$ (see [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte Carlo method" on Wikipedia]]). The following code uses this approach:
#+begin_src python :results output :session *python* :var matplot_lib_filename="figure_pi_mc2.png" :exports both
import matplotlib.pyplot as plt
And now the same but in an Python session. With a session, Python'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~.
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)
#+begin_src python :results output :session :exports both