Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

23.2. Методы нахождения минимума функции одной переменной

Задача нахождения минимума функции одной переменной min/(x) не­редко возникает в практических приложениях. Кроме того, многие методы решения задачи минимизации функции многих переменных сводятся к мно­гократному поиску одномерного минимума. Поэтому разработка новых, бо­лее эффективных одномерных методов оптимизации продолжается и сейчас, несмотря на кажущуюся простоту задачи.

Примечание. В дальнейшем, если не будет особо оговорено, под мини­мумом функции будет подразумеваться локальный минимум.

Нахождение минимума функции осуществляется в два этапа:

1. Приближенное определение местоположения минимума.

2. Вычисление точки минимума xmin c заданной точностью s одним из нижеприведенных методов.

На первом этапе, задав некоторую начальную точку x °, спускаются с заданным шагом h в направлении уменьшения функции и устанавливают ин­тервал длиной 2h, на котором находится минимум, из условия f ( xm - h ) < f ( xm ) < f ( xm + h ). Для функции, изображенной на рис. 23.1, если A < x ° < x g , будет выделен интервал [a,b] с локальным минимумом x min 1, а если xg < x ° < B - с глобальным минимумом x min 2, т. е. тот, в области «притяжения» кото­рого оказалась начальная точка x °.

Если на отрезке [a,b] функция f ( x ) унимодальна, т. е. она имеет на этом отрезке единственную точку минимума x min и слева от этой точки явля­ется строго убывающей, а справа - строго возрастающей, то для вычисления точки минимума с заданной точностью могут использоваться нижеприведен­ные методы:

23.2.1. Метод деления отрезка пополам

Задаются a, b и погрешность s. Вычисляются две точки вблизи середи­ны интервала [a, b]:

  1. x1 = (a + b - s) / 2, x2 = (a + b + s) / 2.

  2. Если f ( x 1 ) > f ( x 2 ), то a = x 1, иначе b = x 2.

  3. Если | b - a | > 2s, тогда повторяем с п.1.

4. Вычисляем xmin = (a + b)/2, JW = f(Xmm ).

Этот метод прост в реализации, позволяет находить минимум разрыв­ной функции, однако требует большого числа вычислений функции для обес­печения заданной точности.

23.2.2. Метод золотого сечения

Золотое сечение - это такое деление отрезка [a, b] на две неравные час­ти при котором отношение большего отрезка ко всему интервалу равно от­ношению меньшего отрезка к большему. При этом имеет место следующее соотношение:

(b - x1)/(b - a) = (x1 - a)/(b - x1) = 1- £ = 0.618, £ = (3 - V5)/2 = 0.382.

О точке, которая расположена на расстоянии £ длины от одного из кон­цов отрезка, говорят, что она осуществляет золотое сечение данного отрезка. Каждый отрезок имеет две такие точки, расположенные симметрично относи­тельно середины. Алгоритм поиска минимума аналогичен вышеописанному методу деления пополам и отличается тем, что вначале точки x1 и x2 выби-

У

раются так, чтобы они осуществляли золотое сечение отрезка, и вычисля­ются значения функции в этих точках. В последующем, после сокращения интервала путем отбрасывания небла­гоприятной крайней точки, на остав­шемся отрезке уже имеется точка, делящая его в золотом отношении, ( точка xj на рис. 23.2 ) известно и зна­чение функции в этой точке. Остается лишь выбрать ей симметричную и вычислить значение функции в этой точке для того, чтобы вновь решить, какую из крайних точек отбросить.

f(xi).

Алгоритм метода:

Задаются a, b и погрешность s.

1. Вычисляются две точки

