Изменения

Перейти к: навигация, поиск

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

261 байт добавлено, 00:29, 28 января 2016
Описание
Предположим, что на <tex>k</tex>-й итерации интервал неопределенности равен <tex>[a_k, b_k]</tex>. Рассмотрим две точки <tex>{\lambda}_k</tex> и <tex>{\mu}_k</tex>, определяемые следующим образом:
<tex>{\lambda}_k = a_k + \fracdfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right)</tex> <tex>{\mu}_k = a_k + \fracdfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)</tex>,  
где <tex> k = 1, 2, \dots, n-1</tex> и <tex>n</tex> {{---}} заданное общее число вычислений функции.
Новый интервал неопределенности <tex>[a_{k+1}, b_{k+1}]</tex> будет равен <tex> [{\lambda}_k, b_k]</tex>, если <tex> f\left({\lambda}_k\right) > f\left({\mu}_k\right)</tex> и <tex>[a_k, {\mu}_k]</tex>, если <tex> f\left({\lambda}_k\right) \le f\left({\mu}_k\right)</tex>. В первом случае, учитывая <tex>{\lambda}_k </tex> и полагая <tex>v = n - k</tex>, получим
<tex>b_{k+1} - a_{k+1} = b_k - {\lambda}_k = b_k - a_k - \fracdfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right) = \fracdfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)</tex>.
Во втором случае, учитывая <tex> {\mu}_k</tex>, получаем
<tex> b_{k+1} - a_{k+1} = {\mu}_k - a_k = \fracdfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)</tex>.
Таким образом, в обоих случаях длина интервала неопределенности сжимается с коэффициентом <tex>\fracdfrac{F_{n-k}}{F_{n-k+1}}</tex>. Покажем, что на <tex>k-</tex>той итерации либо <tex>{\lambda}_k = {\mu}_k</tex>, либо <tex>{\mu}_{k+1} = {\lambda}_k</tex>, так что требуется только одно новое вычисление функции. Предположим, что <tex> f\left({\lambda}_k\right) > f\left({\mu}_k\right)</tex>. Тогда <tex>a_{k+1} = {\lambda}_k, b_{k+1} = b_k</tex>. Таким образом, используя <tex> F_v = F_{v-1} + F_{v-2}, v = 1, 2, 3,\dots, F_0 = F_1 = 1 </tex> и заменив <tex>k</tex> на <tex>k+1</tex>, получаем <tex>{\lambda}_{k+1} = a_{k+1} + \fracdfrac{F_{n-k-1}}{F_{n-k}}*\left(b_{k+1} - a_{k+1}\right) = {\lambda}_k + \fracdfrac{F_{n-k-1}}{F_{n-k}}*\left(b_k - {\lambda}_k\right)</tex>. Подставив выражение для <tex>{\lambda}_k</tex> и заменив <tex>k</tex> на <tex>k + 1</tex>, получим <tex>{\lambda}_{k+1} = a_k + \fracdfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right) + \fracdfrac{F_{n-k-2}}{F_{n-k}}*\left(1 - \fracdfrac{F_{n-k-1}}{F_{n-k+1}}\right)*\left(b_k - a_k\right)</tex>.
<tex> 1 - \fracdfrac{F_{n-k-1}}{F_{n-k+1}} = \fracdfrac{F_{n-k}}{F_{n-k+1}}</tex>.
<tex>{\lambda}_{k+1} = a_k + \fracdfrac{F_{n-k-1} + F_{n-k-2}}{F_{n-k+1}}*\left(b_k - a_k\right) = a_k + \fracdfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right) = {\mu}_k</tex>.
Если <tex>f\left({\lambda}_k\right) \le f\left({\mu}_k\right)</tex>, то выполнив аналогичные преобразования, получим <tex>{\lambda}_{k+1} = {\lambda}_k</tex>. Таким образом, в обоих случаях на <tex>k + 1</tex>-й итерации требуется только одно вычисление функции.В отличие от метода [[Поиск с помощью золотого сечения|золотого сечения]] в методе Фибоначчи требуется, чтобы общее число вычислений <tex>n</tex> (или коэффициент сокращения исходного интервала) было задано заранее. Это объясняется тем, что точки, в которых производятся вычисления, зависят от <tex>n</tex>. Длина интервала неопределенности на <tex>k</tex>-той итерации сжимается с коэффициентом <tex>\fracdfrac{F_{n-k}}{F_{n-k+1}}</tex>. Следовательно, после <tex> \left(n-1\right)</tex> итерации, где <tex>n</tex> {{---}} заданное общее число вычислений функции <tex>f\left(x\right)</tex>, длина интервала неопределенности сократится от <tex>\left(b_1 - a_1\right)</tex> до <tex>\fracdfrac{b_1 - a_1}{F_n}</tex>.
Анонимный участник

Навигация