5.7. Методы золотого сечения и Фибоначчи.

Эти методы основываются на одном и том же алгоритме перехода к следующей пробной точке и отличаются лишь способом выбора первой точки. В результате каждого шага (добавления одной пробной точки) мы получаем отрезок Ln = [an, bn] с одной "старой" пробной точкой xn ∈ (an, bn). "Новая" пробная точка yn определяется как точка симметричная xn относительно центра отрезка Ln:

yn = | an + bn 2 | + | ( | an + bn 2 | – xn | ) | = an + bn – xn

Затем, в зависимости от того, какое из неравенств f(xn) ≤ f(yn) или f(xn) > f(yn) выполняется, в качестве Ln+1 выбирается или отрезок [an, yn], или [xn, bn] (здесь мы считаем для определенности, что xn < yn), а в качестве старой пробной точки xn+1 выбирается либо xn, либо yn.

З а д а ч а 5.10*. Докажите, что ln–1 = ln + ln+1, где ln — длина отрезка Ln.

В методе золотого сечения x0 делит отрезок [a, b] по правилу золотого сечения:

b – a x0 – a | = τ,

где τ — положительный корень уравнения

τ2 = τ + 1

(золотое сечение): τ = (1 + √5)/2 ≈ 1.618). Таким образом, l0 = l1τ. Но тогда (см. задачу 5.10) l2 = l0 – l1 = l1(τ– 1) = l1/τ, т. е. l1 = l2τ.

З а д а ч а 5.11. Докажите, что ln+1 = ln/τ.

Поэтому после n + 1 эксперимента

ln = | l τn | .

В частности, для уменьшения отрезка неопределенности в 106 раз нужно провести 29 вычислений функции (ср. с 40 вычислениями в методе дихотомии).

В методе Фибоначчи сначала задается число n вычислений функции и затем первая пробная точка подбирается таким образом, чтобы последняя пара экспериментов давала отрезок неопределенности наименьшей длины, т. е. чтобы последние две точки составляли симметричную относительно центра отрезка пару, расстояние между которыми равно ε. Таким образом,

ln–1 = 2ln – ε.

Учитывая, что (см. задачу 5.10)

ln–2 = ln–1 + ln,

получаем ln–2 = 3ln – ε, ln–3 = 5ln– 2ε, ln–4 = 8ln – 3ε, ln–5 = 13ln – 5ε и т. д. Индукцией по i легко доказывается, что

ln–i = Fi+1ln – Fi–1ε, | (15)

где Fi — так называемые числа Фибоначчи, определяемые соотношениями F0 = F1 = 1, Fi = Fn–1 + Fn–2, i = 2,3, ..., введенные в XIII веке Леонардом Пизанским (Фибоначчи) совсем по другому поводу1). Из (15) мы получаем, во-первых, длину ln отрезка неопределенности, получающегося в результате вычисления f в n + 1 точках:

l = l0 = Fn+1ln – Fn–1ε,

откуда

ln = | l Fn+1 | + | Fn–1 Fn+1 | ε,

и, во-вторых, длину отрезка l1, задающего положение первой (стартовой) точки:

l1 = Fnln – Fn–2ε = | Fn Fn+1 | l + | FnFn–1 – Fn–2Fn+1 Fn+1 | ε.
| (16)

З а д а ч а 5.12. Докажите, что (Fi)2 = Fi–1Fi+1 + (–1)i. Используя это тождество, получите из (16) более простое соотношение, определяющее ln:

ln = | Fn Fn+1 | l + | (–1)n Fn+1 | ε.
| (17)

Таким образом, чтобы запустить метод Фибоначчи необходимо заранее знать количество точек, в которых будет вычисляться функция f. В то же время метод Фибоначчи является наилучшим алгоритмом в таком классе методов2), в частности, по сравнению с методом золотого сечения, за одно и то же число шагов он дает отрезок неопределенности в τ2/√5 ≈ 1.17 раз меньший. На практике чаще используют первый из них, поскольку выигрыш в методе Фибоначчи не велик, а необходимость заранее знать число n вычислений функции зачастую обременительна.

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