Processing math: 52%

Funkcje tworzące w rozwiązywaniu zależności rekurencyjnych

Przykład

Rozważmy ciąg Fibonacci'ego, tzn. ciąg (f0,f1,f2,f3,) zdefiniowany w następujący sposób:

f0=0,f1=1,fn=fn1+fn2dla n2.

Znamy już postać zwartą jego wyrazów. Tym razem zobaczymy jak można ją otrzymać używając funkcji tworzących. Zależności rekurencyjne dla fn przekładają się natychmiast na następujące równanie, jakie musi spełniać funkcja tworząca F(x) dla ciągu Fibonacci'ego

F(x)=n=0fnxn=x+n=2(fn1+fn2)xn=x+xF(x)+x2F(x).

Przekształcając powyższe równanie otrzymujemy:

F(x)=x1xx2.      (11)

Celem, który chcemy osiągnąć to wykorzystanie funkcji x1xx2 do przedstawienia współczynników fn w postaci zwartej. Pierwszym krokiem będzie rozłożenie ułamka w równaniu (11) na sumę ułamków o mianownikach będących funkcjami liniowymi

F(x)=x1xx2=x(1z0x)(1z1x)=15(1(1z0x)1(1z1x)),

gdzie z0=1+52 jest złotą liczbą oraz z1=152 liczbą do niej sprzężoną. Korzystając z równania (7) otrzymujemy teraz

F(x)=15(n=0z0nxnn=0z1nxn)=15n=0(z0nz1n)xn.

Tak więc dostajemy szybko znaną nam już postać zwartą fn=15(z0nz1n).

Podczas rozwiązywania przykładu związanego z liczbami Fibonacci'ego natrafiliśmy na problem polegający na przedstawieniu w postaci szeregu wyrażenia x1xx2. Przyjrzymy się dokładniej tego typu wyrażeniom.

Stopień wielomianu degP(x)=n, jeśli P(x)=p0+p1x++pnxn.

Funkcja wymierna R(x) to funkcja postaci P(x)Q(x), gdzie P(x) oraz Q(x)0 są wielomianami skończonego stopnia.

Obserwacja 7.6

Niech A(x) oraz B(x) będą wielomianami degA(x)degB(x). Wtedy istnieją wielomiany Q(x) oraz R(x) takie, że

A(x)=Q(x)B(x)+R(x),

gdzie degR(x)<degA(x)=degQ(x)+degB(x).

Przykład

Niech

A(x)=3x5+5x4+2x3+x2+2orazB(x)=x3+2x21.

Wtedy wielomiany

Q(x)=3x2x+3orazR(x)=x+2

spełniają

A(x)=3x5+5x4+2x3+x2+2=(3x2x+3)(x3+2x21)+x+2=Q(x)B(x)+R(x).

Ponadto degA(x)=5=2+3=degQ(x)+degB(x).

Wniosek 7.7

Niech P(x) oraz Q(x) będą wielomianami takimi, że degP(x)degQ(x). Wtedy funkcję wymierną R(x)=P(x)/Q(x), można przedstawić w postaci

R(x)=P(x)Q(x)=A(x)+B(x)Q(x),

dla pewnych wielomianów A(x) oraz B(x)

spełniających degB(x)<degQ(x).

Będziemy więc skupiali się jedynie nad takimi funkcjami wymiernymi R(x)=P(x)/Q(x), dla których degP(x)<degQ(x).

Twierdzenie 7.8

Niech P(x) oraz Q(x) będą wielomianami takimi, że

  • degP(x)<degQ(x),
  • Q(x)=S(x)T(x), gdzie oba wielomiany S(x),T(x) są stopnia co najmniej 2,
  • q00.

Wtedy istnieją wielomiany A(x) oraz B(x) takie, że degA(x)<degS(x) i degB(x)<degT(x) oraz

P(x)Q(x)=A(x)S(x)+B(x)T(x).

Uwaga

Twierdzenie 7.8 pozwala na rozbijanie skomplikowanych funkcji wymiernych na sumę prostszych.

Wniosek [Metoda rozwijania funkcji wymiernej w szereg] Rozważmy funkcję wymierną w postaci

R(x)=P(x)Q(x),

gdzie degP(x)<degQ(x), oraz q00. Załóżmy ponadto, że wielomian Q(x) rozkłada się na następujący iloczyn czynników liniowych

Q(x)=q0(1ρ1x)m1(1ρ2x)m2(1ρkx)mk.

Warto wspomnieć, że dalecy nie każdy wielomian ma taki rozkład. Na przykład 1+x2 jest nierozkładalny i nieliniowy. Wykorzystując parokrotnie Twierdzenie 7.8 otrzymujemy wielomiany P1(x),,Pk(x) takie, że

