Решение рекуррентных соотношений — различия между версиями
(→Общая схема) |
|||
Строка 12: | Строка 12: | ||
==Общая схема== | ==Общая схема== | ||
− | Пусть последовательность <tex>(a_0, a_1, a_2, … )</tex> удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для <tex>a_n</tex> (при <tex>n\ | + | Пусть последовательность <tex>(a_0, a_1, a_2, … )</tex> удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для <tex>a_n</tex> (при <tex>n\geqslant 0</tex>) в замкнутом виде (если это возможно). [[Производящая_функция| Производящие функции]] позволяют делать эту работу почти механически по одному и тому же алгоритму. Рассмотрим общую схему на простом примере, который позволит продемонстрировать базовые приёмы работы. |
Задано линейное однородное рекуррентное соотношение порядка <tex>2</tex> с постоянными коэффициентами: | Задано линейное однородное рекуррентное соотношение порядка <tex>2</tex> с постоянными коэффициентами: | ||
Строка 18: | Строка 18: | ||
a_0&{}={}&0,\\ | a_0&{}={}&0,\\ | ||
a_1&{}={}&1,\\ | a_1&{}={}&1,\\ | ||
− | a_n&{}={}&5a_{n-1}-6a_{n-2}, \quad n\ | + | a_n&{}={}&5a_{n-1}-6a_{n-2}, \quad n\geqslant2.\\ |
\end{array} | \end{array} | ||
</tex><br> | </tex><br> | ||
Строка 33: | Строка 33: | ||
1\cdot a_0&{}={}&0\cdot 1,\\ | 1\cdot a_0&{}={}&0\cdot 1,\\ | ||
z\cdot a_1&{}={}&0\cdot 1,\\ | z\cdot a_1&{}={}&0\cdot 1,\\ | ||
− | z^n\cdot a_n&{}={}&5a_{n-1}-6a_{n-2}\cdot z^n, \quad n\ | + | z^n\cdot a_n&{}={}&5a_{n-1}-6a_{n-2}\cdot z^n, \quad n\geqslant2.\\ |
\end{array} | \end{array} | ||
</tex><br> | </tex><br> | ||
Строка 96: | Строка 96: | ||
G(z)=\displaystyle\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\ | + | поэтому, в силу равенства рядов, <tex>a_n=3^n-2^n</tex> (для <tex>n\geqslant 0</tex>). |
==Метод производящих функций== | ==Метод производящих функций== | ||
Строка 102: | Строка 102: | ||
<ol> | <ol> | ||
<li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <tex>k</tex>): | <li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <tex>k</tex>): | ||
− | <br><tex>a_{0} = …, \\ a_{1} = …, \\ a_{k-1} = …, \\ a_{n} = …, n\ | + | <br><tex>a_{0} = …, \\ a_{1} = …, \\ a_{k-1} = …, \\ a_{n} = …, n\geqslant k</tex> |
</li> | </li> | ||
− | <li>Домножить каждую строчку на <tex>z</tex> в соответствующей степени и просуммировать строчки для всех <tex>n\ | + | <li>Домножить каждую строчку на <tex>z</tex> в соответствующей степени и просуммировать строчки для всех <tex>n\geqslant0</tex>.</li> |
<li>В полученном уравнении привести все суммы <tex>∑</tex> к замкнутому виду. Получить уравнение для производящей функции.</li> | <li>В полученном уравнении привести все суммы <tex>∑</tex> к замкнутому виду. Получить уравнение для производящей функции.</li> | ||
<li>Выразить <tex>G(z)</tex> в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням <tex>z</tex>.</li> | <li>Выразить <tex>G(z)</tex> в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням <tex>z</tex>.</li> | ||
Строка 116: | Строка 116: | ||
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> | </tex><br> | ||
Строка 124: | Строка 124: | ||
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> | </tex><br> | ||
Строка 200: | Строка 200: | ||
a_0&{}={}&1,\\ | a_0&{}={}&1,\\ | ||
a_1&{}={}&2,\\ | a_1&{}={}&2,\\ | ||
− | a_n&{}={}&6a_{n-1}-8f_{n-2}+n, \quad n\ | + | a_n&{}={}&6a_{n-1}-8f_{n-2}+n, \quad n\geqslant2.\\ |
\end{array} | \end{array} | ||
</tex><br> | </tex><br> |
Версия 13:35, 18 марта 2018
Содержание
Определения
Определение: |
Рекуррентная формула (англ. Recurrence relation) — формула вида | , выражающая каждый член последовательности через предыдущих членов и возможно номер члена последовательности .
Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят замкнутая форма (англ. Closed-form), то есть получение в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда:
может быть переведена в замкнутую форму: метод производящих функций (англ. Generating Function Method).
. Для этого можно использоватьОбщая схема
Пусть последовательность Производящие функции позволяют делать эту работу почти механически по одному и тому же алгоритму. Рассмотрим общую схему на простом примере, который позволит продемонстрировать базовые приёмы работы.
удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для (при ) в замкнутом виде (если это возможно).Задано линейное однородное рекуррентное соотношение порядка
Порядок соотношения — это его «глубина», то есть количество предшествующих элементов, требуемых для вычисления элемента с номером
. В данном случае порядок равен , так как для вычисления требуется знать и .Будем искать производящую функцию последовательности в виде
с этой целью умножим верхнюю строчку в записи рекуррентного соотношения на
Теперь сложим все уравнения для всех значений
Левая часть уравнения в точности равна
Равенство
получатся вынесением в первой степени за знак суммы, это необходимо, чтобы уровнять степень переменной и индекс переменной a внутри суммы. Действие — изменение индекса суммирования, которое позволяет избавиться от . Равенство получается, если прибавить и снова отнять значение , чтобы получить полную сумму от до . Равенство справедливо в силу того, что .Аналогичные манипуляции со второй суммой дают нам выражение
Теперь наше исходное уравнение для производящей функции принимает вид:
откуда получаем производящую функцию последовательности в замкнутом виде —
Отыскав производящую функцию в замкнутом виде, её нужно снова разложить в ряд. Это можно сделать разными способами, но самый простой из них — разбить всю дробь на простые дроби и применить формулу для разложения
Теперь разобьём дробь на сумму простых дробей:
Вспомним разложение для простейшей рациональной функции:
Из этого разложения следует, что
Таким образом,
С другой стороны, мы искали
поэтому, в силу равенства рядов, (для ).
Метод производящих функций
Алгоритм получения замкнутого выражения для чисел
, удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из шагов.- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
):
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Примеры
Числа Фибоначчи
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
Складываем все строчки:
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
откуда получаем замкнутое выражение для производящей функции:
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
Таким образом,
Нам известно разложение следующей рациональной функции:
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на
Аналогично (но с делением на
Таким образом,
и, следовательно,
Данное выражение можно упростить, если обратить внимание на то, что
Произвольное соотношение
Рассмотрим следующее рекуррентное соотношение:
Следующие действия аналогичны тем, которые мы делали для чисел Фибоначчи:
Вспомним, что
поэтому
Последняя сумма может быть свёрнута:
Подставив свёрнутое выражение обратно, имеем,
Таким образом, наше последнее уравнение примет вид
Это уравнение для производящей функции. Из него выражаем
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей:
Дальше мы знаем что делать со всеми этими дробями, кроме, разве лишь, первой. Рассмотрим её (без множителя) подробнее:
Теперь соберём ответ:
Значит,