Практика оптимизации
Функции пакета Optimization Toolbox
Пакет имеет 19 функций, реализующих все его возможности. Функции пакета разделяются на пять групп:
- • функции минимизации;
- • решения уравнений;
- • реализации метода наименьших квадратов (подбора кривых);
- • утилиты;
- • демонстрационные.
Подробная запись функций с расшифровкой обозначений ниже дана только для функций минимизации, для других функций она аналогична. В приведенных примерах дополнительные комментарии при выводе, как правило, опущены. Примеры даны для новейших версий MATLAB 6.5 SP1/7 и пакета Optimization Toolbox 2.3. В других версиях возможны расхождения в пределах машинной точности вычислений.
Решение задач максимизации
Функции пакета fminbnd, fminsearch, fminunc, fmincon, fgoalattain, fminimax, Isqcurvefit и Isqnonlin решают задачу минимизации целевой функции Дх). Максимизация достигается, если решать задачу минимизации для целевой функции, взятой со знаком «минус», то есть —Дх). Аналогичный результат достигается в задачах линейного и квадратичного программирования: там со знаком «минус» необходимо применять матрицу Н и вектор f (то есть использовать -Н и -/).
Приведение ограничений-неравенств к стандартному виду
В пакете Optimization Toolbox предполагается некоторая стандартная форма записи ограничений-неравенств: с;(х) <0.
Неравенства иного вида должны быть приведены к данному (умножением обеих частей на — I, переносом констант в левую часть и т. п.), например:
ц(х) > 0 —> -с,(х) < 0,
с,(х) > b —> -с,(х) + b < 0.
Введение дополнительных аргументов
В списке аргументов рассмотренных функций пакета могут присутствовать дополнительные, обозначенные через Pl, Р2 и т. д., например:
[x,fval] = fsolve ('obj fun', хО, options, Pl, Р2,...)
Эти дополнительные аргументы выполняют роль глобальных переменных для вызываемых целевых функций.
Пусть, например, требуется найти нули эллиптической функции Якоби el-lip j (u,m). Данная функция зависит от аргумента и и параметра ш (указываемого как второй аргумент). Поиск ее нуля вблизи значения и0 = 3 и при т = 0.5 может быть организован следующим образом:
>> m = 0.5;
>> options = optimset('Displayoff'); % Отключение вывода текущей информации
» х = fsolve('ellipj3,options,m) % Поиск решения
x =
3.7081
Легко убедиться в том, что найденное решение корректное:
>> f = ellipj(x,m) f =
-3.0042e-008
то есть оно действительно является нулем рассматриваемой функции.
Следующий пример относится к использованию функции fgoalattain:
» fun = inline('sort(eig(А+В*х*С)) ', 'х','А’, 1В','С 1); %
Задание целевой функции
» х = fgoalattain (fun, -ones(2,2), [-5,-3,-1], [5, 3, 1],...
[ ], [ ], [ ], [ ], -4*ones(2), 4*ones(2), [ ], [ ] , А, В, C) ;
% Поиск решения