Методы поиска точек экстремума функции на отрезке

advertisement
Методы поиска точек экстремума функции на отрезке
Пусть дана функция f (x), для которой на заданном отрезке [a; b] нужно найти
максимальное значение f max  max f ( x) или минимальное значение f min  min f ( x) и
x[ a ,b ]
x[ a ,b ]
x*
установить, в какой точке это экстремальное значение достигается. Так как задача
нахождения максимума функции f (x), эквивалентна задаче нахождения минимума
функции f _(x) = – f (x), то можно всюду далее предполагать, что решается задача поиска
минимума.
Метод простого перебора
Будем предполагать, что искомый минимум является строгим, то есть f (x) > f (x*) при
всех x ≠ x* , x  [a; b], и других точек локального минимума на отрезке нет.
Предположим также, что точка минимума x* – внутренняя точка отрезка. Зададимся
точностью  , с которой будем приближённо отыскивать x* . Приближённое значение
точки минимума обозначим ~
x , то есть ~
x – это такое число, что
|~
x  x  | 
Простейший способ обнаружить точку x* с точностью  – это перебирать точки xi отрезка
[a; b] с шагом h ≤  начиная с x0 = a , до тех пор, пока не будет выполнено условие
f (xi+1) > f (xi), то есть пока функция не начнёт возрастать после точки минимума. При
этом точка x* может оказаться либо на отрезке [xi-1; xi], либо на отрезке [xi; xi+1] (cм.
следующий чертёж):
x  xi , то в любом из двух случаев будет выполнено неравенство
Если теперь положить ~
|~
x  x  | h   , то есть точка минимума будет найдена с нужной нам точностью. За
x )  f ( x ) . Дополнительного
приближённое значение f нужно теперь взять f ( ~
min
i
вычисления функции при этом не потребуется, поскольку значение f (xi ) уже было
найдено ранее.
Если не предполагать, что локальный минимум на отрезке [a; b] только один и, что точка
минимума – внутренняя точка отрезка, то придётся изменить метод так: вычислять
значения f (xi ) до тех пор, пока точка xi не достигнет правого конца отрезка – точки b на
каждом шаге сравнивать текущее значение f (xi ) с минимальным из предыдущих значений
m заменяя это минимальное значение m на f (xi ) при m > f (xi ). Наконец, вычислить
f (b ) (если точка b не совпадает с последней из точек xi) и также сравнить с минимальным
из предыдущих значений. После этой процедуры m будет приближённо равно f min , а та
точка, в которой получено значение функции, равное m – приближённым значением
~
x точки
минимума x*.
Общая схема методов поиска минимума на отрезке
Теперь мы перейдем к рассмотрению других методов, более общих в том смысле, что
они не требуют условия непрерывности или дифференцируемости. Они просто
предполагают, что по крайней мере в некотором интервале функция f(x) обладает
свойством унимодальности. Функция называется унимодальной на отрезке [a0, b0], если
она монотонно убывает от a0 до некоторого x* из [a0, b0], а затем возрастает до b0. В этом
случае x* соответствует локальному минимуму функции, и он единственный.
Пусть функция f(x) унимодальна на отрезке [a0, b0]. Необходимо найти точку
минимума функции на этом отрезке с заданной точностью ε. Все методы одномерного
поиска базируются на последовательном уменьшении интервала, содержащего точку
минимума. Возьмем внутри отрезка [a0, b0] две точки x1 и x2: a0 < x1 < x2 < b0, и вычислим
значения функции в этих точках. Из свойства унимодальности функции можно сделать
вывод о том, что минимум расположен либо на отрезке [a0, x2], либо на отрезке [x1, b0].
Действительно, если f (x1) < f (x2), то минимум не может находиться на отрезке [x2, b0],
если f (x1) > f (x2), минимум не может находиться на отрезке [a0, x1]. Если же f (x1) = f (x2),
то минимум находится на интервале [x1, x2].
Алгоритм заканчивается, когда длина интервала, содержащего минимум, становится
меньше ε.
Метод золотого сечения
Точки x1, x2 находятся симметрично относительно середины отрезка [a0, b0] и делят
его в пропорции золотого сечения, когда длина всего отрезка относится к длине большей
его части также, как длина большей части относится к длине меньшей части:
и
.
Отсюда:
5 1
 1.618... раз, но
2
на следующей итерации мы будем вычислять функцию только один раз, так как по
x  x1
b  x2
свойству золотого сечения 2
 0.381... и
 0.618... . Для достижения точности
b  x1
b  x1
ln(( b0  a0 ) / 2)
ε потребуется n 
итераций.
ln(( 5  1) / 2)
За одну итерацию интервал неопределенности уменьшается в
Неточное задание величины
на ЭВМ уже при достаточно небольшом количестве
итераций может приводить к погрешностям и потере точки минимума, так как она
выпадает из интервала неопределенности. Поэтому, вообще говоря, при реализации
алгоритма возможность такой ситуации должна быть предусмотрена.
Download