R(x)=P(x)Q(x)=P1(x)(1ρ1x)m1+P2(x)(1ρ2x)m2++Pk(x)(1ρkx)mk,

gdzie degPi(x)<mi. Na mocy Obserwacji 7.6 możemy sprowadzić wielomian Pi(x) do

Pi(x)=P1i(x)(1ρix)+γmi=P2i(x)(1ρix)2+γmi1(1ρix)+γmi=γ1(1ρix)mi1++γmi1(1ρix)+γmi,

gdzie midegPi(x)>degP1i(x)>degP2i(x)>. W konsekwencji otrzymamy

R(x) = ki=1(γi,11ρix+γi,2(1ρix)2++γi,mi(1ρix)mi).

Mnożąc teraz obie strony przez

Q(x)/q0=(1ρ1x)m1(1ρ2x)m2(1ρkx)mk

i porównując współczynniki przy odpowiadających potęgach xi uzyskujemy pewien układ równań, rozwiązanie którego da nam poszukiwane współczynniki γi,j. Z drugiej strony, z Wniosku 7.5 wynika, że

\displaystyle \frac{1}{(1-\rho x)^{m+1}} =\sum_{n=1}^{\infty}{ { m+n \choose m } \rho^n x^n}

i w konsekwencji:

\displaystyle [x^n]{R}(x)\ =\ \sum_{i=1}^k{\left(\gamma_{i,1}+ \gamma_{i,2}{n+1\choose 1}+ \ldots+ \gamma_{i,m_i}{n+m_i-1\choose m_i - 1}\right) }\rho_i^n.      (12)

Przykład

Opisaną wyżej metodę ogólną zilustrujemy na przykładzie funkcji

{R}(x)=\frac{x^2}{1-x-x^2+x^3}.

Wielomian 1-x-x^2+x^3 ma jeden podwójny pierwiastek x=1 oraz jeden pojedynczy x=-1 . Poznana metoda rozwijania funkcji wymiernej w szereg daje więc

{R}(x) =\frac{x^2}{(1-x)^2\cdot(1+x)}=\frac{\alpha}{1-x}+\frac{\beta}{(1-x)^2}+\frac{\gamma}{1+x}.

Mnożąc obie strony przez (1-x)^2\cdot(1+x) otrzymujemy:

x^2=\alpha(1-x^2)+\beta(1+x)+\gamma(1-2x+x^2).

Dwa wielomiany są równe, gdy współczynniki przy odpowiadających potęgach są sobie równe. Wartości \alpha, \beta, \gamma można więc wyliczyć z układu równań

