Решение рекуррентных соотношений — различия между версиями
Строка 2: | Строка 2: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Рекуррентная формула''' — формула вида < | + | '''Рекуррентная формула''' — формула вида <tex>a_n=f(n, a_{n-1}, a_{n-2}, \dots, a_{n-p} ) </tex>, выражающая каждый член последовательности <tex>a_n</tex> через <tex>p</tex> предыдущих членов и возможно номер члена последовательности <tex>n</tex>. |
}} | }} | ||
− | Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение < | + | Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение <tex>f(n)</tex> в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда: |
− | < | + | <tex> f = \begin{cases} f(0)=0; \\ f(n) = n + f(n-1),\quad n > 0 \end{cases}</tex> |
− | может быть переведена в замкнутую форму: < | + | может быть переведена в замкнутую форму: <tex>f = \frac{n(n+1)}{2}</tex>. Для этого можно использовать метод производящих функций. |
==Метод производящих функций== | ==Метод производящих функций== | ||
− | Алгоритм получения замкнутого выражения для чисел < | + | Алгоритм получения замкнутого выражения для чисел <tex>a_{n}</tex>, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из <tex>4</tex> шагов. |
<ol> | <ol> | ||
− | <li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен < | + | <li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <tex>k</tex>): |
− | <br>< | + | <br><tex>a_{0} = …, \\ a_{1} = …, \\ a_{k-1} = …, \\ a_{n} = …, n\geqk</tex> |
</li> | </li> | ||
− | <li>Домножить каждую строчку на < | + | <li>Домножить каждую строчку на <tex>z</tex> в соответствующей степени и просуммировать строчки для всех <tex>n\geq0</tex>.</li> |
− | <li>В полученном уравнении привести все суммы < | + | <li>В полученном уравнении привести все суммы <tex>∑</tex> к замкнутому виду. Получить уравнение для производящей функции.</li> |
− | <li>Выразить < | + | <li>Выразить <tex>G(z)</tex> в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням <tex>z</tex>.</li> |
</ol> | </ol> | ||
Строка 26: | Строка 26: | ||
====Числа Фибоначчи==== | ====Числа Фибоначчи==== | ||
Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | ||
− | <br>< | + | <br><tex>\begin{array}{rcl} |
f_0&{}={}&0,\\ | f_0&{}={}&0,\\ | ||
f_1&{}={}&1,\\ | f_1&{}={}&1,\\ | ||
f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geq2.\\ | f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geq2.\\ | ||
\end{array} | \end{array} | ||
− | </ | + | </tex><br> |
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг: | Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг: | ||
− | <br>< | + | <br><tex>\begin{array}{rcl} |
1\cdot f_0&{}={}&0\cdot 1,\\ | 1\cdot f_0&{}={}&0\cdot 1,\\ | ||
z\cdot f_1&{}={}&1\cdot z,\\ | z\cdot f_1&{}={}&1\cdot z,\\ | ||
z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geq2.\\ | z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geq2.\\ | ||
\end{array} | \end{array} | ||
− | </ | + | </tex><br> |
Складываем все строчки: | Складываем все строчки: | ||
− | <br>< | + | <br><tex> |
f_0 + f_1 z + \sum_{n=2}^{\infty}f_nz^n = | 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. | z + \sum_{n=2}^{\infty}f_{n-1}z^n+\sum_{n=2}^{\infty}f_{n-2}z^n. | ||
− | </ | + | </tex><br> |
Третий шаг алгоритма требует привести все суммы к замкнутому виду: | Третий шаг алгоритма требует привести все суммы к замкнутому виду: | ||
− | <br>< | + | <br><tex>\begin{array}{rcl} |
G(z) &{}={}& z + \sum_{n=2}^{\infty}f_{n-1}z^{n-1}+\sum_{n=2}^{\infty}f_{n-2}z^{n-2}, \\ | G(z) &{}={}& z + \sum_{n=2}^{\infty}f_{n-1}z^{n-1}+\sum_{n=2}^{\infty}f_{n-2}z^{n-2}, \\ | ||
G(z) &{}={}& z + \sum_{n=1}^{\infty}f_{n}z^n+\sum_{n=0}^{\infty}f_{n}z^n, \\ | G(z) &{}={}& z + \sum_{n=1}^{\infty}f_{n}z^n+\sum_{n=0}^{\infty}f_{n}z^n, \\ | ||
Строка 54: | Строка 54: | ||
G(z)&{}={}& \displaystyle z + zG(z)+z^2G(z),\\ | G(z)&{}={}& \displaystyle z + zG(z)+z^2G(z),\\ | ||
\end{array} | \end{array} | ||
− | </ | + | </tex><br> |
откуда получаем замкнутое выражение для производящей функции: | откуда получаем замкнутое выражение для производящей функции: | ||
− | <br>< | + | <br><tex> |
G(z) = \frac{z}{1-z-z^2}. | G(z) = \frac{z}{1-z-z^2}. | ||
− | </ | + | </tex><br> |
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения: | Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения: | ||
− | <br>< | + | <br><tex>\displaylines{ |
1-z-z^2 = 0 \cr | 1-z-z^2 = 0 \cr | ||
z_1=-\frac{1-\sqrt{5}}{2}, z_2=-\frac{1+\sqrt{5}}{2}. | z_1=-\frac{1-\sqrt{5}}{2}, z_2=-\frac{1+\sqrt{5}}{2}. | ||
} | } | ||
− | </ | + | </tex><br> |
Таким образом, | Таким образом, | ||
− | <br>< | + | <br><tex> |
G(z) = \frac{z}{1-z-z^2}=\frac{-z}{(z_1-z)(z_2-z)} | 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}. | \frac{z_1/(z_1-z_2)}{z_1-z} + \frac{z_2/(z_2-z_1)}{z_2-z}. | ||
− | </ | + | </tex><br> |
Нам известно разложение следующей рациональной функции: | Нам известно разложение следующей рациональной функции: | ||
− | <br>< | + | <br><tex> |
\frac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. | \frac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. | ||
− | </ | + | </tex><br> |
− | Рассмотрим первую дробь и поделим в ней числитель и знаменатель на < | + | Рассмотрим первую дробь и поделим в ней числитель и знаменатель на <tex>z_1</tex>: |
− | <br>< | + | <br><tex> |
\frac{z_1/(z_1-z_2)}{z_1-z} = \frac1{z_1-z_2}\frac{1}{1-\frac{z}{z_1}} = | \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}. | \frac1{z_1-z_2}\sum_{n=0}^{\infty}\frac{z^n}{z_1^n}. | ||
− | </ | + | </tex><br> |
− | Аналогично (но с делением на < | + | Аналогично (но с делением на <tex>z_2</tex>) поступим со второй дробью: |
− | <br>< | + | <br><tex> |
\frac{z_2/(z_2-z_1)}{z_2-z} = \frac1{z_2-z_1}\frac1{1-\frac{z}{z_2}} = | \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}. | \frac1{z_2-z_1}\sum_{n=0}^{\infty}\frac{z^n}{z_2^n}. | ||
− | </ | + | </tex><br> |
Таким образом, | Таким образом, | ||
− | <br>< | + | <br><tex> |
G(z)=\sum_{n=0}^{\infty} f_nz^n = | G(z)=\sum_{n=0}^{\infty} f_nz^n = | ||
\sum_{n=0}^{\infty}\biggr(\frac{1}{z_1-z_2}\frac{1}{z_1^n} + \frac{1}{z_2-z_1}\frac{1}{z_2^n} \biggr)z^n, | \sum_{n=0}^{\infty}\biggr(\frac{1}{z_1-z_2}\frac{1}{z_1^n} + \frac{1}{z_2-z_1}\frac{1}{z_2^n} \biggr)z^n, | ||
− | </ | + | </tex><br> |
и, следовательно, | и, следовательно, | ||
− | <br>< | + | <br><tex> |
f_n = \frac1{z_1-z_2}\frac{1}{z_1^n} + \frac1{z_2-z_1}\frac{1}{z_2^n}. | f_n = \frac1{z_1-z_2}\frac{1}{z_1^n} + \frac1{z_2-z_1}\frac{1}{z_2^n}. | ||
− | </ | + | </tex><br> |
− | Данное выражение можно упростить, если обратить внимание на то, что < | + | Данное выражение можно упростить, если обратить внимание на то, что <tex>1/z_1=-z_2</tex>, <tex>1/z_2=-z_1</tex> и <tex>z_1-z_2=√5</tex>: |
− | <br>< | + | <br><tex> |
f_n=\frac{1}{\sqrt{5}}\left( \biggl( \frac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \frac{1-\sqrt{5}}{2} \biggr)^n \right). | f_n=\frac{1}{\sqrt{5}}\left( \biggl( \frac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \frac{1-\sqrt{5}}{2} \biggr)^n \right). | ||
− | </ | + | </tex><br> |
====Произвольное соотношение==== | ====Произвольное соотношение==== | ||
Рассмотрим следующее рекуррентное соотношение: | Рассмотрим следующее рекуррентное соотношение: | ||
− | <br>< | + | <br><tex>\begin{array}{rcl} |
a_0&{}={}&1,\\ | a_0&{}={}&1,\\ | ||
a_1&{}={}&2,\\ | a_1&{}={}&2,\\ | ||
a_n&{}={}&6a_{n-1}-8f_{n-2}+n, \quad n\geq2.\\ | a_n&{}={}&6a_{n-1}-8f_{n-2}+n, \quad n\geq2.\\ | ||
\end{array} | \end{array} | ||
− | </ | + | </tex><br> |
Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи: | Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи: | ||
− | <br>< | + | <br><tex>\begin{array}{rcl} |
\displaystyle a_0 + a_1 z + \sum_{n=2}^{\infty}{a_n}{z^n} &{}={}& 1+2z+6\sum_{n=2}^{\infty}{a_{n-1}}{z^n}-8\sum_{n=2}^{\infty}{a_{n-2}}{z^n}+\sum_{n=2}^{\infty}nz^n, \\ | \displaystyle a_0 + a_1 z + \sum_{n=2}^{\infty}{a_n}{z^n} &{}={}& 1+2z+6\sum_{n=2}^{\infty}{a_{n-1}}{z^n}-8\sum_{n=2}^{\infty}{a_{n-2}}{z^n}+\sum_{n=2}^{\infty}nz^n, \\ | ||
G(z) &{}={}& 1+2z+6z\sum_{n=2}^{\infty}{a_{n-1}}{z^{n-1}}-8z^2\sum_{n=2}^{\infty}{a_{n-2}}{z^{n-2}}+\sum_{n=2}^{\infty}nz^n, \\ | G(z) &{}={}& 1+2z+6z\sum_{n=2}^{\infty}{a_{n-1}}{z^{n-1}}-8z^2\sum_{n=2}^{\infty}{a_{n-2}}{z^{n-2}}+\sum_{n=2}^{\infty}nz^n, \\ | ||
Строка 125: | Строка 125: | ||
G(z) &{}={} & 1 - 4z + 6zG(z)-8z^2G(z) + \sum_{n=2}^{\infty}nz^n.\\ | G(z) &{}={} & 1 - 4z + 6zG(z)-8z^2G(z) + \sum_{n=2}^{\infty}nz^n.\\ | ||
\end{array} | \end{array} | ||
− | </ | + | </tex><br> |
Вспомним, что | Вспомним, что | ||
− | <br>< | + | <br><tex> |
(z^n)' = nz^{n-1}, | (z^n)' = nz^{n-1}, | ||
− | </ | + | </tex><br> |
поэтому | поэтому | ||
− | <br>< | + | <br><tex> |
\sum_{n=2}^{\infty}nz^n=z\sum_{n=2}^{\infty}nz^{n-1}=z\sum_{n=2}^{\infty}(z^n)'=z\biggl(\sum_{n=2}^{\infty}z^n\biggr)'. | \sum_{n=2}^{\infty}nz^n=z\sum_{n=2}^{\infty}nz^{n-1}=z\sum_{n=2}^{\infty}(z^n)'=z\biggl(\sum_{n=2}^{\infty}z^n\biggr)'. | ||
− | </ | + | </tex><br> |
Последняя сумма может быть свёрнута: | Последняя сумма может быть свёрнута: | ||
− | <br>< | + | <br><tex> |
\sum_{n=2}^{\infty}z^n=\sum_{n=0}^{\infty}z^n-1-z=\frac{1}{1-z}-1-z=\frac{z^2}{1-z}. | \sum_{n=2}^{\infty}z^n=\sum_{n=0}^{\infty}z^n-1-z=\frac{1}{1-z}-1-z=\frac{z^2}{1-z}. | ||
− | </ | + | </tex><br> |
Подставив свёрнутое выражение обратно, имеем, | Подставив свёрнутое выражение обратно, имеем, | ||
− | <br>< | + | <br><tex> |
z\biggl(\sum_{n=2}^{\infty}z^n\biggr)' = z \biggl(\frac{z^2}{1-z}\biggr)'=\frac{z^2(2-z)}{(1-z)^2}. | z\biggl(\sum_{n=2}^{\infty}z^n\biggr)' = z \biggl(\frac{z^2}{1-z}\biggr)'=\frac{z^2(2-z)}{(1-z)^2}. | ||
− | </ | + | </tex><br> |
Таким образом, наше последнее уравнение примет вид | Таким образом, наше последнее уравнение примет вид | ||
− | <br>< | + | <br><tex> |
G(z) = 1 -4z + 6zG(z)-8z^2G(z) + \frac{z^2(2-z)}{(1-z)^2}.\\ | G(z) = 1 -4z + 6zG(z)-8z^2G(z) + \frac{z^2(2-z)}{(1-z)^2}.\\ | ||
− | </ | + | </tex><br> |
− | Это уравнение для производящей функции. Из него выражаем < | + | Это уравнение для производящей функции. Из него выражаем <tex>G(z)</tex>: |
− | <br>< | + | <br><tex> |
G(z) = \frac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}. | G(z) = \frac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}. | ||
− | </ | + | </tex><br> |
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей: | Разложим знаменатель на множители и разобьём дробь на сумму простых дробей: | ||
− | <br>< | + | <br><tex> |
G(z) = \frac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\frac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\frac{1/3}{(1-z)^2}+\frac{7/9}{1-z}-\frac{1/2}{1-2z}+\frac{7/18}{1-4z}. | G(z) = \frac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\frac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\frac{1/3}{(1-z)^2}+\frac{7/9}{1-z}-\frac{1/2}{1-2z}+\frac{7/18}{1-4z}. | ||
− | </ | + | </tex><br> |
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее: | Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее: | ||
− | <br>< | + | <br><tex> |
\frac{1}{(1-z)^2} =(1-z)^{-2} =\sum_{n=0}^{\infty}\binom{-2}{n}(-z)^n=\sum_{n=0}^{\infty}(-1)^n\binom{n+1}{1}(-z)^n =\sum_{n=0}^{\infty}(n+1)z^n. | \frac{1}{(1-z)^2} =(1-z)^{-2} =\sum_{n=0}^{\infty}\binom{-2}{n}(-z)^n=\sum_{n=0}^{\infty}(-1)^n\binom{n+1}{1}(-z)^n =\sum_{n=0}^{\infty}(n+1)z^n. | ||
− | </ | + | </tex><br> |
Теперь соберём ответ: | Теперь соберём ответ: | ||
− | <br>< | + | <br><tex> |
G(z) = \frac{1/3}{(1-z)^2}+\frac{7/9}{1-z}-\frac{1/2}{1-2z}+\frac{7/18}{1-4z}=\frac{1}{3}\sum_{n=0}^{\infty}(n+1)z^n+ | G(z) = \frac{1/3}{(1-z)^2}+\frac{7/9}{1-z}-\frac{1/2}{1-2z}+\frac{7/18}{1-4z}=\frac{1}{3}\sum_{n=0}^{\infty}(n+1)z^n+ | ||
\frac{7}{9}\sum_{n=0}^{\infty}z^n-\frac{1}{2}\sum_{n=0}^{\infty}2^nz^n+\frac{7}{18}\sum_{n=0}^{\infty}4^nz^n. | \frac{7}{9}\sum_{n=0}^{\infty}z^n-\frac{1}{2}\sum_{n=0}^{\infty}2^nz^n+\frac{7}{18}\sum_{n=0}^{\infty}4^nz^n. | ||
− | </ | + | </tex><br> |
Значит, | Значит, | ||
− | <br>< | + | <br><tex> |
a_n= | a_n= | ||
\frac{n+1}{3} | \frac{n+1}{3} | ||
Строка 181: | Строка 181: | ||
+\frac{7\cdot4^n}{18}= | +\frac{7\cdot4^n}{18}= | ||
\frac{7\cdot4^n+6n+20}{18} - 2^{n-1}. | \frac{7\cdot4^n+6n+20}{18} - 2^{n-1}. | ||
− | </ | + | </tex><br> |
==См. также== | ==См. также== |
Версия 19:54, 16 марта 2018
Содержание
Определения
Определение: |
Рекуррентная формула — формула вида | , выражающая каждый член последовательности через предыдущих членов и возможно номер члена последовательности .
Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда:
может быть переведена в замкнутую форму:
. Для этого можно использовать метод производящих функций.Метод производящих функций
Алгоритм получения замкнутого выражения для чисел
, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из шагов.- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
):
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Примеры
Числа Фибоначчи
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
Складываем все строчки:
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
Таким образом,
Нам известно разложение следующей рациональной функции:
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на
Аналогично (но с делением на
Таким образом,
и, следовательно,
Данное выражение можно упростить, если обратить внимание на то, что
Произвольное соотношение
Рассмотрим следующее рекуррентное соотношение:
Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи:
Вспомним, что
поэтому
Последняя сумма может быть свёрнута:
Подставив свёрнутое выражение обратно, имеем,
Таким образом, наше последнее уравнение примет вид
Это уравнение для производящей функции. Из него выражаем
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей:
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее:
Теперь соберём ответ:
Значит,