Аналитический метод поиска минимума применяется только для ограниченного круга задач. В основном это связано с необходимостью решения системы нелинейных уравнений, которая, как правило, решается численными методами. Гораздо проще решать задачу многомерной оптимизации численными методами, например, такими как метод градиентного спуска с дроблением шага и методы наискорейшего спуска с аналитическим или численным выбором шага.
Вычисление минимума функции нескольких переменных
z = f(x1, x2, …xn)
в Scilab осуществляет той же функцией optim(), что и для функции от одной переменной, но в назначении параметров имеются некоторые отличия. Общий формат функции optim() следующий:
[f,xopt]=optim(costf,x0),
где входными параметрами в случае в случае решения задачи многомерной оптимизации являются:
x0- вектор-столбец начальных приближений длиной n (n – количество параметров оптимизации);
costf– имя функции, для которой ищется минимум.
Функция возвращает значения параметров:
f - минимальное значение функции и xopt - значения параметров оптимизации, при которых функция достигает минимального значения.
Функция optim() требует вспомогательную функцию costf(), имеющую следующую структуру:
function [f,g,ind]=costf(x,ind)
f=gg(x);
g=numderivative(gg,x);
endfunction
где f - функция, минимум которой ищется;
g - градиент функции f (вектор частных производных f по x), определяемый функцией numderivative().
ind- является внутренним параметром для связи между optim и costf.
Если значение ind равно 2, 3 или 4, то функция costf() обеспечивает поиск минимума, т.е. в качестве результата функции optim() возвращается f и xopt. Если ind=1, то в функции optim() ничего не считается. Условие ind<0 означает, что минимум функции не может быть оценен, а ind=0 прерывает оптимизацию. Используя функцию optim() необходимо помнить, что параметр ind должен быть определен в функции costf.
Таким образом, решение задачи оптимизации в пакете Scilab требует дополнить функцию optim() функцией costf, которая возвращает значение минимизируемой функцию f() и ее частных производных.
Чтобы с использованием optim() вычислить локальный максимум необходимо взять целевую функцию с противоположным знаком.
Рассмотрим работу функции optim() на примере определения минимума двумерной функции f(x1, x2) = 100(x2–x12)2+(1-x1)2.
Построим график (рис. 2.6.1-1) с использованием функции surf(), аргументами которой служат: вектор значений первой переменной, вектор значений второй переменной и матрица значений функции.
|
Рис. 2.6.1-1. Результат выполнения функции surf()
Дополним предыдущий график графиком контурных линий (рис. 2.6.1-2.).
|
Рис. 2.6.1-2. График, изображающий контурные линии
Определим координаты точки минимума и значение функции в этой точке с использованием функции Scilab optim()(рис.2.6.1-2).
|
Рис. 2.6.1-3.Использование функции optim() для нахождения координат точки минимума многомерной функции
2.6.2. Лабораторная работа по теме
«Технология решения задач многомерной оптимизации средствами Scilab»
1. Вопросы, подлежащие изучению
Постановка задачи многомерной оптимизации.
Построение графиков функции от двух переменных F(x1,х2)средствами пакета Scilab.
Нахождение координат точки минимум многомерной функции F(x1,х2) с использованием встроенных функций costf() и optim().
2. Общее задание
Изучите материал Темы 2.6 (п. 2.6.1).
Выберите индивидуальное задание из табл. 2.6.2-1.
Постройте график функции F(x1,х2);
Создайте для использования функции optim() вспомогательную функцию costf(), необходимую для вычисления значений целевой функции и её частных производных.
Найдите координаты точки минимум функции F(x1,х2) с использованием встроенной функций optim();
Получите значение функции, значений ее параметров, обеспечивающих оптимальное значение и частных производных в точке минимума.
Сохраните текст рабочего окна на внешнем носителе.
Предоставьте результаты работы преподавателю, ответить на поставленные вопросы.
Оформить отчет по выполненной работе.
Таблицы 2.6.2-1
№ |
Функции для вычисления минимума |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
В форме комментариев:
Название лабораторной работы
ФИО студента, номер группы
№ варианта
Индивидуальное задание
Протокол вычислений (сессии) в Командном окне, снабженный необходимыми комментариями.
Какую функцию называют многомерной?
Что является достаточным условием существования минимума для многомерной функции?
Назначение функции optim(), ее входных и выходных параметров.
Можно ли с использованием функции optim() вычислить локальный максимум?
Назначение функции costf(), ее входные и выходные параметры.
Что служит результатом выполнения функции optim()?
Какие средства Scilab используются для описания целевой функции, и как это влияет на параметры функции optim()?
Назначение функции numderivative() при решении задачи многомерной оптимизации.
Кочегурова Е.А., Особенности системы Scilab для решения задач вычислительной математики, Учебное пособие/ ТПУ, 2013. - 7с.
Андриевский А.Б., Андриевский Б.Р., Капитонов А.А., Фрадков А.Л. Решение инженерных задач в среде Scilab. Учебное пособие/ СПб.: НИУ ИТМО, 2013. - 97с.
Шакин В.Н., Семенова Т.И. Основы работы с математическим пакетом Matlab, Учебное пособие/ МТУСИ, 2016. -133с.