\left \{ \begin{array} {l} \alpha & +\ \beta & +\ \gamma & = & 0 \\ \alpha & & -\ 2\gamma & = & 0 \\ & -\ \beta & +\ \gamma & = & 1. \end{array} \right.

Rozwiązaniem powyższego układu są wartości \alpha=-\frac{1}{4},\ \beta=\frac{1}{2},\ \gamma=-\frac{1}{4}. W konsekwencji otrzymujemy szereg

\begin{align*}{R}(x) & =\sum_{n=0}^{\infty}(-\frac{1}{4}+\frac{1}{2}(n+1) - \frac{1}{4}(-1)^n)x^n \\ & =x^2+x^3+2x^4+2x^5+3x^6+3x^7+4x^8+\ldots. \end{align*}

Jeżeli mianownik {Q}(x) funkcji wymiernej {R}(x)=\frac{{P}(x)}{{Q}(x)} posiada jedynie pierwiastki jednokrotne, to następne twierdzenie znacznie przyspiesza rozkład {R}(x) na sumę.

Twierdzenie 7.9

Jeśli {R}(x)={P}(x)/{Q}(x) , gdzie {Q}(x)=q_0\cdot(1-\rho_1x)\cdot\ldots\cdot(1-\rho_1x) i liczby \rho_1,\ldots,\rho_l są parami różne, to w przypadku gdy {P}(x) jest wielomianem stopnia mniejszego niż l , zachodzi

{x^n}{R}(x) =a_1\rho_1^n+\ldots+a_l\rho_l^n, \quad\textrm{dla}\ a_k=\frac{-\rho_k\cdot{P}(1/\rho_k)}{{Q'}(1/\rho_k)}.

Przykład

Mianownik {Q}(x) funkcji wymiernej

{R}(x)=\frac{{P}(x)}{{Q}(x)}=\frac{2x}{1-5x-2x^2+24x^3}.

ma trzy różne pierwiastki i można {R}(x) przedstawić jako

{R}(x)=\frac{2x}{(1+2x)(1-3x)(1-4x)}.

Na mocy Twierdzenia 7.9 otrzymujemy więc, że

{x^n}{R}(x)=-\frac{2}{15}(-2)^n-\frac{6}{5}3^n+\frac{4}{3}4^n.

Jak widzieliśmy na przykładzie ciągu Fibonacci'ego, funkcje tworzące mogą być bardzo pomocne przy szukaniu postaci zwartej pewnych ciągów zadanych rekurencyjnie.

Jednorodne, liniowe równanie rekurencyjneto równanie postaci

\left \{ \begin{array} {l} r_0 & = & c_0, \\ & \cdots & \\ r_{k-1} & = & c_{k-1}, \\ r_n & = & a_1r_{n-1}+a_2r_{n-2}+\ldots+a_kr_{n-k}\quad\textrm{dla}\ n\geq k, \end{array} \right .

gdzie c_0,\ldots,c_{k-1},a_1,\ldots,a_k są liczbami rzeczywistymi (niezależnymi od parametru rekurencyjnego n ).

Rozważmy najpierw przypadek, gdy k=2 , tzn. równanie postaci

\left \{ \begin{array} {l} r_0 & = & c_0, \\ r_1 & = & c_1, \\ r_n & = & a_1r_{n-1}+a_2r_{n-2}\quad\textrm{dla}\ n\geq 2. \end{array} \right .      (13)

Przykładem takiego równania była zależność opisująca ciąg Fibonacci'ego. Zastosowanie ostatniej równości z (13) do funkcji tworzącej ciągu (r_0,r_1,r_2,\ldots) daje:

\begin{align*}{R}(x) & =r_0+r_1x+r_2x^2+r_3x^3+\ldots+r_nx^n+\ldots \\ & =c_0+c_1x+(a_1r_1+a_2r_0)x^2+\ldots+(a_1r_{n-1}+a_2r_{n-2})x^n+\ldots \\ & =c_0+(c_1-a_1c_0)x+a_1x{R}(x)+a_2x^2{R}(x), \end{align*}

tak więc

{R}(x)\ =\ \frac{c_0+(c_1-a_1c_0)x}{1-a_1x-a_2x^2}

Dla funkcji {A}(x)=1-a_1x-a_2x^2=(1-\rho_1x)(1-\rho_2x) mogą zajść trzy przypadki:

  • \rho_1 \neq \rho_2 są różnymi liczbami rzeczywistymi. Wtedy

r_n\ =\ \alpha\rho_1^n+\beta\rho_2^n,

gdzie \alpha oraz \beta są liczbami rzeczywistymi.

  • \rho_1 = \rho_2 . Wtedy

r_n\ =\ (\alpha n+\beta)\rho_1^n,

gdzie \alpha oraz \beta są liczbami rzeczywistymi.

  • \bigtriangledown Wartości \rho_1 oraz \rho_2 są różnymi liczbami zespolonymi. W tym wypadku całe rozumowanie przeprowadzone wcześniej dla liczb rzeczywistych pozostaje w mocy, tyle że dokonywane jest teraz na liczbach zespolonych. Dostajemy więc

r_n\ =\ \alpha\rho_1^n+\beta\rho_2^n.

gdzie \alpha oraz \beta są pewnymi liczbami zespolonymi. Przypadek pierwszy jest więc szczególną sytuacją obecnego przypadku. Może być jednak rozważany bez znajomości liczb zespolonych.

Wracamy teraz do ogólnego, jednorodnego liniowego równania rekurencyjnego. Analogicznie do przypadku, gdy k=2 , otrzymujemy że

{R}(x)\ =\ \frac{{P}(x)}{1-a_1x-a_2x^2-\ldots-a_kx^k},

gdzie {P}(x) jest wielomianem co najwyżej stopnia k-1 , zależnym od wartości c_0,\ldots,c_{k-1},a_1,\ldots,a_k . Korzystając z ogólnej metody rozwijania funkcji wymiernej w szereg, możemy odzyskać wyrazy ciągu r_n , jako współczynniki [x^n]{R}(x) zgodnie z równaniem (12).

Przykład

Równanie rekurencyjne ma następującą postać

\left \{ \begin{array} {l} r_0 & = & 0, \\ r_1 & = & 0, \\ r_2 & = & 1, \\ r_n & = & r_{n-1}+r_{n-2}-r_{n-3}\quad\textrm{dla}\ n\geq 3. \end{array}\right .

Ostatnia zależność prowadzi do funkcji tworzącej {R}(x) spełniającej

{R}(x)=x^2 + x{R}(x) + x^2{R}(x) - x^3{R}(x).

Po dokonaniu prostego wyliczenia dostajemy:

{R}(x)=\frac{x^2}{1-x-x^2+x^3}.

W przykładzie omawianym przy okazji metody rozwijania funkcji wymiernej w szereg, wyliczyliśmy współczynniki [x^n]{R}(x) , a zatem mamy:

r_n=-\frac{1}{4}+\frac{1}{2}(n+1) - \frac{1}{4}(-1)^n\quad\textrm{dla dowolnego}\ n=0,1,2,3,\ldots.