Лабы / Лаб 6 Многомерная оптимизация
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет Радиотехнологий связи
Учебная дисциплина «Прикладные методы оптимизации в радиотехнических системах»
ОТЧЁТ
Тема: «Методы многомерной феминизации»
Выполнили:
Приняла:
Санкт-Петербург
2023
Цель: ознакомление с методами поиска минимума функции двух переменных в оптимизационных задачах без ограничений (метод Гаусса-Зейделя, метод наискорейшего спуска, методы сопряженных направлений).
Блок-схемы алгоритмов:
Метод Гаусса-Зейделя (пошагового спуска)
Метод сопряженных направлений (Пауэлла)
Метод наискорейшего спуска (Коши)
Льное
Задание №2: Коды в MATLAB и графики
Метод Гаусса-Зейделя:
script
clear; clc;
% Значения коэффициентов
A= 30;
a = 2;
b = 3;
g = 15; % постоянная шага
e = 0.01; % точность
% Начальная точка
x0 = 9;
y0 = 9;
k = 1; % Счетчик шагов
kmax = 100; % Предельное число шагов,
% задается для предотвращения зацикливания
% Массивы для хранения промежуточных координат
x1t = [x0];
x2t = [y0];
i = 2;
while k < kmax
% Спуск по первой координате
% градиент по х
gr1 = -(a-x0)*exp(a-x0)-(b-y0)*exp(b-x0)-exp(a-x0);
x0 = x0 + g*gr1;
% Сохранение координат
x1t(i) = x0;
x2t(i) = y0;
i = i + 1;
% Спуск по второй координате
% градиент по у
gr2 = -exp(b-x0);
y0 = y0 + g*gr2;
% Сохранение координат
x1t(i) = x0;
x2t(i) = y0;
i = i + 1;
% Проверка условия останова
if sqrt(gr1^2 + gr2^2) <= e
break; % Выход из цикла в случае выполнения условия
end
k = k + 1;
end
% Построение графика
x = 7:0.1:12;
y = 7:0.1:12;
[X, Y] = meshgrid(x, y);
Z = A-(X-a)*exp(-(X-a))-(Y-b)*exp(-(X-b));
[C, h] = contour(X, Y, Z);
clabel(C, h);
% Отображение меток на линиях уровня
hold on;
plot(x1t, x2t, '-');
% Вывод начальной точки на график
text(x1t(1) + 0.2, x2t(1) + 0.5, 'M0');
% Вывод решения на график
text(x0 + 2, y0, ...
strvcat(['x = ' (num2str(x0))], ...
['y = ' (num2str(y0))], ...
['k = ' (num2str(k))]));
Точность и число итераций при различных начальных точках:
(9;9)
(7,5;7,5)
(8;8)
Метод наискорейшего спуска
clc;
clear;
A= 30;
a = 2;
b = 3;
e=0.01;
d = 15;
x1=9;
x2=9;
k=1;
kmax=50;
x1trace = [x1];
x2trace = [x2];
i = 2;
while k < kmax
gr1 = -(a-x1)*exp(a-x1)-(b-x2)*exp(b-x1)-exp(a-x1);
gr2 = -exp(b-x1);
x1 = x1 + d*gr1;
x2 = x2 + d*gr2;
x1trace(i) = x1;
x2trace(i) = x2;
i = i + 1;
if sqrt(gr1^2 + gr2^2) <= e
break;
end
k = k + 1;
end
x = 7.5:0.01:11;
y = 7.5:0.01:11;
[X, Y] = meshgrid(x, y);
Z = A-(X-a).*exp(-(X-a))-(Y-b).*exp(-(X-b));
[C, h] = contour(X, Y, Z);
clabel(C, h)
hold on;
plot(x1trace, x2trace,'-+');
text(x1trace(1) + 0, x2trace(1) + 0.1, 'M0');
text(x1 + 0.5, x2, ...
strvcat(['x1 = ' (num2str(x1))], ...
['x2 = ' (num2str(x2))], ...
['k = ' (num2str(k))]));
(9;9):
(7,5;7,5)
(8;8)
Вывод:
Были изучены методы Гаусса-Зейделя и наискорейшего спуска (Коши).
Были построены их блок-схемы, разработаны коды для нахождения минимума функций. На практике было установлено, что если выбрать изначальную точку близко к точке минимума, то оба метода будут иметь одинаковое число итераций.