In: Math
problem is also a Monte Carlo simulation, but this time in the continuous domain: must use the following fact: a circle inscribed in a unit square
has as radius of 0.5 and an area of ?∗(0.52)=?4.π∗(0.52)=π4.
Therefore, if you generate num_trials random points in the unit square, and count how many land inside the circle, you can calculate an approximation of ?
For this problem, you must create code in python
(A) Draw the diagram of the unit square with inscribed circle and 500 random points, and calculate the value of ?
(B) Without drawing the diagram, calculate the value of ? you would get from 105 trials.
(C) After completing (B), try to get a more accurate value for ? by increasing the number of trials.The results will depend on your machine
A)
The Python code for drawing the diagram and calculating the value of PI is given below. (500 random points are generated).
from numpy import random import math import matplotlib.pyplot as plt x =-0.5+random.random_sample(500) y = -0.5+random.random_sample(500) x1 = x[x*x+y*y<0.25] y1 = y[x*x+y*y<0.25] circle = plt.Circle((0, 0),fill=None, radius=0.5) points = [[-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5],[-0.5,-0.5]] line = plt.Polygon(points, fill=None, edgecolor='r') plt.gca().add_patch(circle) plt.gca().add_patch(line) plt.scatter(x1,y1) plt.axis('scaled') pi = 4*len(x1)/500 plt.title("n=500, $\pi$=%0.4f" % pi) plt.show()
The diagram given below.
The value of PI is .
B) For random points, . Very close to the correct .
Python Code below:
from numpy import random import math import matplotlib.pyplot as plt N = 100000 x =-0.5+random.random_sample(N) y = -0.5+random.random_sample(N) x1 = x[x*x+y*y<0.25] y1 = y[x*x+y*y<0.25] pi = 4*len(x1)/N print('PI =', pi)
C) For 5000 trials we reach close to the actual value of PI. (Change 500 in the code to 5000 everywhere)