Skip to content

Latest commit

 

History

History

estimate_pi

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Оценить число π используя генератор случайных чисел

Используя только генератор псевдослучайных чисел в интервале $[0, 1]$ оценить число $\pi$.

Требования к реализации

Реализовать функцию оценки числа $\pi$ со следующей сигнатурой:

estimate_pi(n: int) -> float

Описание параметров:

  • n: число случайных точек для оценки числа $\pi$.

Результатом работы функции должно быть число - оценка числа $\pi$.

Входные и выходные данные

в следующей таблице приведены примеры входных данных:

Ввод Вывод
1 100000 3.14248
2 450000 3.14176

Здесь выходные данные имеют приближенных характер, для решения задачи достаточно получить точность равную двум знакам после запятой.

Подход к решению

Воспользуемся геометрической интерпретацией вероятности и рассмотрим вероятность попадания случайной точки в круг единичного радиуса и центром в точке $(0, 0)$. Его площадь будет вычисляться по формуле $S_{круга} = \pi * R^2$, где $R = 1$ - радиус.

Точки генерируются с помощью равномерного генератора псевдослучайных чисел, например uniform из модуля random в Python. Точка на плоскости $(x, y)$, полученная таким образом, будет лежать в квадрате со стороной $1$ и правым нижним углом в точке $(0, 0)$, т.е. $0 \le x \le 1, 0 \le y \le 1$. Площадь такого квадрата будет вычисляться по формуле $S_{квадрата}=4*R^2$.

Используя соотношение $\frac{S_{круга}}{4*S_{квадрата}}$ можно получить оценку вероятности попадания точки, брошенной в квадрат со стороной $2$, в круг единичного радиуса.

С другой стороны вероятность можно оценить классическим способом. Который заключается в отношении количества точек $k$, попавших в круг, к общему числу точек $n$. Определить точки попавшие в круг с радиусом $1$ и центром в точке $(0, 0)$ можно с помощью неравенства $x^2 + y^2 <= 1$. С этой точки зрения оценка вероятности будет равна $\frac{k}{n}$.

В результате, число $\pi$ находиться из равенства этих двух оценок, классической и геометрической вероятностей, т.е.

$$\frac{S_{круга}}{4*S_{квадрата}}=\frac{k}{n}$$

Реализация размещена в модуле estimate_pi.py.