Методы поиска точек экстремума функции на отрезке Пусть дана функция 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) За одну итерацию интервал неопределенности уменьшается в Неточное задание величины на ЭВМ уже при достаточно небольшом количестве итераций может приводить к погрешностям и потере точки минимума, так как она выпадает из интервала неопределенности. Поэтому, вообще говоря, при реализации алгоритма возможность такой ситуации должна быть предусмотрена.