maths.pi_monte_carlo_estimation

Attributes

prompt

Classes

Point

Functions

estimate_pi(→ float)

Generate an estimate of the mathematical constant PI.

Module Contents

class maths.pi_monte_carlo_estimation.Point(x: float, y: float)
is_in_unit_circle() bool

True, if the point lies in the unit circle False, otherwise

classmethod random_unit_square(ran: random.Random)

Generates a point randomly drawn from the unit square [0, 1) x [0, 1), using ‘ran’ random number generator

x
y
maths.pi_monte_carlo_estimation.estimate_pi(number_of_simulations: int, seed: int | None = None) float

Generate an estimate of the mathematical constant PI. See https://en.wikipedia.org/wiki/Monte_Carlo_method#Overview

The estimate is generated by Monte Carlo simulations. Let U be uniformly drawn from the unit square [0, 1) x [0, 1). The probability that U lies in the unit circle is:

P[U in unit circle] = 1/4 PI

and therefore

PI = 4 * P[U in unit circle]

We can get an estimate of the probability P[U in unit circle]. See https://en.wikipedia.org/wiki/Empirical_probability by:

  1. Draw a point uniformly from the unit square.

  2. Repeat the first step n times and count the number of points in the unit

    circle, which is called m.

  3. An estimate of P[U in unit circle] is m/n

‘seed’ provides a seed for the number generator; if None, no seed is used.

>>> estimate_pi(100, 1)
3.2
>>> estimate_pi(1000, 11)
3.156
>>> estimate_pi(1000000, 111)
3.139892
maths.pi_monte_carlo_estimation.prompt = 'Please enter the desired number of Monte Carlo simulations: '