Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_10_FIN.doc
Скачиваний:
29
Добавлен:
15.12.2018
Размер:
823.81 Кб
Скачать

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

Рассмотрим все множество последовательных методов для минимизации унимодальных функций. Установлено, что оптимального метода в данном классе не существует. -оптимальным методом (позволяющим сколь угодно близко подойти к минимальной точности) является метод Фибоначчи.

Метод основан на использовании чисел Фибоначчи, которые определяются рекуррентными соотношениями:

Ф 0 = 1; Ф 1 = 1; Ф п = Ф п-2 + Ф п-1 ; (п  2) .

Используя коэффициенты   1,618 и   0,618, характеризующие золотое сечение, по индукции можно показать, что числа Фибоначчи представимы также в виде уравнения Люкаса:

Второе слагаемое в уравнении Люкаса быстро стремится к нулю. Уже при сравнительно небольших п (п = 5, 6) его доля составляет менее одного процента и им можно пренебречь. Следовательно, с высокой точностью при п > 5 можно считать:

Фn n+1 / 2,236.

Число n() необходимых вычислений функции при заданной точности в методе Фибоначчи сокращается за счёт более оптимального выбора последовательности пробных точек. Длина отрезка [a, b] интерпретируется как число Фибоначчи Фп+1, умноженное на масштабный коэффициент C: (b-a)=СФп+1. Затем данное число разбивается пробными точками на числа Фибоначчи более низкого порядка: СФп+1 = СФп + СФп-1 и т.д., пока не будет получен доверительный отрезок [ak, bk] длины bk - ak  , где  - заданная точность. Итоговый доверительный отрезок [ak, bk] интерпретируется как число Фибоначчи Ф1=1, умноженное на масштабный коэффициент С=(b-a)п+1:

(bk - ak )= Ф1 (b-a)/Фп+1 =(b-a)/Фп+1 .

Из соотношений Фn+1 n+2 / 2,236  (b-a)/ = M следует правило приближенного выбора необходимого максимального используемого числа Фибоначчи и величины п: Фп+1 (b-a)/ = М, п = ]log (2,236 (b-a)/)[ - 2.

Поскольку для программной реализации необходимы точные значения чисел Фп, то можно использовать следующие эмпирические формулы, дающие верный результат для п<77 (при этом Ф76  5,52794 1015 ).

1. Вначале вычисляется величина

Затем рассматриваем два случая: (n<46) и (46n<77).

2. n<46. При четных n, меньших 36: Фп := [Р+1], иначе: Фп := [Р] .

3. 46 n < 77. Вначале присваиваем Фп := [Р] .

При n >70 Фп := Фп + 70 - n.

При n>74 дополнительно Фп := Фп +296 - 4n.

4. При n  77 числа Фибоначчи можно определить по основному рекуррентному соотношению, начиная с чисел Ф75 = 3.416.454.622.906.707, Ф76 = 5.527.939.700.884.757.

Метод работает следующим образом.

Предварительные действия (Шаг 0). Рассчитываем масштаб задачи М=(b)/, величины п и чисел Фибоначчи Ф п и Ф п+1, при которых Фп М Фп+1. Начальный доверительный отрезок принимаем равным исходному: а0 = а, b0 = b. Поскольку метод симметричный, то по формулам, содержащим числа Фибоначчи, теоретически достаточно рассчитать только положение на отрезке [а0, b0] первой точки. Вычисление производим по формуле

х1 = а + (b - a) Ф п-1 / Ф п+1 = а + С Ф п-1.

В полученной точке вычисляем значение функции F(х1), переходим к Шагу 1.

Шаги i= 1 (n-1). К их началу известны :

а) доверительный отрезок [ai-1, bi-1] длины i = bi-1 - ai-1 = С Ф п+2i ,

б) пробная точка х, в которой уже найдено значение функции F(х ), отстоящая от ближнего края отрезка [ai-1, bi-1] на расстоянии: i Ф п i/ Ф п+2i .

Расчет новой пробной точки, функции в ней и упорядочение пробных точек и сокращение доверительного отрезка выполняем, как и в методе золотого сечения:

1. Расчет положения новой пробной точки: х = (bi-1 + аi-1) - х, расчет значения функции F(x).

2. Упорядочение пробных точек х, х и значений функции в них:

если (х < х), то { х1 = х; F(x1)=F(x); х2 = х ; F(x2)=F(x) };

иначе { х1 = х ; F(x1)=F(x) ; х2 = х ; F(x2)=F(x) }.

3. Сокращение доверительного отрезка:

а) при F(x1)  F(x2) принимаем: a1 = х1 , х1 = х2 , b1 = b0 ,

б) при F(x1) < F(x2) принимаем: a1 = а0 , х2 = х1 , b1 = х2 .

Характеристики произвольного i-го шага:

а) длина отбрасываемой части отрезка:  i = i-1 Ф п –i / Ф п–i+2 = С Ф п – i+1 ,

б) длина оставшегося доверительного отрезка [a i ,b i]: i = i-1 - i = С Ф п– i+1 .

Шаг n (заключительный). К началу известен :

а) доверительный отрезок [an-1, bn-1] длины n-1 = bn-1 - an-1 = С Ф 2 ,

б) пробная точка х, в которой уже найдено значение функции F(х), отстоящая от ближнего края отрезка [an-1, bn-1] на расстоянии: n-1 Ф 1/ Ф 2 =0, 5 n-1.

