При решении задачи поиска экстремума (максимума или минимума) функции y=f(x) одной переменной выделяют задачи поиска локального и глобального экстремума. При этом задача нахождения максимума целевой функции сводится к задаче нахождения минимума путем замены функции f(x) на -f(x), поэтому в дальнейшем будем говорить только о поиске минимума функции, то есть такого x*Î[a, b], при котором f(x*) = minf(x).
Интервал, на котором локализован единственный минимум, называется отрезком неопределенности .
Необходимым условием существования экстремума дифференцируемой функции f(x) является выполнение равенства f¢(х) = 0. Точка х, удовлетворяющая данному условию, называется точкой стационарности. Достаточным условием существования минимума в точке стационарности является выполнение неравенства f ¢¢(х)>0, а максимума - f¢¢(х)<0.
Задача одномерной оптимизации имеет единственное решение в том случае, если функция f(x) на отрезке [a;b] имеет только один экстремум. Тогда говорят, что функция унимодальна на отрезке [a;b].
Достаточными условиями унимодальной функции на отрезке [a;b] являются:
- для дифференцируемой функции f(x) ее производная f¢(х) - неубывающая;
- для дважды дифференцируемой функции f(x) выполняется неравенство f¢¢(х)³0.
Для решения задачи одномерной оптимизации с заданной степенью точности используются методы: дихотомии, золотого сечения, средней точки и многие другие [1]. При этом суть методов одномерного поиска заключается в том, что на каждой итерации интервал неопределенности уменьшается и стягивается к точке минимума. Уменьшение отрезка происходит до тех пор, пока на некоторой n- й итерации отрезок неопределенности [bn;an] не станет соизмеримым с заданной погрешностью e, то есть будет выполняться условие |bn-an| <e. Тогда за точку минимума можно принять любую точку, принадлежащую этому отрезку, в частности, его середину.
В MatLab поиск локального минимума осуществляет функция fminbnd(), имеющая следующий формат:
[x, y] = fminbnd(name, a, b), где:
name – имя функции, вычисляющей значение f(x);
a, b – границы интервала, на котором осуществляется поиск минимума;
x, y – координаты точки минимума на заданном интервале.
Чтобы с использованием функции Matlab fminbnd() вычислить локальный максимум, необходимо взять целевую функцию с противоположным знаком.
Пример 2.5.1-1. Найти локальный минимум функции .
Решение задачи начнем с построения графика (рис. 2.5.1-1 и 2.5.1-2). Определим отрезок, содержащий точку минимума, исходя из вида графика функции. Если это возможно, то на этом отрезке следует провести полное исследование функции на унимодальность: от функции получить и первую, и вторую производные и показать, что должна быть неубывающей, а .
Рис. 2.5.1-1. Построение графика функции f(x)
Рис. 2.5.9-2. График функции f(x)
Из графика следует, что на отрезках [-4;-3] и [3;5] имеются локальные минимумы. Исследуем функцию и поведение производных, например, на отрезке [3;5 ].
Для вычисления производных используем функцию Matlab diff(), имеющую следующий формат: diff(f, x, n). В качестве параметров этой функции используется:
· F – дифференцируемая функция;
· x – аргумент функции (переменная дифференцирования);
· n – порядок производной.
Получение значений функции и производных на выбранном отрезке приведено на рис. 2.5.1-3.
Рис. 2.5.1-3. Исследование функции f(x) на отрезке [3;5]
Из полученной таблицы значений функции и производных видно, что на отрезке [3;5] существует единственный минимум. Найдем координаты этого минимума с использованием функции Matlab fminbnd() (рис. 2.5.1-4).
Рис. 2.5.1-4. Нахождение координат точки минимума функции f(x)