home

Scientific Computing (Psychology 9040a)

Fall, 2021

Estimate \(\pi\) by throwing darts


Imagine a circle of radius (\(r\)) inscribed inside a square with side length \(2r\). Now imagine throwing a dart which lands at some random location within the square (imagine you are terribly random at throwing darts). Sometimes the dart will be inside the circle and sometimes it will not. If you count the number of darts that land inside the circle and divide that by the total number of darts, that ratio ought to equal \(\frac{\pi}{4}\).

As an exercise, implement this method of estimating \(\pi\). Write the code so that you can use any number of random darts \(n\). Start with 1000 darts and then try larger numbers. See how close you can get to the actual value of \(\pi\). Here are the first 100,000 digits of \(\pi\).

Write a function called estimatepi() that takes an integer n as input, and returns as output the estimated value of \(\pi\) using n throws of the dart.

Note that this algorithm is not a very efficient or fast way of getting the digits of \(\pi\), but it’s a fun programming exercise nevertheless and a way to get you coding.

Hint: you will need a function that generates random numbers.

In MATLAB the rand() function samples from a uniform (pseudo) random distribution over the interval \((0,1)\).

Hint: to determine whether each point is inside or outside of the circle you can compute the distance between the point and the centre of the circle. If this distance is greater than the radius of the circle, it must be outside of the circle. Using the Pythagorean theorem you can easily show that the equation for the distance \(d\) between two points \((x_{1},y_{1})\) and \((x_{2},y_{2})\) is:

\[\begin{equation} d = \sqrt{(x_{2}-x_{1})^{2} + (y_{2}-y_{1})^{2}} \end{equation}\]


sample solution