Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
31.03.2015
Размер:
58.88 Кб
Скачать

22

5. Лабораторная работа №4.

НАХОЖДЕНИЕ ПЛОЩАДИ ФИГУРЫ

Целью задачи является использование двух алгоритмов для решения одной и той же задачи и их сравнительная оценка.

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

Условие задачи. Вычислить приближенно с точностью площадь S

пересечения двух фигур на плоскости методом растра и методом Монте-Карло

и сравнить методы.

Уточнение условия задачи. Исходными данными задачи является результаты лабора- торной работы №1: если рассматриваемые две фигуры пересекаются, то находится площадь их пересечения.

Метод приближенного вычисления площади.

y

k отрезков

d

k отрезков

с

x

a 0 b

Рассмотрим область, являющуюся пересечением эллипса и круга.

Опишем вокруг области прямоугольник. Если каким-то способом зададим n точек, равномерно распределенных внутри прямоугольника, из которых m точек попадает в область пересечения, то можно с определенной степенью точности считать, что m/n – это отношение площади рассматриваемой области к площади прямоугольника. Тогда приближенное значение площади области пересечения можно вычислить по формуле

Очевидно, что чем больше точек будем задавать, тем точнее будет вычисляться площадь области.

Рассмотрим два способа задания точек внутри прямоугольника: метод Монте-Карло и метод Растра.

Метод Монте-Карло

Координаты х и у каждой из n точек получаем, используя датчик случайных чисел. (см. 8.3). В Турбо-Паскале датчиком является стандартная математическая функция Random, которая при каждом ее выполнении выдает псевдослучайное число, равномерно распределенное на отрезке [0, 1]. Для того, чтобы инициировать эту функцию, надо обратиться к процедуре Randomize.

Н

Randomize;

х := Random;

апример,

Следует обратить внимание, что для задачи требуется равномерное распределение точек на отрезке [a, b] по оси OX и на отрезке [c, d] по оси OY. Поэтому для получение координаты (x,y) надо отобразить результаты функции Random с отрезка [0, 1] на эти отрезки соответственно.

Метод Монте-Карло состоит в том, чтобы с помощью датчика случайных чисел Random получить n раз случайные точки (x, y) и подсчитать, какое количество из них принадлежит рассматриваемой области.

Метод Растра

Нанесем сетку (растр) на прямоугольник, разделив каждую сторону прямоугольника на k равных отрезков. Узлы этой сетки задают точки с координатами (x, y),

где x = a, a + hx, a + 2*hx, …, b для шага hx = (b - a) / k;

y = c, c + hy, c + 2*hy, …, d для шага hy = (d - c) / k;

n = k*k.

Метод растра состоит в следующем: просматривая узлы сетки (x, y) в определенном порядке, подсчитываем количество узлов, которые принадлежит интересующей нас области (например, области пересечения фигур).

Этапы разработки программы.

  1. Изменить спецификацию задачи лабораторной работы №1 в связи с новым условием

задачи и соответствующим расширением состава входных и выходных данных.

  1. В качестве функциональных тестов подобрать входные данные для простого случая

пересечения фигур. Можно выбрать случай вложения фигур, тогда одна из фигур является областью пересечения и ее площадь легко вычисляется по формуле. Для иллюстративного примера – это случай вложения круга в эллипс.

  1. Изменить программу, выполнив первый шаг (описание входных-выходных данных)

и второй шаг (отделение ввод-вывод-обработка) проекта программы для измененной спецификации. Вставить в программу (в ветвь, когда фигуры пересекаются) вычисление границ a, b, c, d и абстракцию Приближенное вычисление площади. Отладить для простейшей заглушки, например, вычисление площади построенного прямоугольника.

  1. Написать логическое выражение, которое отвечает на вопрос: «Принадлежит ли

точка (x, y) заданной области пересечения?» Если принадлежит, то результат равен true, а если не принадлежит, то результат равен false.

Пример.

P1:= (sqr(x)+sqr(y))  r*r ; P2:= (sqr(x)/sqr(a)+sqr(y)/sqr(b))1

{Точка (х, у) принадлежит пересечению круга и эллипса?}

if P1 and P2 then

else

{Принадлежит}

{Не принадлежит}

  1. Вместо простейшей заглушки вставить проверку принадлежности точки области

пересечения. Отладить, выбирая точки, принадлежащие области, лежащей на границе области, вне области пересечения фигур.

  1. Изучить раздел 7.1 “Итерационные методы” и использовать общий алгоритм для

приближенного вычисления площади фигуры .

Из задачи Приближенное вычисление площади (сегмент С1) выделяется подзадача Вычисление m (сегмент С2),

Sold и Snew - площади фигуры на предыдущем и текущем шагах итерации.

Каждое значение площади Snew вычислено для большего количества точек, чем Sold.

{Прибл. вычисление площади} С1 <Инициализация Snew и k>

повторить

Sold :=Snew

C2

<Вычисление n и Snew>

<Изменение k>

до  Snew - Sold < 

{Вычисление m}

Отладить, раскрыв абстракцию Вычисление m простейшей заглушкой, например m:=n.

  1. Добавить в программу описание интерфейса процедуры MonteCarlo_m (см. 7.10).

Раскрыть в сегменте С1 абстракцию Вычисление m в виде оператора процедуры MonteCarlo_m(a,b,c,d,k,m). Все параметры процедуры должны быть описаны в главной программе.

Следует отметить, что к входным данным процедуры относится и описание области пересечения фигур, но мы ее локализуем в процедуре. Тем самым процедура теряет свойство универсальности.

{Входные: вещ a,b,c,d – границы C2 прямоугольника, цел k –число разбиений;

Выходные: цел m – число точек, принадлежащих области пересечения}

procedure MonteCarlo_m (a,b,c,d:real;

k:longint; var m:longint);

var

<Описание локальных переменных>

begin

<Алгоритм вычисления m>

end

Отладить интерфейс процедуры с использованием заглушки m:=n в сегменте С2.

  1. Заменить заглушку программой, реализующей метод Монте-Карло.

Отладить программу для разных вариантов пересечения фигур. При выборе конт -рольной точки выполнить рекомендации п.2 и сравнить результаты вычисления приближенного вычисления пощади фигуры с точным вычислением по формуле.

Выполнить эксперимент: выбирая различные формулы для увеличения k, найти такие, которые улучшают такие свойства метода, как скорость сходимости (число итераций) и время их выполнения. Сдать лабораторную работу преподавателю, имея полную документацию с графическим представлением выполненных тестов.

  1. Повторить п.7 и п.8 для метода Растра разработав процедуру Rastr_m.

Рекомендация. Для того, чтобы можно было корректно провести сравнительный анализ

алгоритмов Растр и Монте-Карло, они должны выполняться в одинаковых условиях, включающих одинаковые формулы для увеличения k и генерацию k*k (а не k!) точек в методе Монте-Карло.

  1. Изменить структуру программы, выделив в отдельные процедурные модули

следующие алгоритмы:

- вычисление площади фигуры (не зависит от способа задания точек) ;

- вычисление m методом Монте-Карло и методом Растра (не зависят от фигуры).

Рекомендация. Оформить описание фигуры в виде функции и использовать способ подстановки параметров по имени.

Нарисовать структурную схему полученной программы.

Соседние файлы в папке Metod1_2010