И другие программы этой серии
Пример:
>> options=optimset(\'tolX\',1.e-10);... [x]=fminbnd(@cos,3,4,options) x = 3.1416
8.4.2. Минимизация функций ряда переменных симплекс-методом
Значительно сложнее задача минимизации функций нескольких переменных f(x1, x2, …). При этом значения переменных представляются вектором x, причем начальные значения задаются вектором x0. Для минимизации функций ряда пере-
менных MATLAB обычно использует разновидности симплекс-метода Нелдера-Мида [59–64].
Этот метод является одним из лучших прямых методов минимизации функций ряда переменных, не требующим вычисления градиента или производных функции. Он сводится к построению симплекса в n-мерном пространстве, заданного n+1 вершиной. В двумерном пространстве симплекс является треугольником, а в трехмерном – пирамидой. На каждом шаге итераций выбирается новая точка решения внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса. Ближайшая к этой точке вершина симплекса обычно заменяется этой точкой. Таким образом, симплекс перестраивается и обычно позволяет найти новое, более точное положение точки решения. Решение повторяется, пока размеры симплекса по всем переменным не станут меньше заданной погрешности решения.
Реализующая симплекс-методы Нелдера-Мида функция записывается в виде:
• fminsearch(fun,x0) возвращает вектор x, который является локальным минимумом функции fun(x) вблизи õ0. x0 может быть скаляром, вектором (отрезком при минимизации функции одной переменной) или матрицей (для функции нескольких переменных);
• fminsearch(fun,x0,options) аналогична описанной выше функции, но использует вектор параметровoptions точно так же, как функция fminbnd;
• fminsearch(fun,x0,options,P1,P2,…) сходна с описанной выше функцией, но передает в минимизируемую функцию нескольких переменных fun(x,P1,P2,…) ее дополнительные аргументы P1,P2,…. Если требуется использовать параметры вычислений по умолчанию, то вместо options перед P1,P2 необходимо ввести [ ];
• [x,fval] = fminsearch(…)дополнительно возвращает значение целевой функции fval в точке минимума;
• [x,fval,exitflag] = fminsearch(…) дополнительно возвращает параметр exitflag, положительный, если процесс итераций сходится с использованием options.tolX, отрицательный, если итерационный процесс не сходится к полученному решению x, и 0, если превышено максимальное число итераций options.maxiter;
• [x,fval,exitflag,output] = fminsearch(...) возвращает структуру (запись) output;
• output.algorithm – использованный алгоритм;
• output.funcCount – число оценок целевой функции;
• output.iterations – число проведенных итераций.
Пользователям, имеющим опыт работы со старыми версиями MATLAB, следует учитывать различия в именах функций минимизации.
Начало в части 1