Решение рекуррентных соотношений — различия между версиями
Строка 22: | Строка 22: | ||
</tex><br> | </tex><br> | ||
− | Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером n. В данном случае порядок равен <tex>2</tex>, так как для вычисления <tex>a_n<tex> требуется знать <tex>a_{n-1}</tex> и <tex>a_{n-2}</tex>. | + | Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером <tex>n</tex>. В данном случае порядок равен <tex>2</tex>, так как для вычисления <tex>a_n</tex> требуется знать <tex>a_{n-1}</tex> и <tex>a_{n-2}</tex>. |
Будем искать производящую функцию последовательности в виде | Будем искать производящую функцию последовательности в виде | ||
<br><tex> | <br><tex> | ||
− | G(z)=\sum_{n=0}^{\infty} a_nz^n = a_0+a_1z+a_2z^2+\cdots, | + | G(z)=\displaystyle\sum_{n=0}^{\infty} a_nz^n = a_0+a_1z+a_2z^2+\cdots, |
</tex><br> | </tex><br> | ||
− | с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на <tex>z^0</tex>, следующую — на <tex>z^1<tex> и последнюю — на <tex>z^n</tex>: | + | с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на <tex>z^0</tex>, следующую — на <tex>z^1</tex> и последнюю — на <tex>z^n</tex>: |
<br><tex>\begin{array}{rcl} | <br><tex>\begin{array}{rcl} | ||
1\cdot a_0&{}={}&0\cdot 1,\\ | 1\cdot a_0&{}={}&0\cdot 1,\\ | ||
− | z\cdot | + | z\cdot a_1&{}={}&0\cdot 1,\\ |
− | + | z^n\cdot a_n&{}={}&5a_{n-1}-6a_{n-2}\cdot z^n, \quad n\geq2.\\ | |
\end{array} | \end{array} | ||
</tex><br> | </tex><br> | ||
Строка 39: | Строка 39: | ||
Теперь сложим все уравнения для всех значений <tex>n</tex>: | Теперь сложим все уравнения для всех значений <tex>n</tex>: | ||
<br><tex> | <br><tex> | ||
− | \underbrace{a_0 + a_1 z + \sum_{n=2}^{\infty}a_nz^n}_{ | + | \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><br> | ||
Левая часть уравнения в точности равна <tex>G(z)</tex>, а в правой части есть суммы, очень похожие на функцию <tex>G(z)</tex>, но не равные ей. Эти суммы нужно любым законным способом привести к виду <tex>G(z)</tex>. Начнём с первой: | Левая часть уравнения в точности равна <tex>G(z)</tex>, а в правой части есть суммы, очень похожие на функцию <tex>G(z)</tex>, но не равные ей. Эти суммы нужно любым законным способом привести к виду <tex>G(z)</tex>. Начнём с первой: | ||
<br><tex> | <br><tex> | ||
− | \sum_{n=2}^{\infty}a_{n-1}z^n \stackrel{(1)}{=} | + | \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\sum_{ | + | z\displaystyle\sum_{n=1}^{\infty}a_{n}z^n \stackrel{(3)}{=} |
− | + | z{\biggr( z\displaystyle\sum_{n=1}^{\infty}a_{n}z^n+a_0}_{G(z)} - a_0\biggr)\stackrel{(4)}{=}zG(z). | |
− | \stackrel{(4)}{=} | ||
</tex><br> | </tex><br> | ||
Строка 55: | Строка 53: | ||
Аналогичные манипуляции со второй суммой дают нам выражение | Аналогичные манипуляции со второй суммой дают нам выражение | ||
<br><tex> | <br><tex> | ||
− | \sum_{n=2}^{\infty}a_{n-2}z^n = z^2\sum_{n=2}^{\infty}a_{n-2}z^{n-2} | + | \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\sum_{n=0}^{\infty}a_{n}z^{n}=z^ | + | = z^2\displaystyle\sum_{n=0}^{\infty}a_{n}z^{n}=z^2G(z). |
</tex><br> | </tex><br> | ||
Строка 81: | Строка 79: | ||
Вспомним разложение для простейшей рациональной функции: | Вспомним разложение для простейшей рациональной функции: | ||
<br><tex> | <br><tex> | ||
− | \dfrac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. | + | \dfrac{1}{1-z} = \displaystyle\sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. |
</tex><br> | </tex><br> | ||
Из этого разложения следует, что | Из этого разложения следует, что | ||
<br><tex> | <br><tex> | ||
− | \dfrac{1}{1-3z}= \sum_{n=0}^{\infty}(3z)^n \quad\mbox{ и }\quad \dfrac{1}{1-2z}= \sum_{n=0}^{\infty}(2z)^n. | + | \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> | </tex><br> | ||
Таким образом, | Таким образом, | ||
<br><tex> | <br><tex> | ||
− | G(z) = \sum_{n=0}^{\infty}3^nz^n - \sum_{n=0}^{\infty}2^nz^n = \sum_{n=0}^{\infty}(3^n-2^n)z^n. | + | 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><br> | ||
С другой стороны, мы искали <tex>G(z)</tex> в виде | С другой стороны, мы искали <tex>G(z)</tex> в виде | ||
<br><tex> | <br><tex> | ||
− | G(z)=\sum_{n=0}^{\infty} a_nz^n, | + | G(z)=\displaystyle\sum_{n=0}^{\infty} a_nz^n, |
</tex><br> | </tex><br> | ||
поэтому, в силу равенства рядов, <tex>a_n=3^n-2^n</tex> (для <tex>n\geq 0</tex>). | поэтому, в силу равенства рядов, <tex>a_n=3^n-2^n</tex> (для <tex>n\geq 0</tex>). | ||
− | |||
==Метод производящих функций== | ==Метод производящих функций== |
Версия 00:39, 17 марта 2018
Содержание
Определения
Определение: |
Рекуррентная формула — формула вида | , выражающая каждый член последовательности через предыдущих членов и возможно номер члена последовательности .
Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда:
может быть переведена в замкнутую форму:
. Для этого можно использовать метод производящих функций.Общая схема
Пусть последовательность
удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для (при ) в замкнутом виде (если это возможно). Производящие функции позволяют делать эту работу почти механически по одному и тому же алгоритму. Рассмотрим общую схему на простом примере, который позволит продемонстрировать базовые приёмы работы.Задано линейное однородное рекуррентное соотношение порядка
Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером
. В данном случае порядок равен , так как для вычисления требуется знать и .Будем искать производящую функцию последовательности в виде
с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на
Теперь сложим все уравнения для всех значений
Левая часть уравнения в точности равна
Равенство
получатся вынесением z в первой степени за знак суммы, это необходимо, чтобы уровнять степень переменной и индекс переменной a внутри суммы. Действие — изменение индекса суммирования, которое позволяет избавиться от . Равенство получается, если прибавить и снова отнять значение , чтобы получить полную сумму от до . Равенство справедливо в силу того, что .Аналогичные манипуляции со второй суммой дают нам выражение
Теперь наше исходное уравнение для производящей функции принимает вид:
откуда получаем производящую функцию последовательности в замкнутом виде —
Отыскав производящую функцию в замкнутом виде, её нужно снова разложить в ряд. Это можно сделать разными способами, но самый простой из них — разбить всю дробь на простые дроби и применить формулу для разложения
Теперь разобьём дробь на сумму простых дробей:
Вспомним разложение для простейшей рациональной функции:
Из этого разложения следует, что
Таким образом,
С другой стороны, мы искали
поэтому, в силу равенства рядов, (для ).
Метод производящих функций
Алгоритм получения замкнутого выражения для чисел
, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из шагов.- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
):
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Примеры
Числа Фибоначчи
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
Складываем все строчки:
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
Таким образом,
Нам известно разложение следующей рациональной функции:
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на
Аналогично (но с делением на
Таким образом,
и, следовательно,
Данное выражение можно упростить, если обратить внимание на то, что
Произвольное соотношение
Рассмотрим следующее рекуррентное соотношение:
Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи:
Вспомним, что
поэтому
Последняя сумма может быть свёрнута:
Подставив свёрнутое выражение обратно, имеем,
Таким образом, наше последнее уравнение примет вид
Это уравнение для производящей функции. Из него выражаем
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей:
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее:
Теперь соберём ответ:
Значит,