Производящая функция — различия между версиями
Martoon (обсуждение | вклад) (→Примеры простых производящих функций) |
Dantesto (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | ''' | + | '''Производящая функция''' (англ. ''generating function'') — это формальный степенной ряд: |
<tex>G(z)=\sum_{n=0}^\infty a_n z^n</tex>, | <tex>G(z)=\sum_{n=0}^\infty a_n z^n</tex>, | ||
порождающий (производящий) последовательность <tex>(a_0, a_1, a_2, ...)</tex>. | порождающий (производящий) последовательность <tex>(a_0, a_1, a_2, ...)</tex>. | ||
Строка 17: | Строка 17: | ||
* Исследования асимптотического поведения последовательности; | * Исследования асимптотического поведения последовательности; | ||
* Доказательства тождеств с последовательностями; | * Доказательства тождеств с последовательностями; | ||
− | * Решения задачи подсчета объектов в комбинаторике. Например, в доказательстве [[Нахождение количества разбиений числа на слагаемые|пентагональной теоремы]] или в задаче нахождения количества расстановок m ладей на доске n × n; | + | * Решения задачи подсчета объектов в комбинаторике. Например, в доказательстве [[Нахождение количества разбиений числа на слагаемые|пентагональной теоремы]] или в задаче нахождения количества расстановок <tex>m</tex> ладей на доске <tex>n</tex> × <tex>n</tex>; |
* Вычисления бесконечных сумм. | * Вычисления бесконечных сумм. | ||
== Примеры производящих функций == | == Примеры производящих функций == | ||
Рассмотрим производящие функции для различных комбинаторных последовательностей: | Рассмотрим производящие функции для различных комбинаторных последовательностей: | ||
− | * <tex dpi = "180">\prod_{n=1}^\infty (1-x^n)</tex> {{---}} производящая функция для разности количества разбиений числа n в четное и нечетное число различных слагаемых. Например коэффициент при <tex>x^5</tex> {{---}} +1, потому-что существует два разбиение на четное число различных слагаемых (4+1; 3+2) и одно на нечетное (5). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять (второе слагаемое {{---}} <tex>-x^k</tex>) или не взять (первое {{---}} 1). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы. | + | * <tex dpi = "180">\prod_{n=1}^\infty (1-x^n)</tex> {{---}} производящая функция для разности количества разбиений числа <tex>n</tex> в четное и нечетное число различных слагаемых. Например коэффициент при <tex>x^5</tex> {{---}} <tex>+1</tex>, потому-что существует два разбиение на четное число различных слагаемых (<tex>4+1</tex>; <tex>3+2</tex>) и одно на нечетное (<tex>5</tex>). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять (второе слагаемое {{---}} <tex>-x^k</tex>) или не взять (первое {{---}} <tex>1</tex>). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы. |
− | * <tex dpi = "180"> \prod_{n=1}^\infty \frac{1}{1-x^n}</tex> {{---}} производящая функция для последовательности <tex>p_n</tex>, где <tex>p_i</tex> {{---}} количество разбиений числа i на слагаемые. | + | * <tex dpi = "180"> \prod_{n=1}^\infty \frac{1}{1-x^n}</tex> {{---}} производящая функция для последовательности <tex>p_n</tex>, где <tex>p_i</tex> {{---}} количество разбиений числа <tex>i</tex> на слагаемые. |
* <tex dpi = "180">\prod_{n=1}^\infty (1+x^n)</tex> {{---}} производящая функция для последовательности <tex>d_n</tex>, где <tex>d_i</tex> {{---}} количество разбиений на различные слагаемые. | * <tex dpi = "180">\prod_{n=1}^\infty (1+x^n)</tex> {{---}} производящая функция для последовательности <tex>d_n</tex>, где <tex>d_i</tex> {{---}} количество разбиений на различные слагаемые. | ||
Строка 37: | Строка 37: | ||
== Примеры решений задач методом производящих функций == | == Примеры решений задач методом производящих функций == | ||
=== Решение рекуррентных соотношений === | === Решение рекуррентных соотношений === | ||
− | Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, <tex>f_n</tex> {{---}} числа Фибоначчи или <tex>C_n</tex> {{---}} числа Каталана. Метод производящих функций позволяет получить выражение для <tex>a_n</tex> через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что z достаточно мало. | + | Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например, <tex>f_n</tex> {{---}} числа Фибоначчи или <tex>C_n</tex> {{---}} числа Каталана. Метод производящих функций позволяет получить выражение для <tex>a_n</tex> через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что <tex>z</tex> достаточно мало. |
− | Пусть последовательность <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>a_n</tex>, удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов: |
− | # Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен k, то есть количество предшествующих элементов, требуемых для вычисления элемента с номером n, равно k): | + | # Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <tex>k</tex>, то есть количество предшествующих элементов, требуемых для вычисления элемента с номером <tex>n</tex>, равно <tex>k</tex>): |
#: <tex>a_0=...,</tex> | #: <tex>a_0=...,</tex> | ||
#: <tex>a_1=...,</tex> | #: <tex>a_1=...,</tex> | ||
#: <tex>...</tex> | #: <tex>...</tex> | ||
#: <tex>a_{k-1}=...,</tex> | #: <tex>a_{k-1}=...,</tex> | ||
− | #: <tex>a_{n}=..., n \ | + | #: <tex>a_{n}=..., n \geqslant k.</tex> |
− | # Домножить каждую строчку на z в соответствующей степени и просуммировать строчки для всех | + | # Домножить каждую строчку на <tex>z</tex> в соответствующей степени и просуммировать строчки для всех <tex>n \geqslant 0 </tex>. |
# В полученном уравнении привести все суммы <tex>\sum</tex> к замкнутому виду. Получить уравнение для производящей функции. | # В полученном уравнении привести все суммы <tex>\sum</tex> к замкнутому виду. Получить уравнение для производящей функции. | ||
# Выразить <tex>G(z)</tex> в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням <tex>z</tex>. | # Выразить <tex>G(z)</tex> в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням <tex>z</tex>. | ||
Строка 57: | Строка 57: | ||
<tex>a_1=2,</tex> | <tex>a_1=2,</tex> | ||
− | <tex>a_n=6a_{n-1}-8a_{n-2}+n, n \ | + | <tex>a_n=6a_{n-1}-8a_{n-2}+n, n \geqslant 2</tex> |
Запишем производящую функцию для этой последовательности и преобразуем правую часть: | Запишем производящую функцию для этой последовательности и преобразуем правую часть: | ||
Строка 77: | Строка 77: | ||
− | Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью <tex>nb_n</tex> (в нашем случае последовательность <tex>b_n=(1, 1, 1, ...)</tex>). Такая последовательность получается путём дифференцирования функции <tex>B(z)</tex>, производящей для <tex>b_n</tex>, с последующим умножением результата на z: | + | Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью <tex>nb_n</tex> (в нашем случае последовательность <tex>b_n=(1, 1, 1, ...)</tex>). Такая последовательность получается путём дифференцирования функции <tex>B(z)</tex>, производящей для <tex>b_n</tex>, с последующим умножением результата на <tex>z</tex>: |
Строка 107: | Строка 107: | ||
− | Разложим знаменатель на множители и [http://www.genfunc.ru/theory/pril04/ | + | Разложим знаменатель на множители и разобьём дробь на сумму простых дробей<ref>[http://www.genfunc.ru/theory/pril04/ О разложении рациональной функции в ряд]</ref>: |
<tex dpi = "180">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> | <tex dpi = "180">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> | ||
− | Разложим первое слагаемое в ряд, используя [http://www.genfunc.ru/theory/pril02/ | + | Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты<ref>[http://www.genfunc.ru/theory/pril02/ Расширенные биномиальные коэффициенты]</ref>: |
Строка 130: | Строка 130: | ||
=== Расчет дисперсии геометрического распределения === | === Расчет дисперсии геометрического распределения === | ||
− | Метод производящих функций также используется для нахождения математического ожидания и дисперсии различных распределений в теории вероятностей. Например, в [http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 | + | Метод производящих функций также используется для нахождения математического ожидания и дисперсии различных распределений в теории вероятностей. Например, в геометрическом распределении<ref>[http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 Геометрическое распределение]</ref> для нахождения дисперсии <tex>\operatorname{D}(\xi)=\operatorname{E}(\xi^2)-(\operatorname{E}(\xi))^2</tex> нужно найти два мат. ожидания: |
Строка 172: | Строка 172: | ||
== Приложения == | == Приложения == | ||
=== Примеры простых производящих функций === | === Примеры простых производящих функций === | ||
− | На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться [http://www.genfunc.ru/theory/pril03/ | + | На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций<ref>[http://www.genfunc.ru/theory/pril03/ Таблица производящих функций]</ref>. |
− | Все суммы <tex dpi="110">\sum</tex> выполняются по переменной <tex>n</tex> от <tex>0</tex> до <tex>\infty</tex>. Элементы последовательности нумеруются от 0. | + | Все суммы <tex dpi="110">\sum</tex> выполняются по переменной <tex>n</tex> от <tex>0</tex> до <tex>\infty</tex>. Элементы последовательности нумеруются от <tex>0</tex>. |
{| class="wikitable" style="width:30cm" border=1 | {| class="wikitable" style="width:30cm" border=1 | ||
|+ | |+ | ||
Строка 180: | Строка 180: | ||
| Последовательность || Производящая функция в виде ряда || Производящая функция в замкнутом виде | | Последовательность || Производящая функция в виде ряда || Производящая функция в замкнутом виде | ||
|-align="left" bgcolor=#FFFFFF | |-align="left" bgcolor=#FFFFFF | ||
− | | <tex>(1, 0, 0,...)</tex> || 1 || 1 | + | | <tex>(1, 0, 0,...)</tex> || <tex>1</tex> || <tex>1</tex> |
|-align="left" bgcolor=#FFFFFF | |-align="left" bgcolor=#FFFFFF | ||
− | | <tex>(0, 0, ..., 0, 1, 0, 0...)</tex> (m нулей в начале) || <tex>z^m</tex> || <tex>z^m</tex> | + | | <tex>(0, 0, ..., 0, 1, 0, 0...)</tex> (<tex>m</tex> нулей в начале) || <tex>z^m</tex> || <tex>z^m</tex> |
|-align="left" bgcolor=#FFFFFF | |-align="left" bgcolor=#FFFFFF | ||
| <tex>(1, 1, 1,...)</tex> || <tex>\sum z^n</tex> || <tex dpi="160">\frac{1}{1-z}</tex> | | <tex>(1, 1, 1,...)</tex> || <tex>\sum z^n</tex> || <tex dpi="160">\frac{1}{1-z}</tex> | ||
Строка 207: | Строка 207: | ||
|} | |} | ||
− | == | + | == Примечания == |
+ | <references/> | ||
+ | |||
+ | == Источники информации == | ||
* [http://kvant.mirror1.mccme.ru/1988/11/razbienie_chisel.htm Вайнштейн Ф., Разбиение чисел. Журнал "Квант" № 11, 1988 год] | * [http://kvant.mirror1.mccme.ru/1988/11/razbienie_chisel.htm Вайнштейн Ф., Разбиение чисел. Журнал "Квант" № 11, 1988 год] | ||
* [http://www.genfunc.ru/ genfunc.ru] | * [http://www.genfunc.ru/ genfunc.ru] | ||
* [http://en.wikipedia.org/wiki/Generating_function Wikipedia - Generating function] | * [http://en.wikipedia.org/wiki/Generating_function Wikipedia - Generating function] | ||
* [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]] | * [[Нахождение количества разбиений числа на слагаемые|Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]] | ||
− | |||
* Graham, Knuth, and Patashnik: Concrete Mathematics | * Graham, Knuth, and Patashnik: Concrete Mathematics | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Комбинаторика]] | [[Категория: Комбинаторика]] |
Версия 01:48, 11 декабря 2016
Определение: |
Производящая функция (англ. generating function) — это формальный степенной ряд:
порождающий (производящий) последовательность , . |
Метод производящих функций был разработан Эйлером в 1750-х годах.
Содержание
Применение
Производящая функция используется для:
- Компактной записи информации о последовательности;
- Нахождения зависимости для последовательности , заданной рекуррентным соотношением. Например, для чисел Фибоначчи;
- Нахождения рекуррентного соотношения для последовательности — вид производящей функции может помочь найти формулу;
- Исследования асимптотического поведения последовательности;
- Доказательства тождеств с последовательностями;
- Решения задачи подсчета объектов в комбинаторике. Например, в доказательстве пентагональной теоремы или в задаче нахождения количества расстановок ладей на доске × ;
- Вычисления бесконечных сумм.
Примеры производящих функций
Рассмотрим производящие функции для различных комбинаторных последовательностей:
- — производящая функция для разности количества разбиений числа в четное и нечетное число различных слагаемых. Например коэффициент при — , потому-что существует два разбиение на четное число различных слагаемых ( ; ) и одно на нечетное ( ). Правильность этого легко осознать, если понять, что каждая скобка представляет какое-то слагаемое и мы можем его взять (второе слагаемое — ) или не взять (первое — ). Эта производящая функция используется в комбинаторном доказательстве пентагональной теоремы.
- — производящая функция для последовательности , где — количество разбиений числа на слагаемые.
- — производящая функция для последовательности , где — количество разбиений на различные слагаемые.
- — производящая функция для последовательности , где — количество разбиений на нечётные слагаемые. С помощью метода производящих функций можно доказать, что производящие функции последовательностей равны, соответственно :
Примеры решений задач методом производящих функций
Решение рекуррентных соотношений
Существует целый класс последовательностей, задаваемых рекуррентным соотношением, например,
— числа Фибоначчи или — числа Каталана. Метод производящих функций позволяет получить выражение для через номер элемента в последовательности в замкнутом виде, то есть в таком виде, что выражение можно вычислить, предполагая, что достаточно мало.Пусть последовательность
удовлетворяет некоторому рекуррентному соотношению. Мы хотим получить выражение для (при ) в замкнутом виде. Алгоритм получения замкнутого выражения для чисел , удовлетворяющих рекуррентному соотношению, с помощью производящих функций состоит из 4 шагов:- Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен
- Домножить каждую строчку на в соответствующей степени и просуммировать строчки для всех .
- В полученном уравнении привести все суммы к замкнутому виду. Получить уравнение для производящей функции.
- Выразить в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням .
Для демонстрации универсальности метода рассмотрим довольно произвольное рекуррентное соотношение:
Запишем производящую функцию для этой последовательности и преобразуем правую часть:
Для того, чтобы замкнуть последнюю сумму воспользуемся очень важным приемом, который используется при преобразовании производящих функций. Фактически мы имеем дело с последовательностью (в нашем случае последовательность ). Такая последовательность получается путём дифференцирования функции , производящей для , с последующим умножением результата на :
Тогда замкнем последнее слагаемое следующим образом:
Таким образом наше последнее слагаемое примет вид:
Это уравнение для производящей функции. Из него выражаем :
Разложим знаменатель на множители и разобьём дробь на сумму простых дробей[1]:
Разложим первое слагаемое в ряд, используя расширенные биномиальные коэффициенты[2]:
Расчет дисперсии геометрического распределения
Метод производящих функций также используется для нахождения математического ожидания и дисперсии различных распределений в теории вероятностей. Например, в геометрическом распределении[3] для нахождения дисперсии нужно найти два мат. ожидания:
которые фактически являются производящими функциями последовательностей и :
.
Тогда:
Приложения
Примеры простых производящих функций
На последнем шаге приведения производящей функции к замкнутому виду требуется разложить полученные слагаемые в ряд. Для этого можно воспользоваться таблицей основных производящих функций[4].
Все суммы
выполняются по переменной от до . Элементы последовательности нумеруются от .Последовательность | Производящая функция в виде ряда | Производящая функция в замкнутом виде |
( нулей в начале) | ||
(повторяется через ) | ||
Примечания
Источники информации
- Вайнштейн Ф., Разбиение чисел. Журнал "Квант" № 11, 1988 год
- genfunc.ru
- Wikipedia - Generating function
- Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера
- Graham, Knuth, and Patashnik: Concrete Mathematics