Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №9.doc
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
138.75 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра САПР

ОТЧЕТ

по лабораторной работе №9

«Исследование методов безусловной оптимизации нулевого порядка»

вариант № 7

факультет КТИ

группа 3371

студенты:

Артемьев Ю.

Власюк А.

преподаватель: Муранов И.

Санкт-Петербург 2006

Содержание:

1) Цель работы ……………………………………………………….3

2) Описание метода оптимизации…………………………………...3

3) Спецификация программы………………………………………..4

4) Спецификация функций…………………………………………..5

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

6) Ответы на контрольные вопросы………………………………....7

7)Текст программы…………………………………………………...9

8) Вывод…………………………………………… ………………..16

Цель работы и требования задания

Цель работы– исследование прямых методов многомерной минимизации при помощи метода Зангвилла.

Функции: f1(x) = (x1 – 2)4 + (x1 – 2x2 )2

f2(x)=[1.5 - x1(1 – x2)]2 + [2.25 - x1(1 – x22)]2 + [2.625 - x1(1 – x23)]2

Описание метода оптимизации

Основная стратегия метода базируется на свойстве квадратичных функций, называемом свойством параллельного подпространства. Если xk + 1 – точка минимума квадратичной функции, полученная в результате серии одномерных поисков из начальной точки x1 по всем направлениям системы k = {pi}, i = 1, 2, ..., k, а zk + 1 – точка минимума этой же функции вдоль тех же направлений k, но из другой начальной точки z1, то вектор pk + 1 = = zk + 1 – xk + 1 сопряжен со всеми направлениями системы k.

Начальный этап. Задать начальную точку x1, константу . Положить p1 = –grad y(x1), k = 1.

Основной этап.

Шаг 1. Оптимальный поиск точки xk + 1 = xk + kpk. Если k = n, то перейти к шагу 4.

Шаг 2. Перейти в другую начальную точку z1 = xk + 1 + *d, где d = = –grad y(xk + 1) – новое поисковое направление, * – оптимальное решение задачи минимизации y(xk + 1 + d). Положить i = 1.

Шаг 3. Проверить критерий окончания поиска и, если он не выполняется, осуществить спуск вдоль направлений k в точку zk + 1:

(1) если grad y(zi) ≤ , то остановиться: x* = zi – искомый минимум;

(2) найти оптимальный шаг i в точку zi + 1 = zi + pi;

(3) если i < n, то положить i = + 1 и вернуться к операции (2); иначе – построить новое сопряженное направление pk + 1 = zk + 1 – xk + 1, положить k = = k + 1 и перейти к шагу 1.

Шаг 4. Установить новые начальные условия для очередной итерации:

(1) взять xn + 1 за новую начальную точку x1 = xn + 1, принять p1 = = –grad y(x1);

(2) положить k = + 1 и перейти к шагу 1.

Спецификация программы.

Программа минимизирует заданную функцию методом проекций Заутендийка.

Глобальные переменные:

class vec //Класс вектор

{

public:

vec(inti1 = 5); //Конструктор

~vec(); //Деструктор

int Vn; //Размерность вектора

double *x;

vec operator +(const vec &x); //Сложение векторов

vec operator -(const vec &x); //Вычитание векторов

void operator =(const vec &x); //Операция присваивания

vecoperator*(doublea); //Умножение вектора на скаляр

vecoperator/(doublea); //Деление вектора на скаляр

vecoperator/(vecx); //Поэлементное деление векторов

doubleoperator*(constvec&x); //Скалярное произведение векторов

};

class matrix //Класс матриц

{

public:

int Mn;//Размерность матрицы

vec *M;

matrix(int i1 = 5);

~matrix();

vecoperator*(constvec&x); //Произведение матрицы и вектора

matrix operator *(double a); //Умножение матрицы на скаляр

matrix operator +(const matrix &A); //Сложение матриц

matrix operator -(const matrix &A); //Вычитание матриц

matrixoperator/(doublea); //Поэлементное деление матрицы на число

matrixTr(void); //Транспонирование матрицы

};

intiCount; //Число переменных в функции

intiFunction; //Номер минимизируемой функции

int iIteration; //Счетчик числа итераций

double alfa[3]={0,0,0}; //Массив для хранения коэффициента «а»:x2=x1+a*p;