Решение рекуррентных соотношений — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показана 61 промежуточная версия 6 участников) | |||
Строка 2: | Строка 2: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Рекуррентная формула''' — формула вида < | + | '''Рекуррентная формула''' (англ. ''recurrence relation'') — формула вида <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>, вместе с заданными первыми p членами, где <tex>p</tex> — порядок рекуррентного соотношения. |
}} | }} | ||
+ | Для рекуррентного соотношения, которому удовлетворяет последовательность <tex> \{ a_n \} </tex> мы часто хотим получить выражение для <tex>a_n</tex>. Например, для рекуррентного соотношения, задающего числа Фибоначчи: | ||
− | + | <tex> | |
+ | F_0 = 0,\qquad F_1 = 1,\qquad F_{n} = F_{n-1} + F_{n-2}, \quad n\geqslant 2, \quad n\in Z</tex> | ||
− | < | + | <tex>a_n</tex> член может быть записан следующим образом: <tex>a_n=\dfrac{1}{\sqrt{5}}\left( \biggl( \dfrac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \dfrac{1-\sqrt{5}}{2} \biggr)^n \right).</tex> |
− | + | Для этого можно использовать метод производящих функций (англ. ''generating function method''). | |
==Метод производящих функций== | ==Метод производящих функций== | ||
− | Алгоритм получения | + | Алгоритм получения выражения для чисел <tex>a_{n}</tex>, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из <tex>4</tex> шагов. |
− | + | #Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <tex>k</tex>): | |
− | + | #:<tex>a_{0} = …, \\ a_{1} = …, \\ a_{k-1} = …, \\ … \\ a_{n} = …, n\geqslant k</tex> | |
− | < | + | #Домножить каждую строчку на <tex>z</tex> в соответствующей степени (<tex>z^{k} \cdot a_{k} = … \cdot z^{k}</tex>) и сложить все выражения, многоточие надо рассматривать как множество из выражений, где <tex>n \in [k, +\infty)</tex>. В левой части получится сумма <tex>\displaystyle\sum_{n=0}^{\infty} a_nz^n</tex> — это производящая функция, назовем ее <tex>G(z)</tex>. Правую часть преобразовать так, чтобы она превратилась в выражение, включающее <tex>G(z)</tex>. |
− | </ | + | #Решить полученное уравнение, получив для <tex>G(z)</tex> выражение в замкнутом виде. |
+ | #Разложить <tex>G(z)</tex> в степенной ряд, коэффициент при <tex>z_n</tex> будет искомым выражением для <tex>a_n</tex>. | ||
− | < | + | ==Примеры== |
− | < | + | ===<tex>1</tex> пример=== |
− | < | + | [[Производящая_функция| Производящие функции]] позволяют решать рекуррентные соотношение механически по одному и тому же алгоритму. Рассмотрим общую схему на простом примере, который позволит продемонстрировать базовые приёмы работы. |
− | </ | + | |
+ | Задано линейное однородное рекуррентное соотношение порядка <tex>2</tex> с постоянными коэффициентами: | ||
+ | <br><tex>\begin{array}{rcl} | ||
+ | a_0&{}={}&0,\\ | ||
+ | a_1&{}={}&1,\\ | ||
+ | a_n&{}={}&5a_{n-1}-6a_{n-2}, \quad n\geqslant2.\\ | ||
+ | \end{array} | ||
+ | </tex><br> | ||
+ | |||
+ | Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером <tex>n</tex>. В данном случае порядок равен <tex>2</tex>, так как для вычисления <tex>a_n</tex> требуется знать <tex>a_{n-1}</tex> и <tex>a_{n-2}</tex>. | ||
+ | |||
+ | Будем искать производящую функцию последовательности в виде | ||
+ | <br><tex> | ||
+ | G(z)=\displaystyle\sum_{n=0}^{\infty} a_nz^n = a_0+a_1z+a_2z^2+\cdots, | ||
+ | </tex><br> | ||
+ | |||
+ | с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на <tex>z^0</tex>, следующую — на <tex>z^1</tex> и последнюю — на <tex>z^n</tex>: | ||
+ | <br><tex>\begin{array}{rcl} | ||
+ | 1\cdot a_0&{}={}&0\cdot 1,\\ | ||
+ | z\cdot a_1&{}={}&1\cdot z,\\ | ||
+ | z^n\cdot a_n&{}={}&(5a_{n-1}-6a_{n-2})\cdot z^n, \quad n\geqslant2.\\ | ||
+ | \end{array} | ||
+ | </tex><br> | ||
+ | |||
+ | Теперь сложим все уравнения для всех значений <tex>n</tex>: | ||
+ | <br><tex> | ||
+ | \underbrace{a_0 + a_1 z + \displaystyle\sum_{n=2}^{\infty}a_nz^n}_{G(z)} {=} z+5\displaystyle\sum_{n=2}^{\infty}a_{n-1}z^n-6\displaystyle\sum_{n=2}^{\infty}a_{n-2}z^n. | ||
+ | </tex><br> | ||
+ | |||
+ | Левая часть уравнения в точности равна <tex>G(z)</tex>, а в правой части есть суммы, очень похожие на функцию <tex>G(z)</tex>, но не равные ей. Эти суммы нужно привести к виду <tex>G(z)</tex>. Начнём с первой: | ||
+ | <br><tex> | ||
+ | \displaystyle\sum_{n=2}^{\infty}a_{n-1}z^n \stackrel{(1)}{=}z\displaystyle\sum_{n=2}^{\infty}a_{n-1}z^{n-1} \stackrel{(2)}{=} | ||
+ | z\displaystyle\sum_{n=1}^{\infty}a_{n}z^n \stackrel{(3)}{=} | ||
+ | z\biggr( \underbrace{ \displaystyle\sum_{n=1}^{\infty}a_{n}z^n+a_0}_{G(z)} - a_0\biggr)=z(G(z)-a_0) \stackrel{(4)}{=} z G(z). | ||
+ | </tex><br> | ||
+ | |||
+ | Равенство <tex>(1)</tex> получатся вынесением <tex>z</tex> в первой степени за знак суммы, это необходимо, чтобы уровнять степень переменной <tex>z</tex> и индекс переменной a внутри суммы. Действие <tex>(2)</tex> — изменение индекса суммирования, которое позволяет избавиться от <tex>n-1</tex>. Равенство <tex>(3)</tex> получается, если прибавить и снова отнять значение <tex>a_0</tex>, чтобы получить полную сумму от <tex>n=0</tex> до <tex>∞</tex>. Равенство <tex>(4)</tex> справедливо в силу того, что <tex>a_0=0</tex>. | ||
+ | |||
+ | Аналогичные манипуляции со второй суммой дают нам выражение | ||
+ | <br><tex> | ||
+ | \displaystyle\sum_{n=2}^{\infty}a_{n-2}z^n = z^2\displaystyle\sum_{n=2}^{\infty}a_{n-2}z^{n-2} | ||
+ | = z^2\displaystyle\sum_{n=0}^{\infty}a_{n}z^{n}=z^2G(z). | ||
+ | </tex><br> | ||
+ | |||
+ | Теперь наше исходное уравнение для производящей функции принимает вид: | ||
+ | <br><tex> | ||
+ | G(z) = z + 5zG(z) -6z^2G(z), | ||
+ | </tex><br> | ||
+ | |||
+ | откуда получаем производящую функцию последовательности в замкнутом виде: | ||
+ | <br><tex> | ||
+ | G(z) = \dfrac{z}{1-5z+6z^2}. | ||
+ | </tex><br> | ||
+ | |||
+ | Отыскав производящую функцию в замкнутом виде, её нужно снова разложить в ряд. Это можно сделать разными способами, но самый простой из них — разбить всю дробь на простые дроби и применить формулу для разложения <tex>\dfrac{1}{1-z}</tex>. Итак, разложим знаменатель функции на множители: | ||
+ | <br><tex> | ||
+ | G(z) = \dfrac{z}{1-5z+6z^2} = \dfrac{z}{(1-3z)(1-2z)}. | ||
+ | </tex><br> | ||
+ | |||
+ | Теперь разобьём дробь на сумму простых дробей: | ||
+ | <br><tex> | ||
+ | \dfrac{z}{(1-3z)(1-2z)} = \dfrac{1}{1-3z} - \dfrac{1}{1-2z}. | ||
+ | </tex><br> | ||
+ | |||
+ | Вспомним [[Производящая_функция#Приложения | разложение для простейшей рациональной функции]]: | ||
+ | <br><tex> | ||
+ | \dfrac{1}{1-z} = \displaystyle\sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. | ||
+ | </tex><br> | ||
+ | |||
+ | Из этого разложения следует, что | ||
+ | <br><tex> | ||
+ | \dfrac{1}{1-3z}= \displaystyle\sum_{n=0}^{\infty}(3z)^n \quad\mbox{ и }\quad \dfrac{1}{1-2z}= \displaystyle\sum_{n=0}^{\infty}(2z)^n. | ||
+ | </tex><br> | ||
+ | |||
+ | Таким образом, | ||
+ | <br><tex> | ||
+ | G(z) = \displaystyle\sum_{n=0}^{\infty}3^nz^n - \displaystyle\sum_{n=0}^{\infty}2^nz^n = \displaystyle\sum_{n=0}^{\infty}(3^n-2^n)z^n. | ||
+ | </tex><br> | ||
− | == | + | С другой стороны, мы искали <tex>G(z)</tex> в виде |
− | + | <br><tex> | |
+ | G(z)=\displaystyle\sum_{n=0}^{\infty} a_nz^n, | ||
+ | </tex><br> | ||
+ | поэтому, в силу равенства рядов, <tex>a_n=3^n-2^n</tex> (для <tex>n\geqslant 0</tex>). | ||
− | == | + | ===<tex>2</tex> пример: числа Фибоначчи=== |
− | |||
Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | Рассмотрим рекуррентное соотношение для чисел Фибоначчи: | ||
− | <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\ | + | f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geqslant2.\\ |
\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\ | + | z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geqslant2.\\ |
\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 + \displaystyle\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 + \displaystyle\sum_{n=2}^{\infty}f_{n-1}z^n+\displaystyle\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 + z\displaystyle\sum_{n=2}^{\infty}f_{n-1}z^{n-1}+z^2\displaystyle\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 + z\displaystyle\sum_{n=1}^{\infty}f_{n}z^n+z^2\displaystyle\sum_{n=0}^{\infty}f_{n}z^n, \\ |
G(z)&{}={}& \displaystyle z + z(G(z)-f_0)+z^2G(z),\\ | G(z)&{}={}& \displaystyle z + z(G(z)-f_0)+z^2G(z),\\ | ||
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) = \ | + | G(z) = \dfrac{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=-\ | + | z_1=-\dfrac{1-\sqrt{5}}{2}, z_2=-\dfrac{1+\sqrt{5}}{2}. |
} | } | ||
− | </ | + | </tex><br> |
Таким образом, | Таким образом, | ||
− | <br>< | + | <br><tex> |
− | G(z) = \ | + | G(z) = \dfrac{z}{1-z-z^2}=\dfrac{-z}{(z_1-z)(z_2-z)} |
= | = | ||
− | \ | + | \dfrac{z_1/(z_1-z_2)}{z_1-z} + \dfrac{z_2/(z_2-z_1)}{z_2-z}. |
− | </ | + | </tex><br> |
Нам известно разложение следующей рациональной функции: | Нам известно разложение следующей рациональной функции: | ||
− | <br>< | + | <br><tex> |
− | \ | + | \dfrac{1}{1-z} = \displaystyle\sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. |
− | </ | + | </tex><br> |
− | Рассмотрим первую дробь и поделим в ней числитель и знаменатель на < | + | Рассмотрим первую дробь и поделим в ней числитель и знаменатель на <tex>z_1</tex>: |
− | <br>< | + | <br><tex> |
− | \ | + | \dfrac{z_1/(z_1-z_2)}{z_1-z} = \dfrac1{z_1-z_2}\dfrac{1}{1-\dfrac{z}{z_1}} = |
− | \ | + | \dfrac1{z_1-z_2}\displaystyle\sum_{n=0}^{\infty}\dfrac{z^n}{z_1^n}. |
− | </ | + | </tex><br> |
− | Аналогично (но с делением на < | + | Аналогично (но с делением на <tex>z_2</tex>) поступим со второй дробью: |
− | <br>< | + | <br><tex> |
− | \ | + | \dfrac{z_2/(z_2-z_1)}{z_2-z} = \dfrac1{z_2-z_1}\dfrac1{1-\dfrac{z}{z_2}} = |
− | \ | + | \dfrac1{z_2-z_1}\displaystyle\sum_{n=0}^{\infty}\dfrac{z^n}{z_2^n}. |
− | </ | + | </tex><br> |
Таким образом, | Таким образом, | ||
− | <br>< | + | <br><tex> |
− | G(z)=\sum_{n=0}^{\infty} f_nz^n = | + | G(z)=\displaystyle\sum_{n=0}^{\infty} f_nz^n = |
− | \sum_{n=0}^{\infty}\biggr(\ | + | \displaystyle\sum_{n=0}^{\infty}\biggr(\dfrac{1}{z_1-z_2}\dfrac{1}{z_1^n} + \dfrac{1}{z_2-z_1}\dfrac{1}{z_2^n} \biggr)z^n, |
− | </ | + | </tex><br> |
и, следовательно, | и, следовательно, | ||
− | <br>< | + | <br><tex> |
− | f_n = \ | + | f_n = \dfrac1{z_1-z_2}\dfrac{1}{z_1^n} + \dfrac1{z_2-z_1}\dfrac{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>. Подставим <tex>z_1</tex> и <tex>z_2</tex> в предыдущее выражение: | ||
+ | <br><tex> | ||
+ | f_n=\dfrac{1}{\sqrt{5}}\left( \biggl( \dfrac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \dfrac{1-\sqrt{5}}{2} \biggr)^n \right). | ||
+ | </tex><br> | ||
+ | |||
+ | ===<tex>3</tex> пример=== | ||
+ | Найдём производящую функцию для последовательности квадратов чисел Фибоначчи: $1, 1, 4, 9, 25, \ldots, f_k^2,\ldots$. | ||
+ | |||
+ | По определению последовательности Фибоначчи выполняется: | ||
+ | <br><tex> | ||
+ | \left\{ \begin{array}{ll} | ||
+ | f_{n+2} = f_{n+1} + f_n \\ | ||
+ | f_{n-1} = f_{n+1} - f_n | ||
+ | \end{array} \right. | ||
+ | </tex><br> | ||
+ | Возведя в квадрат и сложив, получим: | ||
+ | <br><tex> | ||
+ | \begin{array}{rcl} | ||
+ | f_{n+2}^2 + f_{n-1}^2 = 2f_{n+1}^2 + 2f_n^2, \\ | ||
+ | f_{n+2}^2 = 2f_{n+1}^2 + 2f_n^2 - f_{n-1}^2, \\ | ||
+ | f_{n}^2 = 2f_{n-1}^2 + 2f_{n-2}^2 - f_{n-3}^2.\\ | ||
+ | \end{array} | ||
+ | </tex><br> | ||
+ | Обозначим рассматриваемую последовательность <tex>A</tex>, а её члены <tex>a_n</tex>, тогда: | ||
+ | <br><tex>a_n = 2a_{n-1} + 2a_{n-2} - a_{n-3}</tex><br> | ||
+ | |||
+ | Рекуррентное соотношение: | ||
+ | <br><tex> | ||
+ | \begin{array}{ll} | ||
+ | a_0 = f_0^2 = 1 \\ | ||
+ | a_1 = f_1^2 = 1 \\ | ||
+ | a_2 = f_2^2 = 4 \\ | ||
+ | a_n = 2a_{n-1} + 2a_{n-2} - a_{n-3}, \quad n\geqslant3.\\ | ||
+ | \end{array} | ||
+ | </tex><br> | ||
− | + | Приведём суммы к замкнутому виду: | |
− | <br>< | + | <br><tex> |
− | + | \begin{array}{ll} | |
− | </ | + | A(z) = \displaystyle\sum_{n=0}^{\infty}a_nz^n = 1 + z + 4z^2 + \displaystyle\sum_{n=3}^{\infty}(2a_{n-1} + 2a_{n-2} - a_{n-3})z^n, \\ |
+ | A(z) = 1 + z + 4z^2 + 2\displaystyle\sum_{n=3}^{\infty}a_{n-1}z^n + 2\displaystyle\sum_{n=3}^{\infty}a_{n-2}z^n - \displaystyle\sum_{n=3}^{\infty}a_{n-3}z^n, \\ | ||
+ | A(z) = 1 + z + 4z^2 + 2z\displaystyle\sum_{n=2}^{\infty}a_nz^n + 2z^2\displaystyle\sum_{n=1}^{\infty}a_nz^n - z^3\displaystyle\sum_{n=0}^{\infty}a_nz^n, \\ | ||
+ | A(z) = 1 + z + 4z^2 + 2z(A(z) - 1 - z) + 2z^2(A(z) - 1) - z^3A(z), \\ | ||
+ | A(z) = 1 + z + 4z^2 + 2zA(z) - 2z - 2z^2 + 2z^2A(z) - 2z^2 - z^3A(z), \\ | ||
+ | A(z)(1 - 2z - 2z^2 + z^3) = 1 + z + 4z^2 - 2z - 2z^2 - 2z^2 = 1 - z, \\ | ||
+ | \end{array} | ||
+ | </tex><br> | ||
+ | откуда получаем замкнутое выражение для производящей функции: | ||
+ | <br><tex>G(z) = \dfrac{1 - z}{1 - 2z - 2z^2 + z^3}.</tex><br> | ||
− | === | + | ===<tex>4</tex> пример=== |
− | Рассмотрим | + | Рассмотрим следующее рекуррентное соотношение: |
− | <br>< | + | <br><tex>\begin{array}{rcl} |
a_0&{}={}&1,\\ | a_0&{}={}&1,\\ | ||
a_1&{}={}&2,\\ | a_1&{}={}&2,\\ | ||
− | a_n&{}={}&6a_{n-1}- | + | a_n&{}={}&6a_{n-1}-8a_{n-2}+n, \quad n\geqslant2.\\ |
\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} | + | \displaystyle a_0 + a_1 z + \displaystyle\sum_{n=2}^{\infty}{a_n}{z^n} &{}={}& 1+2z+6\displaystyle\sum_{n=2}^{\infty}{a_{n-1}}{z^n}-8\displaystyle\sum_{n=2}^{\infty}{a_{n-2}}{z^n}+\displaystyle\sum_{n=2}^{\infty}nz^n, \\ |
− | \displaystyle | + | G(z) &{}={}& 1+2z+6z\displaystyle\sum_{n=2}^{\infty}{a_{n-1}}{z^{n-1}}-8z^2\displaystyle\sum_{n=2}^{\infty}{a_{n-2}}{z^{n-2}}+\displaystyle\sum_{n=2}^{\infty}nz^n, \\ |
− | \displaystyle | + | G(z) &{}={}& 1+2z+6z\displaystyle\sum_{n=1}^{\infty}{a_{n}}{z^{n}}-8z^2\displaystyle\sum_{n=0}^{\infty}{a_{n}}{z^{n}}+\displaystyle\sum_{n=2}^{\infty}nz^n, \\ |
− | G(z) &{}={} & | + | G(z) &{}={} & 1+ 2z + 6z(G(z)-a_0)-8z^2G(z) + \displaystyle\sum_{n=2}^{\infty}nz^n.\\ |
− | G(z) &{}={} & 6zG(z)-8z^2G(z) + \sum_{n=2}^{\infty}nz^n.\\ | + | G(z) &{}={} & 1 - 4z + 6zG(z)-8z^2G(z) + \displaystyle\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}= | + | \displaystyle\sum_{n=2}^{\infty}nz^n=z\displaystyle\sum_{n=2}^{\infty}nz^{n-1}=z\displaystyle\sum_{n=2}^{\infty}(z^n)'=z\biggl(\displaystyle\sum_{n=2}^{\infty}z^n\biggr)'. |
− | z\ | + | </tex><br> |
− | |||
− | z\biggl(\sum_{n=2}^{\infty}z^n\biggr)'. | ||
− | </ | ||
Последняя сумма может быть свёрнута: | Последняя сумма может быть свёрнута: | ||
− | <br>< | + | <br><tex> |
− | \sum_{n=2}^{\infty}z^n=\sum_{n=0}^{\infty}z^n-1-z=\ | + | \displaystyle\sum_{n=2}^{\infty}z^n=\displaystyle\sum_{n=0}^{\infty}z^n-1-z=\dfrac{1}{1-z}-1-z=\dfrac{z^2}{1-z}. |
− | </ | + | </tex><br> |
Подставив свёрнутое выражение обратно, имеем, | Подставив свёрнутое выражение обратно, имеем, | ||
− | <br>< | + | <br><tex> |
− | z\biggl(\sum_{n=2}^{\infty}z^n\biggr)' = z \biggl(\ | + | z\biggl(\displaystyle\sum_{n=2}^{\infty}z^n\biggr)' = z \biggl(\dfrac{z^2}{1-z}\biggr)'=\dfrac{z^2(2-z)}{(1-z)^2}. |
− | </ | + | </tex><br> |
Таким образом, наше последнее уравнение примет вид | Таким образом, наше последнее уравнение примет вид | ||
− | <br>< | + | <br><tex> |
− | G(z) = 1 -4z + 6zG(z)-8z^2G(z) + \ | + | G(z) = 1 -4z + 6zG(z)-8z^2G(z) + \dfrac{z^2(2-z)}{(1-z)^2}.\\ |
− | </ | + | </tex><br> |
− | Это уравнение для производящей функции. Из него выражаем < | + | Это уравнение для производящей функции. Из него выражаем <tex>G(z)</tex>: |
− | <br>< | + | <br><tex> |
− | G(z) = \ | + | G(z) = \dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}. |
− | </ | + | </tex><br> |
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей: | Разложим знаменатель на множители и разобьём дробь на сумму простых дробей: | ||
− | <br>< | + | <br><tex> |
− | G(z) = \ | + | G(z) = \dfrac{1-6z+11z^2-5z^3}{(1-6z+8z^2)(1-z)^2}=\dfrac{1-6z+11z^2-5z^3}{(1-2z)(1-4z)(1-z)^2}=\dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}. |
− | \ | + | </tex><br> |
− | |||
− | </ | ||
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее: | Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее: | ||
− | <br>< | + | <br><tex> |
− | \ | + | \dfrac{1}{(1-z)^2} =(1-z)^{-2} =\displaystyle\sum_{n=0}^{\infty}\binom{-2}{n}(-z)^n=\displaystyle\sum_{n=0}^{\infty}(-1)^n\binom{n+1}{1}(-z)^n =\displaystyle\sum_{n=0}^{\infty}(n+1)z^n. |
− | (1-z)^{-2} = | + | </tex><br> |
− | \sum_{n=0}^{\infty}\ | ||
− | |||
− | \sum_{n=0}^{\infty}(n+1)z^n. | ||
− | </ | ||
Теперь соберём ответ: | Теперь соберём ответ: | ||
− | <br>< | + | <br><tex> |
− | G(z) = \ | + | G(z) = \dfrac{1/3}{(1-z)^2}+\dfrac{7/9}{1-z}-\dfrac{1/2}{1-2z}+\dfrac{7/18}{1-4z}=\dfrac{1}{3}\displaystyle\sum_{n=0}^{\infty}(n+1)z^n+ |
− | + | \dfrac{7}{9}\displaystyle\sum_{n=0}^{\infty}z^n-\dfrac{1}{2}\displaystyle\sum_{n=0}^{\infty}2^nz^n+\dfrac{7}{18}\displaystyle\sum_{n=0}^{\infty}4^nz^n. | |
− | +\ | + | </tex><br> |
− | </ | ||
Значит, | Значит, | ||
− | <br>< | + | <br><tex> |
a_n= | a_n= | ||
− | \ | + | \dfrac{n+1}{3} |
− | +\ | + | +\dfrac{7}{9} |
− | -\ | + | -\dfrac{2^n}{2} |
− | +\ | + | +\dfrac{7\cdot4^n}{18}= |
− | \ | + | \dfrac{7\cdot4^n+6n+20}{18} - 2^{n-1}. |
− | </ | + | </tex><br> |
+ | |||
+ | |||
+ | ==См. также== | ||
+ | * [[Производящая функция]] | ||
+ | * [[Арифметические действия с формальными степенными рядами]] | ||
+ | |||
+ | == Источники информации == | ||
+ | * [http://www.genfunc.ru/theory/rsol/ Решение рекуррентных соотношений] | ||
+ | |||
+ | [[Категория: Дискретная математика и алгоритмы]] | ||
+ | [[Категория: Производящая функция]] |
Текущая версия на 19:22, 4 сентября 2022
Содержание
Определения
Определение: |
Рекуррентная формула (англ. recurrence relation) — формула вида | , выражающая каждый следующий член последовательности через предыдущих членов и номер члена последовательности , вместе с заданными первыми p членами, где — порядок рекуррентного соотношения.
Для рекуррентного соотношения, которому удовлетворяет последовательность
мы часто хотим получить выражение для . Например, для рекуррентного соотношения, задающего числа Фибоначчи:
член может быть записан следующим образом:
Для этого можно использовать метод производящих функций (англ. generating function method).
Метод производящих функций
Алгоритм получения выражения для чисел
, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из шагов.- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
- Домножить каждую строчку на в соответствующей степени ( ) и сложить все выражения, многоточие надо рассматривать как множество из выражений, где . В левой части получится сумма — это производящая функция, назовем ее . Правую часть преобразовать так, чтобы она превратилась в выражение, включающее .
- Решить полученное уравнение, получив для выражение в замкнутом виде.
- Разложить в степенной ряд, коэффициент при будет искомым выражением для .
Примеры
пример
Производящие функции позволяют решать рекуррентные соотношение механически по одному и тому же алгоритму. Рассмотрим общую схему на простом примере, который позволит продемонстрировать базовые приёмы работы.
Задано линейное однородное рекуррентное соотношение порядка
Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером
. В данном случае порядок равен , так как для вычисления требуется знать и .Будем искать производящую функцию последовательности в виде
с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на
Теперь сложим все уравнения для всех значений
Левая часть уравнения в точности равна
Равенство
получатся вынесением в первой степени за знак суммы, это необходимо, чтобы уровнять степень переменной и индекс переменной a внутри суммы. Действие — изменение индекса суммирования, которое позволяет избавиться от . Равенство получается, если прибавить и снова отнять значение , чтобы получить полную сумму от до . Равенство справедливо в силу того, что .Аналогичные манипуляции со второй суммой дают нам выражение
Теперь наше исходное уравнение для производящей функции принимает вид:
откуда получаем производящую функцию последовательности в замкнутом виде:
Отыскав производящую функцию в замкнутом виде, её нужно снова разложить в ряд. Это можно сделать разными способами, но самый простой из них — разбить всю дробь на простые дроби и применить формулу для разложения
Теперь разобьём дробь на сумму простых дробей:
Вспомним разложение для простейшей рациональной функции:
Из этого разложения следует, что
Таким образом,
С другой стороны, мы искали
поэтому, в силу равенства рядов, (для ).
пример: числа Фибоначчи
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
Складываем все строчки:
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
Таким образом,
Нам известно разложение следующей рациональной функции:
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на
Аналогично (но с делением на
Таким образом,
и, следовательно,
Данное выражение можно упростить, если обратить внимание на то, что
пример
Найдём производящую функцию для последовательности квадратов чисел Фибоначчи: $1, 1, 4, 9, 25, \ldots, f_k^2,\ldots$.
По определению последовательности Фибоначчи выполняется:
Возведя в квадрат и сложив, получим:
Обозначим рассматриваемую последовательность , а её члены , тогда:
Рекуррентное соотношение:
Приведём суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
пример
Рассмотрим следующее рекуррентное соотношение:
Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи:
Вспомним, что
поэтому
Последняя сумма может быть свёрнута:
Подставив свёрнутое выражение обратно, имеем,
Таким образом, наше последнее уравнение примет вид
Это уравнение для производящей функции. Из него выражаем
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей:
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее:
Теперь соберём ответ:
Значит,