Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы безусловной оптимизации.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7 Мб
Скачать
☆

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

Метод Фибоначчи эффективнее метода дихотомии, так как разбиение отрезка производится таким образом, что на каждой итерации требуется вычислять не два значения f(x1) и f(x2), а лишь одно.

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

Fn = Fn-1 + Fn-2 (n  2) (1.6)

с начальными значениями F0 = 1, F1 = 1.

Этот метод был предложен в 1953 г. Кифером.

Формула (1.6) вместе с начальными значениями определяет следующий ряд чисел Фибоначчи :

n

0 1 2 3 4 5 6 7 8 9 10 11 …

Fn

1 1 2 3 5 8 13 21 34 55 89 144 …

Метод Фибоначчи состоит из n шагов.

Положим вначале a0 = a, b0 = b.

На k-ом шаге, k =0, 1, … , n – 1, определим точки x и x из условия

x = ak + (bk – ak), x = ak + (bk – ak). (1.7)

Формулы (1.7) являются основными расчетными формулами метода Фибоначчи

После этого так же, как и в методе дихотомии, определяют новый, меньший отрезок локализации [ak+1, bk+1] по тому же правилу:

если f(x )  f(x ), то ak+1 = ak, bk+1 = x ;

если f(x ) > f(x ), то ak+1 = x , bk+1 = bk.

Важно, что одна из пробных точек x , x станет пробной точкой на новом отрезке локализации, т. е. совпадет с одной из точек x , x .

Поэтому на каждой итерации достаточно определить только одно значение f(x), так как другое уже найдено на предыдущей итерации.

В конце вычислений можно взять в качестве приближенного значения x* = x .

После выполнения n итераций погрешность удовлетворяет следующему неравенству:

n = < . (1.8)

Следовательно, если задана требуемая точность , число итераций n определяется из условия < или

Fn +1 > . (1.9)

Заметим, что из (1.9) следует, что число итераций, необходимое для удовлетворения заданной точности , зависит только от длины отрезка b – a и точности и не зависит от вида функции f(x).

Алгоритм 1.3 (Алгоритм метода Фибоначчи).

Шаг 1. Ввести исходные данные: a, b, . Определить число итераций n из условия (1.9). Ввести числа Фибоначчи F0, F1, F2, … , Fn +1.

Шаг 2. Положить k = 0 и определить x1 и x2 по формулам (1.7).

Шаг 3. Вычислить f(x1) и f(x2).

Шаг 4. Проверить критерий окончания вычислений: k = n . Если k < n, перейти к шагу 5, иначе – к шагу 6.

Шаг 5. Перейти к новому отрезку локализации и новым пробным точкам. Если f(x1)  f(x2), то положить b = x2, x2 = x1, f(x2) = f(x1), x1= a + (b – a) и вычислить f(x1). Иначе положить a = x1, x1 = x2, f(x1) = f(x2), x2 = a + (b – a) и вычислить f(x2).

Положить k = k +1 и перейти к шагу 4.

Шаг 6. Положить x*x1. Вычислить f *f(x*).

Пример 1.4.

Методом Фибоначчи решим задачу, рассмотренную ранее: f(x) = x4 + e –xmin, x  [0, 1], = 0.1.

Условие (1.8) для нашей задачи имеет вид

Fn +1 > = 5.

Первым среди чисел Фибоначчи, для которого выполняется это условие является число F5 = 8, т.е. n +1 = 5, n = 4.

Результаты вычислений для четырех итераций приведены в табл. 1.5.

Таблица 1.5

k

a

b

b – a

x1

x2

f(x1)

f(x2)

Сравнение

f(x1) и f(x2)

0

1

2

3

0

0.375

0.375

0.375

1

1.000

0.75

0.625

1

0.625

0.375

0.25

0.375

0.625

0.5

0.5

0.625

0.75

0.625

0.5

0.707

0.688

0.669

0.669

0.688

0.789

0.688

0.669

f(x1) > f(x2)

f(x1) < f(x2)

f(x1) < f(x2)

Таким образом, x*  0.5 и f(x*)  0.669.