2 ПРОЕКТИРОВАНИЕ
2.1. Декомпозиция
Следующие схемы помогут наглядно увидеть принцип работы программы.
Рисунок 1- контекстная диаграмма модели
На рисунке 1 показана контекстная диаграмма модели. А именно, исходные данные, управление и результаты.
Рисунок 2 - Функционально-структурная схема программы
На рисунке 2 наглядно показана декомпозиция. Представлены SAD-блоки, а также их доминирование друг над другом.
Рисунок 3 - Функционально-структурная схема блока "Найти методом по-координатного спуска"
На рисунке 3 представлена декомпозиция SAD-блока "Найти методом поко-ординатного спуска".Данный блок разбивается на два: поиск по координате Y и поиск по координате X.
Рисунок 4 - Функционально-структурная схема блока "Поиск по координа-те X"
Рисунок 5- Функционально-структурная схема блока "Поиск по координате Y"
Рисунок 6 - Функционально-структурная схема блока "Найти методом гра-диентного спуска"
Рисунок 7 - Функционально-структурная схема блока "Вывести графики се-чений"
2.2 Описание общего алгоритма работы программы
Рисунок 8 - Блок-схема алгоритма метода покоординатного спуска
Рисунок 9 - Блок-схема алгоритма метода градиентного спуска
Рисунок 10 - Блок-схема алгоритма вывода графиков сечений функции
Псевдокод метода покоординатного спуска
Начало
Временная переменная X = Начальная координата поиска Xn;
Временная переменная Y = Начальная координата поиска Yn;
Цикл-пока |F-F1|>eps
Пересчитать F;
Пересчитать F1;
То Если F<F1
То Уменьшить значение Y;
Иначе Увеличить значение Y;
Всё-Если
Если Вышли за границы поиска
То Вывести сообщение "Нет минимума на данном промежутке" Конец
Всё-Если
Всё-цикл
Уменьшить значение X;
Цикл-пока |F-F1|>eps
Пересчитать F;
Пересчитать F1;
То Если F<F1
То Уменьшить значение X;
Иначе Увеличить значение X;
Всё-Если
Если Вышли за границы поиска
То Вывести сообщение "Нет минимума на данном промежутке" Конец
Всё-Если
Всё-цикл
Конец
Псевдокод метода градиентного спуска
Начало
Временная переменная X = Начальная координата поиска Xn;
Временная переменная Y = Начальная координата поиска Yn;
Пересчитать F;
Пересчитать F1;
Цикл-пока |F-F1|>eps
Вычислить градиент функции;
Если градиент меньше 0
То Уменьшить координаты в направлении антиградиента;
Иначе Увеличить координаты в направлении антиградиента;
Всё-Если
Если Вышли за границы поиска
То Вывести сообщение "Нет минимума на данном промежутке" Конец
Всё-Если
Всё-цикл
Конец
Псевдокод вывода графиков сечений
Начало
Нарисовать оси координат;
Ввести временную переменную Xtemp;
s = false;
Цикл-пока Xtemp<=X2
Если s == false
То Пересчитать F;
Переместиться до текущего значения функции;
s = true;
Иначе Пересчитать F;
Провести линию до текущего значения функции;
Всё-Если
Всё-цикл
s = false;
Ввести временную переменную Ytemp;
Переместиться на график сечения по плоскостью X=0;
Цикл-пока Ytemp<=Y2
Если s == false
То Пересчитать F;
Переместиться до текущего значения функции;
s = true;
Иначе Пересчитать F;
Провести линию до текущего значения функции;
Всё-Если
Всё-цикл
Конец
Далее