Решаем задачи Python. Джеймс Девис

Читать онлайн.
Название Решаем задачи Python
Автор произведения Джеймс Девис
Жанр
Серия
Издательство
Год выпуска 2024
isbn



Скачать книгу

внутри квадрата, то вероятность попадания точки внутрь круга равна отношению площади круга к площади квадрата, то есть π/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.

      11. `return pi_estimate`: Функция возвращает оценку числа π.

      12. `num_points = 1000000`: Это количество случайных точек, которые мы сгенерируем для оценки числа π.

      13. `estimated_pi = monte_carlo_pi(num_points)`: Эта строка вызывает функцию `monte_carlo_pi` с указанным количеством точек и сохраняет результат в переменной `estimated_pi`.

      14. `print(f"Приближенное значение числа Пи с использованием {num_points} точек: {estimated_pi}")`: Эта строка выводит приближенное значение числа π на экран вместе с количеством сгенерированных точек. Используется форматированная строка (f-string) для вставки значений переменных в текст.

2. Задача о нахождении площади круга: Приблизить площадь круга с радиусом 1 с помощью метода Монте-Карло.

      Описание задачи: Представим, что у нас есть круг с радиусом 1. Мы хотим приблизить его площадь, используя метод Монте-Карло. Для этого мы будем генерировать случайные точки внутри квадрата, описывающего этот круг, и считать, сколько из этих точек попадают внутрь круга.

      Идея решения: Если мы генерируем много точек внутри квадрата, описывающего круг, и считаем, сколько из них попадают внутрь круга, то отношение числа точек, попавших внутрь круга, к общему числу точек, умноженное на площадь квадрата, даст приближенное значение площади круга.

      Пример кода на Python:

      ```python

      import random

      def monte_carlo_circle_area(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

      circle_area_estimate = points_inside_circle / total_points * 4

      return circle_area_estimate

      # Пример использования

      num_points = 1000000

      estimated_area = monte_carlo_circle_area(num_points)

      print(f"Приближенная площадь круга с использованием {num_points} точек: {estimated_area}")

      ```

      В этом примере мы используем тот же метод Монте-Карло, чтобы оценить площадь круга.