x1 = а + £(b - ci\ x2 = b -£(Ъ - ci\ yi = f Д y2 = f(x2) .

2. Если yj > y2, то a = xj, xj = x2, yi = У2, x2 = b - £ (b-a); У2 = f(x2), иначе b = x2, x2 = xj, y2 = yi, xj = a + £ (b-a),

  1. Если | b - a\ > 2s, то повторить п.2.

  2. Если yj > y2, то a = xj, иначе b = x2,

5. Вычисляется xmm = (a + b)/2, ymm = f (xmin).

yj =

За одно вычисление функции отрезок, на котором находится xmin,

уменьшается в j-£ =0.62 раза, т.е. быстрее, чем метод деления пополам, в ко­тором за два вычисления функции отрезок уменьшается в 0,5 раза.

23.2.3. Метод Фибоначи

На практике количество вычислений значений функции часто бывает ограничено некоторым числом n ( тем самым ограничено и число шагов вы­числений по методу золотого сечения; оно не превышает n-1 ). Метод Фибо­наччи отличается от метода золотого сечения лишь выбором первых двух симметричных точек и формул их пересчета и гарантирует более точное при­ближение к точке x min за n -1 шаг, чем метод золотого сечения за то же коли­чество шагов. Согласно методу Фибоначи, на нулевом шаге первые две сим­метричные точки вычисляют по формулам xi0 = ао + F n ( bo - ao ) / Fn+2 ,

X20 = bo - F n ( bo - ao ) / Fn+2 = ao + F n + 1 ( bo - ao ) / Fn+2 ,

где F n , F n + 1 , F n + 2 - числа Фибоначи , определяемые рекурентной формулой

F k = F k - 1 + F k - 2 , k=3, 4, ... ; F 1 = F 2 = 1 Запишем первые десять чисел Фибоначи :

F1 =1, F2 =1, F3 =2, F4 = 3, F5 =5, F6 =8, F7 =13, F8 =21, F9 =34, F10

=55.

В последующем, после сокращения интервала путем отбрасывания не­благоприятной крайней точки, одна из точек пересчитывается по одной из со­ответствующих формул

k x1k = ak + F n - k ( b0 - a0 ) / Fn + 2 , x2k = ak + F n + 1 - k ( b0 - a0 ) / Fn + 2 ,

Выполняется n - 2 шага, при k = 1, 2, ... , n - 2, после чего отбрасывается крайняя неблагоприятная точка и вычисляется точка минимума x min = ( a n - 1 + b n - 1) / 2. Погрешность вычисления точки минимума не превышает (b0 - ao) / (2F n + 2), т. е. за три вычисления функции получают точку минимума с по­грешностью не превышающей 1 / 10 первоначального интервала , пять вы­числений - 1 / 26, восемь - 1 / 110.

Т lim Fn / Fn+2 = (3 -V5)/2, б

Т.к. n 2 то, при достаточно больших n, вычисле-

П — GO

ния по методу Фибоначи и золотого сечения начинаются практически из од­ной и той же пары симметричных точек.

Алгоритм метода:

Задаются a, b, число вычислений функции n.

1. Вычисляются d = ( b-a ) / Fn+2 и две точки

x1 = a + Fnd, x2 = a + Fn+1d, J1 = f (x1 X У2 = f (x2 ) .

2. Если yi > y2 , то a = xi, xi = x2, У1 = У2, x2 = a + Fn - k d; У2 =f(x2), иначе b = x2, x2 = xi, У2 = У1, xi = a + Fn - k +1 d, yi =f(xi).

п.2 повторяется n-2 раза, при k = 1, 2, ... , n-2.

3. Если У1 > У2 , то a = xi, иначе b = x2

4. Вычисляется xmin = (a + b)/2, JW = f (xmin) .

23.2.4. Метод последовательного перебора

Этот метод не требует предварительного определения местоположения точки минимума. Идея метода состоит в том, что, спускаясь из точки x0 с за­данным шагом h в направлении уменьшения функции, устанавливают интер­вал длиной 2h, на котором находится минимум, который затем последова­тельно уточняют, повторяя спуск с последней точки, уменьшив шаг и изме­нив его знак, пока не будет достигнута заданная точность. Алгоритм метода приведен ниже.

Задаются x0, некоторый шаг h и погрешность s .

1. Вычисляем yo = f (xo)

2. Определяем направление убывания функции. Если f (xo+sh) > yo, то h = -h.

  1. Из точки x0 делается шаг x1=x0+h и вычисляются y1 = f (x1).

  2. Если y1 < y0, то x0 = x1, y0 = y1, и повторить с п.3

5. h = - h / 4. В точке x1 функция оказалась большей, чем в x0, следова- тельно, мы перешагнули точку минимума и организуем спуск в обратном на- правлении.

6. Если | h | > s, тогда повторить с п.3

7. xmin = xo, fmin = f.

Скорость сходимости данного метода существенно зависит от удачного выбора начального приближения x0 и шага h. Шаг h следует выбирать как по­ловину оценки расстояния от x0 до предполагаемого минимума xmfn.

23.2.5. Метод квадратичной параболы

Для ускорения спуска к минимуму из некоторой точки x0 используют локальные свойства функции вблизи этой точки. Так, скорость и направление убывания можно определить по величине и знаку первой производной. Вто­рая производная характеризует направление выпуклости: если f">0, то функ­ция имеет выпуклость вниз, иначе - вверх. Вблизи локального безусловного минимума дважды дифференцируемая функция всегда выпукла вниз. Поэто­му, если вблизи точки минимума функцию аппроксимировать квадратичной параболой, то она будет иметь минимум. Это свойство и используется в ме­тоде квадратичной параболы, суть которого в следующем.

Вблизи точки x0 выбираются три точки xj, x2, x3. Вычисляются значения y1, y2, y3. Через эти точки проводится квадратичная парабола

p( x - x3) + q( x - x3) + r = pz + qz + r,

z — x x3, z1 — x1 x3, z2 — x2 x3, r — y 3, (23.1)

p = (y1 - y3) z2 - (y2 - y3) z1 q = (y1 - y3) z2 - (y2 - y3) z12

z1z2(z1-z2) z1z2(z2-z1)

Если p>0, то парабола имеет минимум в точке zm = -b/(2a). Следова­тельно, можно аппроксимировать положение минимума функции значением xm1 = x3 + zm и, если точность не достигнута, следующий спуск производить, используя эту новую точку и две предыдущие. Получается последователь­ность xm1, xm2, xm3, ... , сходящаяся к точке xm.

Алгоритм метода можно записать следующим образом Задается x0, h и s.

1.Выбираем 3 точки: x1=xo-h,x2=xo-h,x3=xo+h, 2. Вычисляем y1 = f (x1), y2 = f (x2), y3 = f (. 3.Проверяем положительность знака второй производной:

h2f'' = y1 - 2y2 + y3 > 0 (см. п. (4.7)), если нет, то начальное приближение

x0 выбрано неудачно (в x0 имеется выпуклость вверх) и следует закончить вы­числения с таким сообщением, если да, то переходим к п.4.

4. Вычисляем z, z1, z2, p, q, r, zm по вышеприведенным формулам

(23.1).

5. Переименовываем точки, отбрасывая точку x1:

6. Проверяем |zm | < s, если нет, то повторяем с п.4.

xm = x3 + zm, ym = f (xm X конец.

Данный метод сходится очень быстро и является одним из наилучших методов спуска. Следует отметить, однако, что вблизи минимума расчет по приведенным здесь формулам для p и q приводит к накоплению погрешности из-за потери значащих цифр при вычитании близких чисел. Поэтому разные авторы предлагают свои эквивалентные формулы, счет по которым более ус­тойчив. Кроме того, в алгоритм вносятся некоторые поправки, позволяющие предусмотреть различные неприятные ситуации - переполнение, деление на 0, уход от корня.

23.2.6. Метод кубической параболы

Данный метод аналогичен предыдущему, но за счет использования ап­проксимации кубической параболой имеет более высокую сходимость, если функция допускает простое вычисление производной. При его использовании вблизи точки x0 выбираются две точки xi и x2 (обычно x1 = x0), вычисляются

значения функции y1, y2 и ее производной D1 = f(x1), D2 = f'(x2). Затем че­рез эти точки проводится кубическая парабола, коэффициенты которой опре­деляются таким образом, чтобы совпадали значения производных параболы и функции:

p(x - x2) + q( x - x2) + r (x - x2) + s = pz + qz + rz + s = P( z),

z=x-x2,z1=x1-x2,

P(0) = У2, P(0) = D2, P(z1) = У1, P'(z1) = Д.

Как нетрудно убедиться, коэффициенты параболы вычисляются по сле­дующим формулам: s = У2, r = D2,

p = (D1 - D2 - 2(y1 - y2 - D2 ■ z1)/z1)z2, q = (D2 - D1 + 3(y1 - y2 - D2 ^ z1)/z1)/z1.'


Поэтому приближенное положение минимума можно получить по фор­муле xm1=x2+zm и, если точность не достигнута, следующий спуск произво-


Известно, что кубическая парабола имеет минимум в точке дить уже из точек x2, xm1 (точка xj отбрасывается). Если подкоренное выра­жение окажется отрицательным, то спуск следует производить до точки пере­гиба параболы zm1 = -q /3p . Следует также убедиться, что в начальной точке

a, D2 - D _ функция вогнута вниз — -- > o.

Алгоритм метода можно записать следующим образом. Задаются начальное значение x0, некоторый малый шаг h и s.

  1. Вычисляем x1 = xo, D1 = f'(x1).

  2. Если D1 > o, то изменяем знак h (h=-h).

  3. Вычисляем x2 = x1 + h, D2 = f'(x2).

  4. Если (D2 - D1)/ h < o, функция вогнута вверх, тогда x0 выбрана не­удачно и следует закончить вычисления с этим сообщением.

  5. Вычисляем y = f (x1), y2 = f (.

  6. Вычисляем zj, p, q, r, zm по вышеприведенным формулам.

7. x1 = x2, y1 = y2^ D1 = D2, x2 = x2 + zm, y2 = f (X2), D2 = f '(x).

8. Проверяем |zm| < s, если нет, тогда повторяем п.6.

9. xm = x2 + Zm, ym = f (xm ^ конец.

Следует отметить, что вблизи точки минимума расчет по приведенным здесь простейшим формулам для p, q не всегда устойчив из-за ошибок округ­ления, поэтому различные авторы рекомендуют использовать несколько пре­образованные формулы.

ЛЕКЦИЯ 24. РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