Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая МПиПА Арестов(Итог).doc
Скачиваний:
2
Добавлен:
30.11.2018
Размер:
371.2 Кб
Скачать

1 Постановка задачи и описание исходных данных

Разработать программу для расчета площади фигуры, ограниченной осью ОХ, функцией у=ах2+в и прямыми х=к, х=m, методом Монте-Карло (имитационное моделирование). Построить график функции с осями координат, графики прямых и закрасить вычисляемую площадь. Значения а, в, к, m задаются пользователем. Определить О-сложность алгоритма.

2 Математическое обеспечение

Суть метода

Нахождение площади фигуры, ограниченной параболой вида y(x)=ax2+b и прямыми y=k и y=m производится следующим образом: строится прямоугольная область (далее - контейнер), содержащий целиком область фигуры, площадь которой необходимо найти, генерируется заданное пользователем количество случайных точек, координаты которых принадлежат области построенного контейнера; подсчитывается количество точек, принадлежащих области искомой фигуры. Далее, по формуле Sи=Sк *k/r (где Sк - площадь контейнера, k - количество точек, принадлежащих искомой области, r - общее число точек) определяется площадь искомой области (Sи).

Реализация. Анализ исходных данных

Очевидно, что график y(x)=ax2+b при всех возможных значениях будет представлять собой параболу, смещенную от начала координат по оси Y на значение b. Растяжение по оси X будет определяться коэффициентом a при аргументе x2 . Функции y=k и y=m представляют собой прямые, параллельные Y.

Определение координат для построения контейнера

Для определения границ контейнера по оси Y необходимо вычислить значение координаты вершины параболы (b), пересечения параболы и прямых k и m (P1=ak2+b и P2=am2+b). Границы контейнера будут определятся максимальным абсолютным значением найденных точек, т.е.: GY1=max(|b|,|P1|, |P2|) и GY2=0.

Для определения границ контейнера по оси X необходимо вычислить точки пересечения ветвей параболы с осью X (если есть). Для этого решим квадратное уравнение ax2+b=0. Обозначим найденные действительные значения корней через X1 и X2. Границы контейнера будут определяться минимальным и максимальным найденными значениями, с учетом прямых k и m, т.е.: GX1=min(X1,X2, k,m) и GX2=max(X1,X2, k,m). Итак, полученный контейнер имеет координаты (GX1, GY1, GX2, GY2).

Проверка принадлежности точки области искомой фигуры

Пусть определена точка С(СX,CY), причем координаты точки принадлежат области контейнера. Точка будет принадлежать области, площадь которой нужно найти, если |CY|<F(|СX|). Иными словами, если: |CY|<a С2X+b.

Проверка правильности результата и подсчет относительной (приведенной) погрешности измерений

Площадь криволинейной трапеции можно определить интегральным методом. Первообразная функции f(x)= ax2+b имеет вид F(x)= (ax2)/3+bx. По формуле Ньютона-Лейбница имеем: S= (a GX22)/3+b GX2 - (a GX12)/3-b GX1.

За абсолютную величину примем площадь, найденную интегральным методом. Тогда: ∂=100((|S- Sи |)/S), где Sи - площадь, вычисленная методом Монте-Карло.

3 О-сложность алгоритма Приведем фрагмент кода, который реализует метод Монте-Карло:

for (int c2=0;c2<precision;c2++)

{

xr=(rand()%int(diax*10000)*0.0001)+interval_x_min; - Операторы А

yr=(rand()%int(diay*10000)*0.0001)+interval_y_min; - Операторы B

if (fabs(yr)<fabs(a*xr*xr+b)) cnt_points++; - Операторы C

}

Группы операторов А, B и С имеют константную О-сложность, т.е. О(С)), так как значения всегда вычисляются по заданной формуле. Итоговая О-сложность приведенного выше кода линейная О(n), т.е. сложность итогового алгоритма зависит только от количества итераций цикла.