Урок 3. Математическое программирование на языке Python. Определение площадей фигур методом Монте-Карло

Федеральное агентство железнодорожного транспорта Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Сибирский государственный университет путей сообщения» в г.Новоалтайске

Автор: преподаватель информатики и схемотехники Чебан Олег Олегович
Дата создания: 2016, г. Новоалтайск, Алтайский край

Урок 3. Математическое программирование на языке Python. Определение площадей фигур методом Монте-Карло.
Цели урока: Изучить метод Монте-Карло на примерах расчета площадей сложных форм ограниченных типовыми геометрическими фигурами: круг, ромб, линия, парабола.
Тип урока: смешанный (получение новых знаний, практическая работа).
Оборудование:
Язык программирования Python (официальный сайт python.org).
Среда разработки Geany (официальный сайт geany.org).
Проектор.

I. Сущность метода Монте-Карло.

Сущность метода рассмотрим на примере круга (см. Рис. 1.), заключенной в квадрат со стороной 2. Площадь квадрата вычислим по известной формуле:
S = a*a=2*2=4.
Для проверки метода используем круг с единичным радиусом:
S = Pi*r^2=3.14159*1=3.14159
Если организовать генерацию случайных координат точек в пределах квадрата, то произведение площади квадрата на частное двух чисел, в числителе количество точек находящихся в пределах круга, в знаменателе общее количество точек, даст нам приближенное значение площади круга, и чем больше количество испытаний, тем точнее результат.
S=Sкв*M/N , где
m количество точек принадлежащих кругу
n общее количество точек
Sкв площадь квадрата.
Математические модели, основанные на использовании случайных чисел, называются вероятностными.
Рис. 1. Вычисление площади единичного круга методом Монте-Карло.
Для того, чтобы получить непредсказуемое заранее число, необходимо определить границы для оператора random.
Пример 1. Случайное число в диапазоне от 1 до 100
import random
x=random.randint(1,100)
Пример 2. Случайное число в диапазоне от -100 до +100
x=100-random.randint(0,200)

Пример 3. Случайное число 0 до 1
x=random.random()

Пример 4. Случайное число -1 до 1
x=random.uniform(-1,1)
Таблица 1. Оператор условия и выбора.
Оператор
Описание

if a > b:
c = a
else:
c = b
Полное ветвление

if a < 0:
s = -1
elif a == 0:
s = 0
else:
s = 1
Оператор выбора

if a < 0:
s = -1
else:
if a == 0:
s = 0
else:
s = 1
Вложенные оператор ветвления

for i in range(5):
print(i)
Результат:
0
1
2
3
4
Перебор последовательности чисел. Функция range() генерирует арифметические прогрессии.
Range(5, 10) от 5 до 9
range(0, 10, 3)
0, 3, 6, 9

i = 0
while i < 3:
print(i)
i = i + 1
Результат:
0
1
2
Цикл While




II. Практическая часть.

Задача. Дана фигура сложной формы (Рис. 1.). Найти приближенное значение ее площади. Проанализировать результат.

Исходные данные:
a = 2, сторона квадрата,
n - общее количество точек,
m количество точек содержащихся в фигуре (круге).
Математическая модель.
S фигуры = S квадрата * M/N
Алгоритм решения.
Запросить общее количество точек.
Присвоить номеру I выбранной точки значение 0.
Присвоить количеству точек M = 0.
Пока I <= N, повторять:
4.1. x = random.uniform(-1,1) # случайная координата точки I по оси абсцисс X
4.2. y = random.uniform(-1,1) # случайна координата точки I по оси ординат Y
4.3. Если x^2+y^2<1, то М=М+1 # точка с координатами X, Y принадлежит кругу
4.4. I = I+1 # увеличиваем счетчик на единицу
S = 4*M/N # вычислим площадь фигуры (круга)
Сообщить S # вывести результат

Программа на языке Python.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math,random
n=input ("Введите общее количество точек: ")
i=1
m=0
while i x=random.uniform(-1,1) # случайная координата точки I по оси абсцисс X
y=random.uniform(-1,1) # случайна координата точки I по оси ординат Y
if pow(x,2)+pow(y,2)<=1: # точка с координатами X, Y принадлежит кругу
m=m+1 # подсчет точек принадлежавших фигуре
i=i+1
s=4*m/float(n) # площадь фигуры, float-гарантирует деление с сохранением дробной части
print "m=",m # вывод количества точек принадлежавших фигуре
print "i=",i # проверка счетчика цикла i=n,
print "Площадь фигуры: ",s
Результаты:
1.
Введите общее количество точек: 1000
m = 789
i = 1000
Площадь фигуры: 3.156

Анализ результата: площадь единичного круга равна числу Пи, или 3.14159. Площадь фигуры найдена с точностью 0.1.

2.
Введите общее количество точек: 100 000
m = 78536
i = 100 000
Площадь фигуры: 3.14144

Анализ результата: площадь единичного круга равна числу Пи, или 3.14159. Площадь фигуры найдена с точностью 0.001.


Задание на урок. Напишите программы определяющие площади фигур методом Монте-Карло.
1.
2.
Значение а можно определить по сжатию параболы относительно оси абсцисс, по отношению к общей формуле квадратичной функции y=x^2
В нашем случае, если взять по X = 4, поднять вертикаль до пересечения с параболой, по получим Y=4. Подставим в формулу:
4=a*4^2, или 4=a*16, получим a = 0.25


Приложенные файлы

  • doc python03
    Чебан О. О.
    Размер файла: 68 kB Загрузок: 4