Логическое мышление и базовые конструкции Python
1. Задача о числе Пи: Используя метод Монте-Карло, приблизить число Пи.
Описание метода Монте-Карло: Метод Монте-Карло – это статистический метод, используемый для оценки численных значений математических функций, основанный на генерации случайных чисел. В данном случае мы будем использовать метод Монте-Карло для приближенного вычисления числа Пи.
Идея метода: Представим, что у нас есть круг с радиусом 1, вписанный в квадрат со стороной 2. Площадь круга равна π, а площадь квадрата равна 4. Если мы случайным образом генерируем точки внутри квадрата, то вероятность попадания точки внутрь круга равна отношению площади круга к площади квадрата, то есть π/4. Зная это, мы можем использовать метод Монте-Карло для оценки числа π.
Шаги решения:
1. Создание квадрата со стороной 2 и вписанного в него круга с радиусом 1.
2. Генерация случайных точек внутри квадрата.
3. Подсчет количества точек, попавших внутрь круга.
4. Оценка числа π как отношение числа точек, попавших внутрь круга, к общему числу сгенерированных точек, умноженное на 4.
Чем больше точек мы используем, тем более точное приближение числа π мы получим.
Пример кода на Python:
```python
import random
def monte_carlo_pi(num_points):
points_inside_circle = 0
total_points = num_points
for _ in range(num_points):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
distance = x**2 + y**2
if distance <= 1:
points_inside_circle += 1
pi_estimate = 4 * points_inside_circle / total_points
return pi_estimate
# Пример использования
num_points = 1000000
estimated_pi = monte_carlo_pi(num_points)
print(f"Приближенное значение числа Пи с использованием {num_points} точек: {estimated_pi}")
```
Этот код генерирует миллион случайных точек в квадрате и оценивает значение числа π с помощью метода Монте-Карло.
Пояснения к каждой части кода:
1. `import random`: Эта строка импортирует модуль `random`, который мы будем использовать для генерации случайных чисел.
2. `def monte_carlo_pi(num_points)`: Это определение функции `monte_carlo_pi`, которая принимает один аргумент `num_points`, представляющий количество случайных точек, которые мы сгенерируем.
3. `points_inside_circle = 0`: Эта переменная будет использоваться для отслеживания количества точек, попавших внутрь круга.
4. `total_points = num_points`: Эта переменная хранит общее количество сгенерированных точек.
5. `for _ in range(num_points):`: Этот цикл генерирует `num_points` случайных точек внутри квадрата.
6. `x = random.uniform(-1, 1)` и `y = random.uniform(-1, 1)`: Эти строки генерируют случайные координаты `x` и `y` для каждой точки в диапазоне от -1 до 1, что соответствует координатам квадрата.
7. `distance = x**2 + y**2`: Это вычисляет квадрат расстояния от начала координат до сгенерированной точки.
8. `if distance <= 1:`: Этот оператор проверяет, попадает ли точка внутрь круга, используя тот факт, что расстояние от начала координат до точки меньше или равно радиусу круга (который равен 1).
9. `points_inside_circle += 1`: Если точка попадает внутрь круга, увеличиваем счетчик точек внутри круга.
10. `pi_estimate = 4 * points_inside_circle / total_points`: Эта строка оценивает значение числа π, умножая отношение точек внутри круга к общему числу точек на 4, так как отношение площади круга к площади квадрата равно π/4.