Уровень алгоритма

Участница:Sannikovats/Вычисление определенного интеграла с использованием адаптивно сгущающейся сетки (1)

Материал из Алговики
Перейти к навигации Перейти к поиску


Вычисление определённого интеграла с использованием адаптивно сгущающейся сетки
Последовательный алгоритм
Последовательная сложность [math]...[/math]
Объём входных данных [math]...[/math]
Объём выходных данных [math]...[/math]
Параллельный алгоритм
Высота ярусно-параллельной формы [math]...[/math]
Ширина ярусно-параллельной формы [math]...[/math]


Основные авторы описания: Санникова Татьяна Сергеевна, Лукшин Петр Андреевич.

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

Допустим, нам дана функция [math]f(x)[/math] , определенная на отрезке, и возможность получать ее численное значение в любой из точек области определения за фиксированное время. Задача — вычислить определенный интеграл данной функции по заданной области и дать оценку погрешности вычисления.
Существуют различные последовательные методы построения адаптивных подвижных сеток, которые позволяют значительно повысить точность вычисления определенного интеграла за счет учета характера изменения подынтегральной функции. Представим общее описание для методов рекурсивного деления и локального стека.

1.1.1 Метод рекурсивного деления

Простейший из них - это метод рекурсивного деления, выигрыш от применения которого достигается за счет возможности использования сеток с разным числом узлов на разных участках интервала интегрирования. Интервал интегрирования разбивается на две части и независимо интегрируется функция [math]f(x)[/math] на каждой из них при соответствующих шагах интегрирования. Процедуру разбиения отрезков можно рекурсивно повторить до получения отрезков, на которых подынтегральная функция имеет простой вид и может быть аппроксимирована отрезком прямой с заданной точностью. Но при распараллеливании этого алгоритма (т.е. при запуске попарно подпрограмм, обрабатывающих половинки разбиваемого интервала) можно столкнуться со следующей проблемой: в реальной системе число процессоров ограничено и время, необходимое для порождения параллельных процессов существенно не равно нулю. А значит, запуск процессов, число которых значительно превышает число физических процессов системы при решении рассматриваемой задачи, приводит к увеличению времени ее решения по сравнению с последовательной программой. Основная сложность построения параллельного алгоритма на основе рассмотренного последовательного алгоритма, кроется в том, что, хотя несколько ветвей программы могли бы одновременно обрабатывать разные части интервала интегрирования, координаты концов этих отрезков хранятся в программном стеке процесса и фактически недоступны программисту. Если бы они были расположены в некотором явно описанном массиве, можно было бы передать их по частям для обработки разным нитям программы. Поэтому, необходимо рассмотреть метод локального стека, позволяющий распределить вычислительную работу между ограниченным числом процессов.

1.1.2 Метод локального стека

В основе этого алгоритма лежит описанный выше метод рекурсивного деления. Только данный метод использует массив данных, доступ к которым осуществляется по принципу стека - первым удаляется последний из добавленных элементов. В рассматриваемом алгоритме вместо стека можно было использовать и другие способы хранения заданий, например очередь. Стек выбран исключительно из соображений простоты реализации. Времена выполнения рассмотренных алгоритмов отличаются примерно на 5% в пользу локального стека, таким образом, алгоритм "локального стека" будем считать наилучшим из имеющихся в нашем распоряжении последовательных методов и на его примере построим дальнейшее описание.


1.2 Математическое описание алгоритма

"Входные данные:" заданная функция [math]f(x)[/math], определенная на отрезке [math][A,B][/math],точное решение, заданная точность решения ε.
"Выходные данные:" число, представляющее собой приближенное значение интеграла.
В качестве модельной задачи рассматривается проблема вычисления с точностью ε значения определенного интеграла
Используемые формулы:

  • Из метода трапеций [math]sAB=\frac{f(A)+f(B)}{2}*(B-A)[/math]

1.jpg

1.3 Вычислительное ядро алгоритма

Основное время работы алгоритма приходится на:

  1. нахождение середины отрезка и значения функции в этой точке;
  2. вычисление частичных сумм на подобластях методом трапеций;
  3. определение выполнения условия точности:
    • если не выполняется, то продолжаем дробить область,"закладывая" в стек границы нового интервала,
    • иначе добавляем к результату вычисленную сумму, завершая цикл.

1.4 Макроструктура алгоритма

1.5 Схема реализации последовательного алгоритма

1.6 Последовательная сложность алгоритма

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

1.9 Входные и выходные данные алгоритма

1.10 Свойства алгоритма

2 Программная реализация алгоритма

2.1 Масштабируемость алгоритма и его реализации

2.2 Существующие реализации алгоритма