Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
wiski.docx
Скачиваний:
62
Добавлен:
20.09.2019
Размер:
911.24 Кб
Скачать

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

Определение 1: Функцию f(x) назовем унимодальной на отрезке [a, b], если она непрерывна на отрезке [a, b] и существуют такие числа , (a ≤  ≤ ≤ b) такие, что

1) f(x) строго монотонно убывает при a ≤ x ≤  (если a < );

2) f(x) строго монотонно возрастает при  ≤ x ≤ b (если < b);

3) f(x) = при  ≤ x ≤ , так что X* = [, ]

Случаи, когда один или два из отрезков [a, ], [, ], [, b] вырождаются в точку, здесь не исключаются.

В частности, если =, то функцию f(x) называют строго унимодальной на отрезке [a, b].

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

Как известно, золотым сечением отрезка называется деление отрезка на две неравные части так, что отношение длины всего отрезка к длине большей части равнялось отношению длины большей части к длине меньшей части отрезка. Если взять за единицу длину всего отрезка, а за t обозначить длину большего отрезка, тогда (1-t) – будет длиной малого отрезка. Тогда это отношение (золотое сечение) находится из следующего уравнения

,

Таким образом, t2 + t - 1 = 0, откуда t1 = (-1 + 5)/2 = 0,618033989. Отрицательный корень t2 = (-1 - 5)/2 этого уравнения не подходит в качестве золотого сечения.

Легко проверить, что золотое сечение отрезка [a, b] производится двумя точками x1 = a+(3-5)*(b-a)/2 = a+(b-a)*0,381966011 и x2 = a+(-1+5)*(b-a)/2 = a+(b-a)*0,61803989, расположенными симметрично относительно середины отрезка, причём a<x1<x2<b.

В результате анализа двух рассмотренных значений функции будет определен тот интервал, который должен исследоваться в дальнейшем. Этот интервал будет содержать одну из предыдущих точек и следующую точку, помещаемую симметрично ей. Первая точка находится на расстоянии (b-a)0,381966011 от одного конца интервала, вторая — на таком же расстоянии от другого. Далее х1 и х2 будем обозначать через u1 и u2, соответственно.

Замечательно здесь то, что точка u1 в свою очередь производит золотое сечение отрезка [а, u2], так как u2 - u1 < u1 - а = b - u2 и (u2 - а)/(u1 - a) = (u1 - а)/(u2 – u1). Аналогично точка u2 производит золотое сечение отрезка [u1, b]. Опираясь на это свойство золотого сечения, можно предложить следующий метод минимизации унимодальной функции f(u) на отрезке [a, b].

Положим a1 = a, b1 = b. На отрезке [а1, b1] возьмем точки u1, u2, производящие золотое сечение, и вычислим значения f(u1), f(u2). Далее, если f(u1)≤f(u2), то примем a2= u1, b2 = u2, = u1; если же f(u1)>f(u2), то примем а2=u1, b2 = b1, = u2. Поскольку функция f(u) унимодальна на [а, b], то отрезок [а2, b2] имеет хотя бы одну общую точку с множеством U* точек минимума f(u) на [a, b]. Кроме того, b22 = (5- 1) (b-а)/2 и весьма важно то, что внутри [a2, b2] содержится точка с вычисленным значением f( ) = min{f(u1); f(u2)}, которая производит золотое сечение отрезка [a2, b2].

Пусть уже определены точки u1, ..., un-1, вычислены значения f(u1), ..., f(un-1), и найден отрезок [аn-1, bn-1] такой, что

n-1, bn-1]U* ≠, bn-1-an-1=((5-l)/2)n-2*(b-a), и известна точка , производящая золотое сечение отрезка [аn-1, bn-1] и такая, что f( ) = (n2). Тогда в качестве следующей точки возьмем точку un = аn + bn-1 - , также производящую золотое сечение отрезка [an-1, bn-1], вычислим значение f(un).

Пусть для определенности an-1 <un< < bn-1 (случай < un рассматривается аналогично). Если f(un)f( ), то полагаем an = an-1, bn = , = un, если же f(un) >f( ), то полагаем an = un, bn = bn-1, = . Новый отрезок [an, bn] таков, что [an, bn]U* ≠ , bn-an = ((5 -1)/2)n-1*(b-а), точка производит золотое сечение [an, bn]„| и f( ) = min{f(un); f( )}= .

Если число вычислений значений f(x) заранее не ограничено, то описанный процесс можно продолжать, например, до тех пор, пока не выполнится неравенство bnn<, гдо  — заданная точность. Если же число вычислений значений функции f(x) заранее жестко задано и равно n, то процесс на этом заканчивается и в качестве решения задачи второго типа можно принять пару (f( ), ), где f( ) является приближением для f* = , а точка служит приближенном для множества U* с некоторой погрешностью.

Алгоритм поиска точки минимума по методу золотого сечения.

Шаг 1. Полагаем k=0, ak = a0 = 0, bk = b0 = 10,  = 0,1.

Шаг 2. Полагаем k = bk – ak.

Шаг 3. Если k <, то перейти в шагу 6, иначе перейти к следующему шагу 4.

Шаг 4. Положим

u1 = ak + (bk - ak)0,381966011,

u2 = ak + (bk - ak)0,61803989.

Вычислим f(u1) и f(u2).

Шаг 5. Если f(u1)<f(u2), то полагаем

ak+1 = ak, bk+1 = u2, а также полагаем k:=k+1 и перейдем к шагу 2,

в противном случае (иначе) полагаем

ak+1 = u1, bk+1 = bk,

а также полагаем k:=k+1 и переходим к шагу 2.

Примечание 1. Отметим, что k = bk – ak.= (0,61803989)k0.

Шаг 6. Положим f(x*) = min{f(u1), f(u2)} и x* = arg min{f(u1), f(u2)}.

Примечание 2. Можно показать, что в случае если f(u1)<f(u2) величина u2 на следующем (k+1)-ом шаге совпадет с u1 на данном k-ом шаге, а в противном случае наоборот величина u1 на следующем (k+1)-ом шаге совпадет с u2 на данном k-ом шаге. Это означает, что на каждой итерации метода золотого сечения нам достаточно вычислять одно, а не два значения f(u).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]