Решение рекуррентных соотношений — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
<ol>
 
<ol>
 
<li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <math>k</math>):
 
<li>Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен <math>k</math>):
<math>a_{0} = ...,<br>a_{1} = ...,<br>a_{k-1} = ...,<br>a_{n} = ..., n&ge;k</math>
+
<br><math>a_{0} = ..., \\ a_{1} = ..., \\ a_{k-1} = ..., \\ a_{n} = ..., n&ge;k</math>
 
</li>
 
</li>
  
Строка 29: Строка 29:
 
====ЧИСЛА ФИБОНАЧЧИ====
 
====ЧИСЛА ФИБОНАЧЧИ====
 
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
 
Рассмотрим рекуррентное соотношение для чисел Фибоначчи:
<br>[[Файл:Img39.png]]<br>
+
 
 +
<br><math>\begin{array}{rcl}
 +
f_0&{}={}&0,\\
 +
f_1&{}={}&1,\\
 +
f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geq2.\\
 +
\end{array}
 +
</math><br>
 
Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих:
 
Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих:
<br>[[Файл:Img40.png]]<br>
+
 
 +
<br><math>
 +
\begin{tabular}{\vert c\vert c\vert c\vert c\vert c\vert c...
 +
...& 2 & 3 & 5 & 8 & 13 & 21 & 34 \\
 +
\hline
 +
\end{tabular}
 +
</math><br>
 +
Эти числа очень быстро растут, например, f10=55, f20=6765, f30=832040, f100=354224848179261915075.
 +
 
 
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
 
Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:
<br>[[Файл:Img45.png]]<br>
+
 
 +
<br><math>\begin{array}{rcl}
 +
1\cdot f_0&{}={}&0\cdot 1,\\
 +
z\cdot f_1&{}={}&1\cdot z,\\
 +
z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geq2.\\
 +
\end{array}
 +
</math><br>
 
Складываем все строчки:
 
Складываем все строчки:
<br>[[Файл:Img46.png]]<br>
+
 
 +
<br><math>
 +
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.
 +
</math><br>
 
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
 
Третий шаг алгоритма требует привести все суммы к замкнутому виду:
<br>[[Файл:Img47.png]]<br>
+
 
 +
<br><math>\begin{array}{rcl}
 +
G(z) &{}={}& \displaystyle z + z\sum_{n=z} &{}={}& \displaystyle z + zG(z)+z^2G(z),\\
 +
\end{array}
 +
</math><br>
 
откуда получаем замкнутое выражение для производящей функции:
 
откуда получаем замкнутое выражение для производящей функции:
<br>[[Файл:Img48.png]]<br>
+
 
Осталось разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
+
<br><math>
<br>[[Файл:Img49.png]]<br>
+
G(z) = \frac{z}{1-z-z^2}.
 +
</math><br>
 +
Осталось «всего лишь» разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:
 +
 
 +
<br><math>\displaylines{
 +
1-z-z^2 = 0 \cr
 +
z_1=-\frac{1-\sqrt{5}}{2}, z_2=-\frac{1+\sqrt{5}}{2}.
 +
}
 +
</math><br>
 +
Таким образом (проверьте),
 +
 
 +
<br><math>
 +
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}.
 +
</math><br>
 +
Как теперь поступить с этими выражениями? Ведь пока нам известно разложение только одной рациональной функции:
 +
 
 +
<br><math>
 +
\frac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots.
 +
</math><br>
 +
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на z1:
 +
 
 +
<br><math>
 +
\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}.
 +
</math><br>
 +
Аналогично (но с делением на z2) поступим со второй дробью:
 +
 
 +
<br><math>
 +
\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}.
 +
</math><br>
 
Таким образом,
 
Таким образом,
<br>[[Файл:Img50.png]]<br>
+
 
Нам известно разложение только следующей рациональной функции:
+
<br><math>
<br>[[Файл:Img31.png]]<br>
+
G(z)=\sum_{n=0}^{\infty} f_nz^n =
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на <math>z1</math>:
+
\sum_{n=0}^{\infty}\b...
<br>[[Файл:Img52.png]]<br>
+
...rac{1}{z_1^n} + \frac{1}{z_2-z_1}\frac{1}{z_2^n} \biggr)z^n,
Аналогично (но с делением на <math>z2</math>) поступим со второй дробью:
+
</math><br>
<br>[[Файл:Img53.png]]<br>
 
Таким образом,
 
<br>[[Файл:Img54.png]]<br>
 
 
и, следовательно,
 
и, следовательно,
<br>[[Файл:Img55.png]]<br>
+
 
Данное выражение можно упростить, если обратить внимание на то, что <math>1/z1=-z2</math>, <math>1/z2=-z1</math> и <math>z1-z2=√5</math>:
+
<br><math>
<br>[[Файл:Img59.png]]<br>
+
f_n = \frac1{z_1-z_2}\frac{1}{z_1^n} + \frac1{z_2-z_1}\frac{1}{z_2^n}.
 +
</math><br>
 +
Данное выражение можно «причесать», если обратить внимание на то, что 1/z1=-z2, 1/z2=-z1 и z1-z2=√5 (корень из 5):
 +
 
 +
<br><math>
 +
f_n=\frac{1}{\sqrt{5}}\left( \biggl( \frac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \frac{1-\sqrt{5}}{2} \biggr)^n \right).
 +
</math><br>
  
 
====БОЛЕЕ СЛОЖНОЕ СООТНОШЕНИЕ====
 
