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

Сравнение с работой надстройки «Поиск решения»

После сравнения работы программы с работой надстройки «Поиск решения» в MSExcel, можно сказать, что программа ищет минимум функции с большей точностью, к тому же эту точность можно корректировать по ходу выполнения программы.

0,999997

1,36E-08

0,999992

0,999955

0,999904

В данной таблице, скопированной из приложения MS Excel, представлен вектор столбец, являющийся искомым минимумом для целевой функции с четырьмя переменными. Справа представлено значение целевой функции, посчитанное приложениемMS Excelв полученной точке предполагаемого минимума.

В процессе работы программы для точности Е = 0,000001 был получен ответ (1, 1, 1, 1)t после 1374 итераций.

Результаты тестирования программы

Для функции f(x1,x2) = (x2-x1x1)(x2-x1x1) + (1-x1)(1-x1):

Метод

Е = 0,00001

Е = 0,000001

Кол-во итераций

Результат

Кол-во итераций

Результат

ЗС-1

49

(0,999995;  0,99999)t

60

(1; 0,999999)t

Пауелл

49

(0,999995;  0,99999)t

60

(1; 0,999999)t

Для функции f(x1,x2,x3) = (x1-1)(x1-1) + (x2-3)(x2-3) + 4(x3+5)(x3+5):

Метод

Е = 0,00001

Е = 0,000001

Кол-во итераций

Результат

Кол-во итераций

Результат

ЗС-1

2

(1; 3; -5)t

2

(1; 3; -5)t

Пауелл

1

(1; 3; -5)t

1

(1; 3; -5)t

Для функции f(x1,x2,x3,x4) = 100(x2-x1x1)^2 + (1-x1)^2 + 90(x4-x3x3)^2 + (1-x3)^3 + 10.1(x2-1)^2+ (x4-1)^2 + 19.8(x2-1)(x4-1):

Метод

Е = 0,00001

Е = 0,000001

Кол-во итераций

Результат

Кол-во итераций

Результат

ЗС-1

1160

(1;1;0.999999;0.999997)t

1374

(1; 1; 1; 1)t

Пауелл

1160

(1;1;0.999999;0.999997)t

1374

(1; 1; 1; 1)t

Ответы на контрольные вопросы

1. Перечислите основные постулаты структурного программирования.

1) Абстракция данных;

2) Разбиение программы на модули;

3) Отказ от команды безусловного перехода, известной также под названием GOTO;

4) Использование подпрограмм.

2. Перечислите основные постулаты объектно-ориентированного программирования.

  1. Инкапсуляция;

  2. Наследование;

  3. Полиморфизм.

3. В чем отличие структурного и объектно-ориентированного подхода при разработке программ?

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

Разбиение программы на модули, соответствует разбиению основной задачи на множество небольших подзадач. Каждый модуль выполняет свою задачу независимо от других, и потому может быть описан и отлажен отдельно. Определяется модуль как фрагмент программы с одним входом и одним выходом, состоящий из операций, "вложенных" модулей и структурных операторов передачи управления.

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

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

Теоретически принцип инкапсуляции применим как к отдельным объектам, так и к классам. В случае классов с методами объединяются не сами данные, а структуры данных, и объединение с конкретными данными происходит в момент создания объектов данного класса. На практике же многие объектно-ориентированные языки просто не позволяют создавать объекты, не создав предварительно класса.

Наследование относится только к классам объектов. Это означает, что каждый объект может иметь наследников, каждый из которых будет обладать всеми полями и методами своего предка. Кроме того, как правило, классы-наследники совместимы по типу со своими предками. Наследование бывает двух видов:

одиночное - когда каждый класс имеет одного и только одного предка;

множественное - когда каждый класс может иметь любое количество предков. 

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

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

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

4. Какие варианты при разработке класса вектора были рассмотрены, каковы достоинства и недостатки каждого из вариантов.

Первоначально был рассмотрен вариант обработки элементов вектора отдельно друг от друга, т.е. предполагалось не объединять координаты вектора в один объект, а пользоваться россыпью переменных, привязываясь к какой-то определенной размерности пространства векторов. Этот вариант был отклонен еще на начальном этапе проектирования. Было очевидно, что для реализации обработки функции с произвольным числом переменных необходимо иметь более гибкую систему переменных, в которых хранить значения координат.

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

В конечном итоге было решено остановиться на следующей реализации: был введен объект вектор, представляющий собой динамический массив заданной длины и информацию об этой длине. Возник класс Vector, реализующий эту идею и предоставляющий возможность использовать всю необходимую информацию о векторе в одном объекте. Очевидно, что данный вариант реализации гораздо удобнее в использовании, созданный класс самодостаточен, в нем есть все необходимое, чтобы реализовать требуемые методы оптимизации целевых функций с любым количеством переменных.

Вывод

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

14

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