Методы приближённых вычислений используют в том случае, когда с помощью аналитических методов решить задачу сложно или невозможно. Рассмотрим один из методов приближённых вычислений, который можно применить для определения площади криволинейной фигуры – метод Монте-Карло.
Метод Монте-Карло
Метод Монте-Карло получил своё название в честь одноимённого города в княжестве Монако, в котором развит игорный бизнес. Многие игры основаны на методе случайных чисел (рулетка, лото, раскладка карт).
Метод Монте-Карло можно использовать для определения площади криволинейных плоских фигур. Для этого фигуру, площадь которой требуется найти, нужно поместить в фигуру с известной площадью (например, квадрат, прямоугольник). После этого в квадрат набрасываются точки со случайными координатами (количество точек – k1). Определяется количество точек, попавших в заданную фигуру (k2).
Обозначим площади фигур s1 – площадь квадрата; s2 – площадь фигуры. Тогда при большом количестве точек площади фигур будут пропорциональны количеству точек, попавших внутрь фигур:
s2/s1=k2/k1; откуда s2=s1*k2/k1
Точность вычислений зависит от количества набрасываемых случайных точек (чем больше количество точек, тем более точный результат вычислений).
Пример 1. Определение площади круга методом Монте-Карло (Приложение 1)
Поместим круг (r=1) в квадрат со стороной 4. Используя метод М-К, определим количество случайных точек внутри круга (k).
Тогда: S круга = S квадрата*k/n, где n – общее количество точек
Dim n, k As Long, pi, x, y, s As Single, r as Integer Private Sub Command1_Click() ‘процедура кнопки Пуск r=1 Picture1.Scale (–3, 3)–(3, –3) ‘шкала Picture1.Circle (0, 0), r, QBColor(2) ‘рисуем круг Picture1.Line (–2, 2)–(2, –2), QBColor(3), B ‘рисуем квадрат n = Val(InputBox("Ввод n", "Данные")) k = 0 ‘количество точек внутри круга Randomize Timer For i = 1 To n x = (Rnd * 4 – 2) ‘координаты случайной точки y = (Rnd * 4 – 2) If x ^ 2 + y ^ 2 <= r^2 Then ‘точка попала в круг k = k + 1 ‘количество случайных точек внутри круга Picture1.PSet (x, y), QBColor(11) ‘рисуем точку внутри круга Else Picture1.PSet (x, y), QBColor(0) ‘рисуем точку за пределами круга End If Next s = 4 * 4 * k / n Text1.Text = Str(n) Text2.Text = Str(s) End Sub Private Sub Command3_Click() ‘процедура кнопки Выход End End Sub
Задание:
- Добавьте в проект вычисление приближённого значения числа Пи.
- Добавьте процедуру кнопки Сброс.
Пример 2. Определить площадь заштрихованной фигуры, ограниченной осью х и графиками функций y1 = – exu + 1.5, y2 = 2sin(x), для x [] и y > 0 (Приложение 2)
1. Построим прямоугольник с размерами 1,5 х Pi,
чтобы искомая фигура оказалась внутри
прямоугольника.
2. Условия, при которых точка попадает в искомую
фигуру:
y>0
y< – exu +1.5
y< 2sin(x)
Обозначения:
N – общее количество точек в прямоугольнике;
K – количество точек, попавших в искомую фигуру;
S – площадь фигуры;
Sp – площадь прямоугольника.
Тогда искомая площадь: S = Sp * k/n
Dim n, k As Long, pi, x, y1, y2, s, sp As Single Private Sub Command1_Click() ‘процедура кнопки Пуск pi = 3.14157 Picture1.Scale (–4, 3)–(4, –3) Picture1.Line (–4, 0)–(4, 0), QBColor(0) ‘ось x Picture1.Line (0, –3)–(0, 3), QBColor(0) ‘ось y Picture1.Line (0, 1.5)–(pi, 0), QBColor(3), B ‘Прямоугольник n = Val(InputBox("Ввод n", "Данные")) k = 0 ‘количество точек внутри фигуры Randomize Timer For x = –pi To pi Step 0.05 y1 = 2 * Sin(x) ‘строим графики y2 = –Abs(x) + 1.5 Picture1.PSet (x, y1), QBColor(0) Picture1.PSet (x, y2), QBColor(4) Next For x = –4 To 4 ‘разметка делений на оси х Picture1.PSet (x, 0), QBColor(0) Picture1.Print x Next For i = 1 To n ‘подсчёт точек внутри фигуры x = (Rnd * pi) y = (Rnd * 1.5) If (y > 0) And (y < –Abs(x) + 1.5) And (y < 2 * Sin(x)) Then k = k + 1 Picture1.PSet (x, y), QBColor(4) Else Picture1.PSet (x, y), QBColor(0) End If Next sp = 1.5 * pi ‘площадь прямоугольника s = sp * k / n ‘площадь фигуры Text1.Text = Str(n) Text2.Text = Str(s) End Sub
Самостоятельная работа
1. Методом М-К определить площадь фигуры, ограниченной осью Х и графиком функции y = – x2 + 4 (y > 0, x [–2, 2]).
2. Задача Архимеда. Архимед вывел формулу площади так называемых «арбелесовых ножей» (на рисунке они закрашены серым цветом):
S = 3,14 * t2/8, где t – длина отрезка
АВ. Доказать с помощью метода М-К эту формулу.
Радиусы большой (R1) и одной из малых окружностей
(R2) вводятся с клавиатуры.
(Программный код задачи Архимеда находится в Приложении 3).
3. Определить площадь заштрихованной фигуры.
Литература:
- Глушаков С.В., Мельников В.В., Сурядный А.С. Программирование в среде Windows. Visual Basic 6.0. М.: ООО «Издательство АСТ», 2001.
- Браун С. Visual Basic. Учебный курс. – Спб.: Питер, 2002.
- Есипов А.С., Паныгина Н.Н., Громада М.И. Информатика. Задачник. – СПб: Наука и техника, 2001.