====БОЛЕЕ СЛОЖНОЕ СООТНОШЕНИЕ====

Версия 23:02, 12 марта 2018

Определения

Определение:
Рекуррентная формула — формула вида [math]a_n=f(n, a_{n-1}, a_{n-2}, \dots, a_{n-p} ) [/math], выражающая каждый член последовательности [math]a_n[/math] через [math]p[/math] предыдущих членов и возможно номер члена последовательности [math]n[/math].


Во многих задачах полезно знать, есть ли у рекурсивной функции нерекурсивная или как еще говорят «замкнутая» форма, т.е. получение [math]f(n)[/math] в виде аналитически заданной функции. Например, рекурсивная функция, описывающая сумму чисел натурального ряда:

[math] f = \begin{cases} f(0)=0; \\ f(n) = n + f(n-1),\quad n \gt 0 \end{cases}[/math]

может быть переведена в замкнутую форму: [math]f = \frac{n(n+1)}{2}[/math]. Для этого можно использовать метод производящих функций.

Метод производящих функций

Алгоритм получения замкнутого выражения для чисел [math]a_{n}[/math], удовлетворяющих рекуррентному соотношению, с помощью производящих функций cостоит из 4 шагов.

  1. Записать рекуррентное соотношение и начальные данные для него в следующем виде (если порядок соотношения равен [math]k[/math]):
    [math]a_{0} = ..., \\ a_{1} = ..., \\ a_{k-1} = ..., \\ a_{n} = ..., n≥k[/math]
  2. Домножить каждую строчку на [math]z[/math] в соответствующей степени и просуммировать строчки для всех [math]n≥0[/math].
  3. В полученном уравнениипривести все суммы [math]∑[/math] к замкнутому виду. Получить уравнение для производящей функции.
  4. Выразить [math]G(z)[/math] в явном виде (решить уравнение, полученное на предыдущем шаге) и разложить производящую функцию в ряд по степеням [math]z[/math].

Доказательство

по построению

Примеры

ЧИСЛА ФИБОНАЧЧИ

Рассмотрим рекуррентное соотношение для чисел Фибоначчи:


[math]\begin{array}{rcl} f_0&{}={}&0,\\ f_1&{}={}&1,\\ f_n&{}={}&f_{n-1}+f_{n-2}, \quad n\geq2.\\ \end{array} [/math]
Это хорошо известная последовательность, каждый элемент которой (кроме нулевого и первого) равен сумме двух предыдущих:


[math] \begin{tabular}{\vert c\vert c\vert c\vert c\vert c\vert c... ...& 2 & 3 & 5 & 8 & 13 & 21 & 34 \\ \hline \end{tabular} [/math]
Эти числа очень быстро растут, например, f10=55, f20=6765, f30=832040, f100=354224848179261915075.

Первый шаг алгоритма мы уже выполнили, записав рекуррентное соотношение. Выполним второй шаг:


[math]\begin{array}{rcl} 1\cdot f_0&{}={}&0\cdot 1,\\ z\cdot f_1&{}={}&1\cdot z,\\ z^n\cdot f_n&{}={}&(f_{n-1}+f_{n-2})\cdot z^n, \quad n\geq2.\\ \end{array} [/math]
Складываем все строчки:


[math] 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. [/math]
Третий шаг алгоритма требует привести все суммы к замкнутому виду:


[math]\begin{array}{rcl} G(z) &{}={}& \displaystyle z + z\sum_{n=z} &{}={}& \displaystyle z + zG(z)+z^2G(z),\\ \end{array} [/math]
откуда получаем замкнутое выражение для производящей функции:


[math] G(z) = \frac{z}{1-z-z^2}. [/math]
Осталось «всего лишь» разложить её в ряд (чего требует четвёртый шаг алгоритма). С этой целью нужно разложить знаменатель на множители. Найдем корни уравнения:


[math]\displaylines{ 1-z-z^2 = 0 \cr z_1=-\frac{1-\sqrt{5}}{2}, z_2=-\frac{1+\sqrt{5}}{2}. } [/math]
Таким образом (проверьте),


[math] 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}. [/math]
Как теперь поступить с этими выражениями? Ведь пока нам известно разложение только одной рациональной функции:


[math] \frac{1}{1-z} = \sum_{n=0}^{\infty}z^n = 1 + z + z^2 + z^3 + \cdots. [/math]
Рассмотрим первую дробь и поделим в ней числитель и знаменатель на z1:


[math] \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}. [/math]
Аналогично (но с делением на z2) поступим со второй дробью:


[math] \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}. [/math]
Таким образом,


[math] G(z)=\sum_{n=0}^{\infty} f_nz^n = \sum_{n=0}^{\infty}\b... ...rac{1}{z_1^n} + \frac{1}{z_2-z_1}\frac{1}{z_2^n} \biggr)z^n, [/math]
и, следовательно,


[math] f_n = \frac1{z_1-z_2}\frac{1}{z_1^n} + \frac1{z_2-z_1}\frac{1}{z_2^n}. [/math]
Данное выражение можно «причесать», если обратить внимание на то, что 1/z1=-z2, 1/z2=-z1 и z1-z2=√5 (корень из 5):


[math] f_n=\frac{1}{\sqrt{5}}\left( \biggl( \frac{1+\sqrt{5}}{2} \biggr)^n - \biggl( \frac{1-\sqrt{5}}{2} \biggr)^n \right). [/math]

БОЛЕЕ СЛОЖНОЕ СООТНОШЕНИЕ