Особенностью заключительного шага является то, что известная пробная точка х теоретически лежит точно в средней точке доверительного отрезка [an-1, bn-1]. В силу этого вторую пробную точку нельзя рассчитывать как симметричную х относительно центра [an-1, bn-1], поскольку она совпадёт с х.

Поэтому на последнем Шаге п принимаем:

x1 := x ; F(x1):= F(x); x2 := x1 + ;

где - некоторое малое число, можно принять =0,1.

После вычисления F(х2) производим по обычной схеме анализ F(х1), F(х2) и последнее сокращение доверительного отрезка.

Итоговая длина п доверительного отрезка равна СФ1 +  либо С Ф 1 .

Если число Фп+1 близко к М, то из-за сдвига точки x2 на  длина n может незначительно превысить гарантированную точность  .

Скорость сходимости и точность метода. Учитывая, что на первом шаге функция рассчитывается дважды, получим величину n() для метода Фибоначчи:

n() = ]log (2,236(b-a)/)[-1.

Из этого же уравнения находим зависимость (n) точности от общего числа вычислений функции:

(n)  2,236(b-a)/ п+1=2,236 (b - a) (n+1).

Разделив точность метода золотого сечения  (п) = (b - a) (n-1) на эту величину, получим значение 1/( 2,236 2 )  1,17. Таким образом, при n метод золотого сечения в среднем хуже метода Фибоначчи (при заданном числе вычислений больше длина получаемого доверительного отрезка) приблизительно на 17%.

Замечание. При достаточно больших n, как следует из приближённого уравнения Люкаса, отношение Ф п / Ф п+1 стремится к коэффициенту  = 1/. Следовательно, первая пробная точка метода Фибоначчи х1 = а + (b - a) Ф п-1 / Фп+1 стремится к первой пробной точке х1 метода золотого сечения.

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

Пример 1. Найти минимум функции F(х) = х22х на исходном доверительном отрезке [0,2; 2] по методу Фибоначчи при заданной точности  =0,5.

Решение.

Шаг 0. Предварительные действия. Масштаб задачи М = (b-a)/=3,6. Из соотношений Ф3 =3 < 3,6 < Ф4 =5 следует: n=3, Фп+1 = 5, Фп = 3.

Доверительный отрезок: а0 = а =0,2; b0 = b=2.

Шаг 1. Пробные точки: х2 = а0 + (b0 - a0) Ф п / Ф п+1 = 1,28; х1 = а0 + b0 - х2 = 0,92.

Значения функции: F(x1)=-0,9936; F(x2)=-0,9216. F(x1)< F(x2), поэтому отбрасываем часть отрезка [x2;b0]. Получаем новый отрезок [а1;b1]= [0,2;1,28].

b11 = 1,08 >  = 0,5; продолжаем поиск.

Шаг 2. Границы доверительного отрезка а1=0,2; b1=1,28. Известно значение F(x) = -0,9936 при х=0,92.

Новая пробная точка: х = а1 + b1 - х = 0,56. Значение функции в ней: F(x)= -0,8064.

Так как х < х, то принимаем: х1 = х ; F(x1)=F(x); х2 = х; F(x2)=F(x). Поскольку F(x1)>F(x2), то отбрасываем часть доверительного отрезка, равную [a1;x1].

Получаем новый доверительный отрезок [а2;b2]= [0,56;1,28]. Так как b22=0,72 > ; то продолжаем поиск.

Шаг 3 (заключительный).Границы доверительного интервала а2=0,56; b2=1,28. Известно значение F(x) = -0,9936 при х=0,92.

Новую пробную точку строим сдвигом известной: х = 0,92+0,01=0,93. Значение функции в ней: F(x) = -0,9951.

Поскольку х>х, то полагаем х1; F(x1)=F(x); х2 ; F(x2)=F(x).

Так как F(x1)>F(x2), то отбрасываем часть доверительного отрезка [a;x1]. Получаем итоговый отрезок [а3;b3]= [0,92;1,28]. b33=0,36 < ; поиск завершаем.

Ответ. Выполнено 3 шага при 4 пробных точках. Найден доверительный интервал [а3, b3] = [0,92; 1,28] длины 0,36.

По сравнению с методом золотого сечения число вычислений функции осталось прежним, но сократилась длина итогового доверительного интервала с 0,4248 до 0,36.

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

Вопросы для проверки знаний.

1. Какая числовая последовательность называется числами Фибоначчи ?

2. В каком виде числа Фибоначчи могут быть явно представлены в а) точной и б) приближенной формах ?

3. Как по заданному масштабу задачи определить число итераций п, необходимое для ее решения по методу Фибоначчи ? Какие дополнительные данные помимо п требуются для начала итераций ?

4. Чем отличается первый шаг от последующих в методе Фибоначчи ?

5. Какая особенность заключается в выполнении последнего шага в методе Фибоначчи ?

6. К какому методу стремятся при числе итераций n положения первых пробных точек в методе Фибоначчи ?

Практические задания.

1. Рассчитать величину п и чисел Фибоначчи Фп, Фп+1, удовлетворяющих условию Фп М Фп+1, в следующих случаях:

а) а=2, b=12,  = 0,1;

б) а= -10, b=10,  = 0,2.

2. Решить по методу Фибоначчи задачи 1)-13) из п.10.2.

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