Решение рекуррентных соотношений — различия между версиями
Строка 15: | Строка 15: | ||
<ol> | <ol> | ||
<li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <math>k</math>): | <li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <math>k</math>): | ||
− | <math>a_{0} = ..., | + | <br><math>a_{0} = ..., \\ a_{1} = ..., \\ a_{k-1} = ..., \\ a_{n} = ..., n≥k</math> |
</li> | </li> | ||
Строка 29: | Строка 29: | ||
====ЧИСЛА ФИБОНАЧЧИ==== | ====ЧИСЛА ФИБОНАЧЧИ==== | ||
Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | ||
− | <br> | + | |
+ | <br><math>\begin{array}{rcl} | ||
+ | f_0&{}={}&0,\\ | ||
+ | f_1&{}={}&1,\\ | ||
+ | f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geq2.\\ | ||
+ | \end{array} | ||
+ | </math><br> | ||
Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих: | Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих: | ||
− | <br> | + | |
+ | <br><math> | ||
+ | \begin{tabular}{\vert c\vert c\vert c\vert c\vert c\vert c... | ||
+ | ...& 2 & 3 & 5 & 8 & 13 & 21 & 34 \\ | ||
+ | \hline | ||
+ | \end{tabular} | ||
+ | </math><br> | ||
+ | Эти числа очень быстро растут, например, f10=55, f20=6765, f30=832040, f100=354224848179261915075. | ||
+ | |||
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг: | Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг: | ||
− | <br> | + | |
+ | <br><math>\begin{array}{rcl} | ||
+ | 1\cdot f_0&{}={}&0\cdot 1,\\ | ||
+ | z\cdot f_1&{}={}&1\cdot z,\\ | ||
+ | z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geq2.\\ | ||
+ | \end{array} | ||
+ | </math><br> | ||
Складываем все строчки: | Складываем все строчки: | ||
− | <br> | + | |
+ | <br><math> | ||
+ | f_0 + f_1 z + \sum_{n=2}^{\infty}f_nz^n = | ||
+ | z + \sum_{n=2}^{\infty}f_{n-1}z^n+\sum_{n=2}^{\infty}f_{n-2}z^n. | ||
+ | </math><br> | ||
Третий шаг алгоритма требует привести все суммы к замкнутому виду: | Третий шаг алгоритма требует привести все суммы к замкнутому виду: | ||
− | <br> | + | |
+ | <br><math>\begin{array}{rcl} | ||
+ | G(z) &{}={}& \displaystyle z + z\sum_{n=z} &{}={}& \displaystyle z + zG(z)+z^2G(z),\\ | ||
+ | \end{array} | ||
+ | </math><br> | ||
откуда получаем замкнутое выражение для производящей функции: | откуда получаем замкнутое выражение для производящей функции: | ||
− | <br> | + | |
− | Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения: | + | <br><math> |
− | <br> | + | G(z) = \frac{z}{1-z-z^2}. |
+ | </math><br> | ||
+ | Осталось «всего лишь» разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения: | ||
+ | |||
+ | <br><math>\displaylines{ | ||
+ | 1-z-z^2 = 0 \cr | ||
+ | z_1=-\frac{1-\sqrt{5}}{2}, z_2=-\frac{1+\sqrt{5}}{2}. | ||
+ | } | ||
+ | </math><br> | ||
+ | Таким образом (проверьте), | ||
+ | |||
+ | <br><math> | ||
+ | G(z) = \frac{z}{1-z-z^2}=\frac{-z}{(z_1-z)(z_2-z)} | ||
+ | = | ||
+ | \frac{z_1/(z_1-z_2)}{z_1-z} + \frac{z_2/(z_2-z_1)}{z_2-z}. | ||
+ | </math><br> | ||
+ | Как теперь поступить с этими выражениями? Ведь пока нам известно разложение только одной рациональной функции: | ||
+ | |||
+ | <br><math> | ||
+ | \frac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. | ||
+ | </math><br> | ||
+ | Рассмотрим первую дробь и поделим в ней числитель и знаменатель на z1: | ||
+ | |||
+ | <br><math> | ||
+ | \frac{z_1/(z_1-z_2)}{z_1-z} = \frac1{z_1-z_2}\frac{1}{1-\frac{z}{z_1}} = | ||
+ | \frac1{z_1-z_2}\sum_{n=0}^{\infty}\frac{z^n}{z_1^n}. | ||
+ | </math><br> | ||
+ | Аналогично (но с делением на z2) поступим со второй дробью: | ||
+ | |||
+ | <br><math> | ||
+ | \frac{z_2/(z_2-z_1)}{z_2-z} = \frac1{z_2-z_1}\frac1{1-\frac{z}{z_2}} = | ||
+ | \frac1{z_2-z_1}\sum_{n=0}^{\infty}\frac{z^n}{z_2^n}. | ||
+ | </math><br> | ||
Таким образом, | Таким образом, | ||
− | + | ||
− | + | <br><math> | |
− | + | G(z)=\sum_{n=0}^{\infty} f_nz^n = | |
− | + | \sum_{n=0}^{\infty}\b... | |
− | + | ...rac{1}{z_1^n} + \frac{1}{z_2-z_1}\frac{1}{z_2^n} \biggr)z^n, | |
− | + | </math><br> | |
− | |||
− | |||
− | < | ||
и, следовательно, | и, следовательно, | ||
− | <br> | + | |
− | Данное выражение можно | + | <br><math> |
− | < | + | f_n = \frac1{z_1-z_2}\frac{1}{z_1^n} + \frac1{z_2-z_1}\frac{1}{z_2^n}. |
+ | </math><br> | ||
+ | Данное выражение можно «причесать», если обратить внимание на то, что 1/z1=-z2, 1/z2=-z1 и z1-z2=√5 (корень из 5): | ||
+ | |||
+ | <br><math> | ||
+ | f_n=\frac{1}{\sqrt{5}}\left( \biggl( \frac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \frac{1-\sqrt{5}}{2} \biggr)^n \right). | ||
+ | </math><br> | ||
====БОЛЕЕ СЛОЖНОЕ СООТНОШЕНИЕ==== | ====БОЛЕЕ СЛОЖНОЕ СООТНОШЕНИЕ==== |
Версия 23:02, 12 марта 2018
Содержание
Определения
Определение: |
Рекуррентная формула — формула вида | , выражающая каждый член последовательности через предыдущих членов и возможно номер члена последовательности .
Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда:
может быть переведена в замкнутую форму:
. Для этого можно использовать метод производящих функций.Метод производящих функций
Алгоритм получения замкнутого выражения для чисел
, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из 4 шагов.- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
):
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнениипривести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Доказательство
по построению
Примеры
ЧИСЛА ФИБОНАЧЧИ
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих:
Эти числа очень быстро растут, например, f10=55, f20=6765, f30=832040, f100=354224848179261915075.
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
Складываем все строчки:
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
Осталось «всего лишь» разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
Таким образом (проверьте),
Как теперь поступить с этими выражениями? Ведь пока нам известно разложение только одной рациональной функции:
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на z1:
Аналогично (но с делением на z2) поступим со второй дробью:
Таким образом,
и, следовательно,
Данное выражение можно «причесать», если обратить внимание на то, что 1/z1=-z2, 1/z2=-z1 и z1-z2=√5 (корень из 5):