Matematyka dyskretna 1/Wykład 7: Funkcje tworzące: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 61: | Linia 61: | ||
<center><math>\aligned\fGen{E} | <center><math>\aligned\fGen{E}(x)&=&\left(1+x+x^2+x^3\ldots\right)\cdot\left(1+x^5+x^{10}+x^{15}\ldots\right)\cdot\left(1+x^{10}+x^{20}+x^{30}\ldots\right)\\ | ||
&&\cdot\left(1+x^{25}+x^{50}+x^{75}\ldots\right)\cdot\left(1+x^{50}+x^{100}+x^{150}\ldots\right)\\ | &&\cdot\left(1+x^{25}+x^{50}+x^{75}\ldots\right)\cdot\left(1+x^{50}+x^{100}+x^{150}\ldots\right)\\ | ||
&=&1+x+x^2+x^3+x^4+2x^5+2x^6+2x^7+2x^8+2x^9+4x^{10}+\ldots | &=&1+x+x^2+x^3+x^4+2x^5+2x^6+2x^7+2x^8+2x^9+4x^{10}+\ldots | ||
Linia 69: | Linia 69: | ||
Godne zauważenia jest, że liczba różnych możliwych sposobów rozmiany <math>n</math> centów (równa liczbie grup monet w odpowiednim nawiasie we wzorze ([[#int|1]])) jest równa współczynnikowi stojącemu przy jednomianie <math>x^n</math>. | Godne zauważenia jest, że liczba różnych możliwych sposobów rozmiany <math>n</math> centów (równa liczbie grup monet w odpowiednim nawiasie we wzorze ([[#int|1]])) jest równa współczynnikowi stojącemu przy jednomianie <math>x^n</math>. | ||
{{kotwica|funktw|'''Funkcja tworząca'''}} <math>\fGen{G} | {{kotwica|funktw|'''Funkcja tworząca'''}} <math>\fGen{G}(x)</math> dla ciągu liczb rzeczywistych (lub zespolonych) <math>\left(g_0,g_1,g_2,g_3,\ldots\right)</math> to szereg funkcyjny zmiennej rzeczywistej (lub zespolonej) <math>x</math> postaci | ||
<center><math>\fGen{G} | <center><math>\fGen{G}(x)=\sum_{n=0}^{\infty}{g_nx^n}=g_0+g_1x+g_2x^2+g_3x^3+g_4x^4+\ldots. | ||
</math></center> | </math></center> | ||
Na oznaczenie współczynnika <math>n</math>-tego wyrazu szeregu <math>\fGen{G} | Na oznaczenie współczynnika <math>n</math>-tego wyrazu szeregu <math>\fGen{G}(x)</math> używać będziemy oznaczenia <math>\vect{x^n}\fGen{G}(x)=g_n</math>. | ||
{{uwaga|Jak traktowac funkcje tworzące|| | {{uwaga|Jak traktowac funkcje tworzące|| | ||
Na funkcje tworzące można spojrzeć dwoiście. Pierwszym sposobem jest potraktowanie <math>\fGen{G} | Na funkcje tworzące można spojrzeć dwoiście. Pierwszym sposobem jest potraktowanie <math>\fGen{G}(x)</math> jako szeregu liczb rzeczywistych | ||
(lub ogólniej zespolonych). Oczywistym pytaniem jest tu kwestia zbieżności szeregu <math>\fGen{G} | (lub ogólniej zespolonych). Oczywistym pytaniem jest tu kwestia zbieżności szeregu <math>\fGen{G}(x)=\sum_{n=0}^{\infty}{g_nx^n}</math>. Z wykładu Analiza Matematyczna wiemy, że szereg <math>\fGen{G}(x)</math> jest zbieżny wtedy i tylko wtedy, gdy istnieje stała <math>M\geq0</math> ograniczająca wszystkie skończone początkowe sumy, tzn. | ||
Linia 87: | Linia 87: | ||
zachodzi dla dowolnego <math>n\geq0</math>. Ponadto jeśli dla pewnej liczby <math>x_0\in\mathbb{R}</math> szereg <math>\fGen{G} | zachodzi dla dowolnego <math>n\geq0</math>. Ponadto jeśli dla pewnej liczby <math>x_0\in\mathbb{R}</math> szereg <math>\fGen{G}(x_0)=g_0+g_1x_0+g_2x_0^2+\ldots</math> jest zbieżny, to i także szereg <math>\fGen{G}(x_1)=g_0+g_1x_1+g_2x_1^2+\ldots</math> jest zbieżny dla dowolnego <math>x_1\in\mathbb{R}</math> spełniającego <math>\left\vert x_1\right\vert\leq\left\vert x_0\right\vert</math>. Możemy więc określić ''promień zbieżności'' szeregu jako taką liczbę <math>r\in\mathbb{R}_*\cup{\left\{ {\infty} \right\}\ }=\vect{0,+\infty}</math>, że | ||
* jeśli <math>x<r</math>, to <math>\fGen{G} | * jeśli <math>x<r</math>, to <math>\fGen{G}(x)</math> jest zbieżny; | ||
* jeśli <math>x>r</math>, to <math>\fGen{G} | * jeśli <math>x>r</math>, to <math>\fGen{G}(x)</math> jest rozbieżny. | ||
Szereg <math>\fGen{G} | Szereg <math>\fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots</math> można więc potraktować jako funkcję | ||
Linia 100: | Linia 100: | ||
o wartościach <math>\fGen{G} | o wartościach <math>\fGen{G}(x)=\lim_{n\rightarrow\infty}{\left(g_0+g_1x+g_2x^2+\ldots+g_nx^n\right)}.</math> Oczywiście <math>\fGen{G}(0)=g_0</math>, więc dla <math>x=0</math> szereg <math>\fGen{G}(x)</math> jest zbieżny. | ||
Drugim podejściem, bardziej użytecznym w praktycznych obliczeniach i przekształceniach jest spojrzenie na szereg <math>\fGen{G} | Drugim podejściem, bardziej użytecznym w praktycznych obliczeniach i przekształceniach jest spojrzenie na szereg <math>\fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots</math> jako formę zapisu ciągu <math>\left(g_0,g_1,g_2,\ldots\right)</math>, czyli jedynie jako ciąg symboli. Równości pomiędzy odpowiednimi wzorami służą rozwiązaniu problemów kombinatorycznych, | ||
tak więc traktujemy je jako równości dwu wyrażeń, a nie jako równość dwu funkcji rzeczywistych, pomimo że mają one uzasadnienia w języku analizy matematycznej. | tak więc traktujemy je jako równości dwu wyrażeń, a nie jako równość dwu funkcji rzeczywistych, pomimo że mają one uzasadnienia w języku analizy matematycznej. | ||
Jak zobaczymy na wielu przykładach, funkcje tworzące są bardzo użytecznym narzędziem przy wyznaczaniu wartości elementów ciągu. Jeśli bowiem <math>\fGen{G} | Jak zobaczymy na wielu przykładach, funkcje tworzące są bardzo użytecznym narzędziem przy wyznaczaniu wartości elementów ciągu. Jeśli bowiem <math>\fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots</math> jest funkcją tworzącą ciągu <math>\left(g_0,g_1,g_2,g_3,\ldots\right)</math>, oraz w jakiś sposób będziemy w stanie poznać postać zwartą funkcji <math>G(x)</math>, to rozwijając tę postać zwartą w szereg Taylora, poznamy kolejne współczynniki tego rozwinięcia. A współczynniki te, to właśnie kolejne wyrazy naszego ciągu. | ||
Będziemy się zajmowali jedynie tymi funkcjami, dla których promień zbieżności <math>r>0</math>. Ponadto będziemy pomijać problem zbieżności oraz wartość <math>r</math> promienia zbieżności, skupiając się jedynie na przekształceniach wzorów. Poniżej zebrane zostały te własności, które często wykorzystywane są w takich przekształceniach. | Będziemy się zajmowali jedynie tymi funkcjami, dla których promień zbieżności <math>r>0</math>. Ponadto będziemy pomijać problem zbieżności oraz wartość <math>r</math> promienia zbieżności, skupiając się jedynie na przekształceniach wzorów. Poniżej zebrane zostały te własności, które często wykorzystywane są w takich przekształceniach. | ||
Linia 111: | Linia 111: | ||
{{obserwacje|7.1|obs 7.1| | {{obserwacje|7.1|obs 7.1| | ||
Dla dwu funkcji tworzących <math>\fGen{F} | Dla dwu funkcji tworzących <math>\fGen{F}(x)=f_0+f_1x+f_2x^2+\ldots</math> | ||
oraz <math>\fGen{G} | oraz <math>\fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots</math> mamy: | ||
<center><math>\aligned\fGen{F} | <center><math>\aligned\fGen{F}(x)=\fGen{G}{x}&\Leftrightarrow& f_0=g_0,\ f_1=g_1,\ f_2=g_2,\ \ldots\\ | ||
&&\\ | &&\\ | ||
\alpha\cdot\fGen{F} | \alpha\cdot\fGen{F}(x)+\beta\cdot\fGen{G}{x}&=& \sum_{n=0}^{\infty}{\left(\alpha\cdot f_n+\beta\cdot g_n\right)x^n}\\ | ||
&=&\left(\alpha\cdot f_0+\beta\cdot g_0\right) + \left(\alpha\cdot f_1+\beta\cdot g_1\right)x + \left(\alpha\cdot f_2+\beta\cdot g_2\right)x^2 + \ldots\\ | &=&\left(\alpha\cdot f_0+\beta\cdot g_0\right) + \left(\alpha\cdot f_1+\beta\cdot g_1\right)x + \left(\alpha\cdot f_2+\beta\cdot g_2\right)x^2 + \ldots\\ | ||
&&\\ | &&\\ | ||
\fGen{F} | \fGen{F}(x)\cdot\fGen{G}(x)&=&\sum_{n=0}^{\infty}\left(\sum_{k=0}^n f_k g_{n-k}\right) x^n\\ | ||
&=& f_0g_0 + \left(f_0g_1+f_1g_0\right)x\\ | &=& f_0g_0 + \left(f_0g_1+f_1g_0\right)x\\ | ||
&& + \left(f_0g_2+f_1g_1+f_2g_0\right)x^2\\ | && + \left(f_0g_2+f_1g_1+f_2g_0\right)x^2\\ | ||
Linia 127: | Linia 127: | ||
Wyrażenie <math>\fGen{F} | Wyrażenie <math>\fGen{F}(x)\cdot\fGen{G}(x)</math> nazywać będziemy splotem szeregów <math>\fGen{F}(x)</math> oraz <math>\fGen{G}(x)</math>. | ||
{{twierdzenie|7.2|tw 7.2| | {{twierdzenie|7.2|tw 7.2| | ||
Linia 133: | Linia 133: | ||
<center><math>\fGen{G} | <center><math>\fGen{G}(x)=g_0+g_1x+g_2x^2+g_3x^3+\ldots | ||
</math></center> | </math></center> | ||
ma odwrotną względem mnożenia (splotu), tzn. istnieje funkcja tworząca <math>\fGen{U} | ma odwrotną względem mnożenia (splotu), tzn. istnieje funkcja tworząca <math>\fGen{U}(x)</math> taka, że <math>\fGen{U}(x)\fGen{G}(x)=1</math>, | ||
wtedy i tylko wtedy, gdy <math>g_0\neq0</math>. | wtedy i tylko wtedy, gdy <math>g_0\neq0</math>. | ||
}} | }} | ||
Linia 145: | Linia 145: | ||
{{obserwacje|7.3|obs 7.3| | {{obserwacje|7.3|obs 7.3| | ||
Dla dwu funkcji tworzących <math>\fGen{F} | Dla dwu funkcji tworzących <math>\fGen{F}(x)=f_0+f_1x+f_2x^2+\ldots</math> oraz <math>\fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots</math> mamy:}} | ||
Linia 223: | Linia 223: | ||
Zacznijmy od znalezienia zwartej postaci funkcji tworzącej | Zacznijmy od znalezienia zwartej postaci funkcji tworzącej | ||
<math>\fGen{G} | <math>\fGen{G}(x)=\sum_{n=0}^{\infty}n^2x^n</math>. Korzystając z Wniosku [[#wn_7.5|7.5]] otrzymujemy: | ||
Linia 255: | Linia 255: | ||
co w połączeniu z równościami ([[#wzor_9|9]]) oraz ([[#wzor_10|10]]) | co w połączeniu z równościami ([[#wzor_9|9]]) oraz ([[#wzor_10|10]]) | ||
daje zwartą postać funkcji tworzącej <math>\fGen{G} | daje zwartą postać funkcji tworzącej <math>\fGen{G}(x)</math> dla ciągu <math>1,4,9,\ldots,n^2,\ldots</math>: | ||
<center><math>\fGen{G} | <center><math>\fGen{G}(x)=\sum_{n=0}^{\infty}n^2x^n | ||
=\frac{2}{\left(1-x\right)^3}-\frac{3}{\left(1-x\right)^2}+\frac{1}{1-x}. | =\frac{2}{\left(1-x\right)^3}-\frac{3}{\left(1-x\right)^2}+\frac{1}{1-x}. | ||
</math></center> | </math></center> | ||
Naszym zadaniem było jednakże policzenie funkcji tworzącej <math>H(x)</math> dla ciągu <math>1,1+4,1+4+9,\ldots,1+4+9+\ldots+n^2,\ldots</math>, tzn. ciągu sum początkowych wyrazów ciągu <math>1,4,9,\ldots,n^2,\ldots</math>. Aby uzyskać <math>\fGen{H} | Naszym zadaniem było jednakże policzenie funkcji tworzącej <math>H(x)</math> dla ciągu <math>1,1+4,1+4+9,\ldots,1+4+9+\ldots+n^2,\ldots</math>, tzn. ciągu sum początkowych wyrazów ciągu <math>1,4,9,\ldots,n^2,\ldots</math>. Aby uzyskać <math>\fGen{H}(x)</math> wystarczy więc skorzystać ze wzoru ([[#wzor_7|7]]) i podzielić <math>\fGen{G}(x)</math> przez <math>1-x</math>. | ||
Tak więc poszukiwanym rozwiązaniem są współczynniki funkcji tworzącej | Tak więc poszukiwanym rozwiązaniem są współczynniki funkcji tworzącej | ||
<center><math>\fGen{H} | <center><math>\fGen{H}(x)=\frac{\fGen{G}(x)}{1-x} | ||
=\frac{2}{\left(1-x\right)^4}-\frac{3}{\left(1-x\right)^3}+\frac{1}{\left(1-x\right)^2}. | =\frac{2}{\left(1-x\right)^4}-\frac{3}{\left(1-x\right)^3}+\frac{1}{\left(1-x\right)^2}. | ||
</math></center> | </math></center> | ||
Linia 275: | Linia 275: | ||
<center><math>\aligned\fGen{H} | <center><math>\aligned\fGen{H}(x) | ||
&=&2\sum_{n=0}^{\infty}{n+3 \choose n}x^n-3\sum_{n=0}^{\infty}{n+2 \choose n}x^n+\sum_{n=0}^{\infty}{n+1 \choose n}x^n\\ | &=&2\sum_{n=0}^{\infty}{n+3 \choose n}x^n-3\sum_{n=0}^{\infty}{n+2 \choose n}x^n+\sum_{n=0}^{\infty}{n+1 \choose n}x^n\\ | ||
&=&\sum_{n=0}^{\infty}\left(\frac{1}{3}n^3+\frac{1}{2}n^2+\frac{1}{6}n\right)x^n. | &=&\sum_{n=0}^{\infty}\left(\frac{1}{3}n^3+\frac{1}{2}n^2+\frac{1}{6}n\right)x^n. | ||
Linia 284: | Linia 284: | ||
<center><math>\sum_{k=1}^nk^2=\vect{x^n}\fGen{H} | <center><math>\sum_{k=1}^nk^2=\vect{x^n}\fGen{H}(x)=\frac{2n^3+3n+n}{6}. | ||
</math></center>}} | </math></center>}} | ||
Linia 292: | Linia 292: | ||
<center><math>\fGen{A_k} | <center><math>\fGen{A_k}(x) = 1+x^k+x^{2k}+x^{3k}+\ldots, | ||
</math></center> | </math></center> | ||
Linia 307: | Linia 307: | ||
<center><math>\aligned\fGen{A} | <center><math>\aligned\fGen{A}(x)= \fGen{A_1}(x)&=& \frac{1}{1-x},\\ | ||
\fGen{B} | \fGen{B}(x)= \fGen{A}(x)\cdot \fGen{A_5}(x) &=&\frac{\fGen{A}(x)}{1-x^5},\\ | ||
\fGen{C} | \fGen{C}(x)= \fGen{B}(x)\cdot \fGen{A_{10}}(x) &=&\frac{\fGen{B}(x)}{1-x^{10}},\\ | ||
\fGen{D} | \fGen{D}(x)= \fGen{C}(x)\cdot \fGen{A_{25}}(x) &=&\frac{\fGen{C}(x)}{1-x^{25}},\\ | ||
\fGen{E} | \fGen{E}(x)= \fGen{D}(x)\cdot \fGen{A_{50}}(x) &=&\frac{\fGen{D}(x)}{1-x^{50}}, | ||
\endaligned</math></center> | \endaligned</math></center> | ||
Linia 318: | Linia 318: | ||
<center><math>\aligned\fGen{A} | <center><math>\aligned\fGen{A}(x)&=&1+x\fGen{A}(x),\\ | ||
\fGen{B} | \fGen{B}(x)&=&\fGen{A}(x)+x^5\fGen{B}(x),\\ | ||
\fGen{C} | \fGen{C}(x)&=&\fGen{B}(x)+x^{10}\fGen{C}(x),\\ | ||
\fGen{C} | \fGen{C}(x)&=&\fGen{D}(x)+x^{25}\fGen{C}(x),\\ | ||
\fGen{D} | \fGen{D}(x)&=&\fGen{E}(x)+x^{50}\fGen{D}(x). | ||
\endaligned</math></center> | \endaligned</math></center> | ||
Linia 371: | Linia 371: | ||
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 <math>f_n</math> przekładają się natychmiast na następujące równanie, jakie musi spełniać funkcja tworząca <math>\fGen{F} | 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 <math>f_n</math> przekładają się natychmiast na następujące równanie, jakie musi spełniać funkcja tworząca <math>\fGen{F}(x)</math> dla ciągu Fibonacci'ego | ||
<center><math>\fGen{F} | <center><math>\fGen{F}(x) | ||
=\sum_{n=0}^{\infty}f_nx^n | =\sum_{n=0}^{\infty}f_nx^n | ||
=x+\sum_{n=2}^{\infty}\left(f_{n-1}+f_{n-2}\right)x^n=1+x+x\fGen{F} | =x+\sum_{n=2}^{\infty}\left(f_{n-1}+f_{n-2}\right)x^n=1+x+x\fGen{F}(x)+x^2\fGen{F}(x). | ||
</math></center> | </math></center> | ||
Linia 385: | Linia 385: | ||
{{wzor|wzor_11|11| | {{wzor|wzor_11|11| | ||
<math> | <math> | ||
\fGen{F} | \fGen{F}(x)=\frac{x}{1-x-x^2}. | ||
</math>}} | </math>}} | ||
Linia 394: | Linia 394: | ||
<center><math>\fGen{F} | <center><math>\fGen{F}(x)=\frac{x}{1-x-x^2} | ||
=\frac{x}{\left(1-\gold x\right)\left(1-\goldd x\right)} | =\frac{x}{\left(1-\gold x\right)\left(1-\goldd x\right)} | ||
=\frac{1}{\sqrt{5}}\left(\frac{1}{\left(1-\gold x\right)}-\frac{1}{\left(1-\goldd x\right)}\right), | =\frac{1}{\sqrt{5}}\left(\frac{1}{\left(1-\gold x\right)}-\frac{1}{\left(1-\goldd x\right)}\right), | ||
Linia 403: | Linia 403: | ||
<center><math>\fGen{F} | <center><math>\fGen{F}(x) | ||
=\frac{1}{\sqrt{5}}\left(\sum_{n=1}^{\infty}{\gold^nx^n}-\sum_{n=1}^{\infty}{\goldd^nx^n}\right) | =\frac{1}{\sqrt{5}}\left(\sum_{n=1}^{\infty}{\gold^nx^n}-\sum_{n=1}^{\infty}{\goldd^nx^n}\right) | ||
=\frac{1}{\sqrt{5}}\sum_{n=1}^{\infty}{\left(\gold^n-\goldd^n\right)x^n}. | =\frac{1}{\sqrt{5}}\sum_{n=1}^{\infty}{\left(\gold^n-\goldd^n\right)x^n}. | ||
Linia 436: | Linia 436: | ||
<center><math>\fGen{A} | <center><math>\fGen{A}(x)=3x^5+5x^4+2x^3+x^2+2\quad\textrm{oraz}\quad\fGen{B}(x)=x^3+2x^2-1.</math></center> | ||
</math></center> | |||
Linia 443: | Linia 442: | ||
<center><math>\fGen{Q} | <center><math>\fGen{Q}(x)=3x^2-x+3\quad\textrm{oraz}\quad\fGen{R}(x)=x+2 | ||
</math></center> | </math></center> | ||
Linia 450: | Linia 449: | ||
<center><math>\aligned\fGen{A} | <center><math>\aligned\fGen{A}(x)}&=&3x^5+5x^4+2x^3+x^2+2\\ | ||
&=&\left(3x^2-x+3\right)\cdot\left(x^3+2x^2-1\right)+x+2\\ | &=&\left(3x^2-x+3\right)\cdot\left(x^3+2x^2-1\right)+x+2\\ | ||
&=&\fGen{Q} | &=&\fGen{Q}(x)\fGen{B}(x)+\fGen{R}(x). | ||
\endaligned</math></center> | \endaligned</math></center> | ||
Ponadto <math>deg{\fGen{A} | Ponadto <math>deg{\fGen{A}(x)}=5=2+3=deg{\fGen{Q}(x)}+deg{\fGen{B}(x)}</math>.}} | ||
{{wniosek|7.7|wn 7.7| | {{wniosek|7.7|wn 7.7| | ||
Niech <math>\fGen{P} | Niech <math>\fGen{P}(x)</math> oraz <math>\fGen{Q}(x)</math> będą wielomianami takimi, że <math>deg{\fGen{P}(x)}\geq deg{\fGen{Q}(x)}</math>. Wtedy funkcję wymierną <math>\fGen{R}(x)=\fGen{P}(x)/ \fGen{Q}(x),</math> można przedstawić w postaci | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)\frac{\fGen{P}(x)}{\fGen{Q}(x)}=\fGen{A}(x)+\frac{\fGen{B}(x)}{\fGen{Q}(x)}, | ||
</math></center> | </math></center> | ||
dla pewnych wielomianów <math>\fGen{A} | dla pewnych wielomianów <math>\fGen{A}(x)</math> oraz <math>\fGen{B}(x)</math> | ||
spełniających <math>deg{\fGen{B} | spełniających <math>deg{\fGen{B}(x)}<deg{\fGen{Q}(x)}</math>.}} | ||
Będziemy więc skupiali się jedynie nad takimi funkcjami wymiernymi <math>\fGen{R} | Będziemy więc skupiali się jedynie nad takimi funkcjami wymiernymi <math>\fGen{R}(x)\fGen{P}(x)/\fGen{Q}(x), </math> dla których <math>deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}</math>. | ||
{{twierdzenie|7.8|tw 7.8| | {{twierdzenie|7.8|tw 7.8| | ||
Niech <math>\fGen{P} | Niech <math>\fGen{P}(x)</math> oraz <math>\fGen{Q}(x)</math> będą wielomianami takimi, że | ||
* <math>deg{\fGen{P} | * <math>deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}</math>, | ||
* <math>\fGen{Q} | * <math>\fGen{Q}(x)=\fGen{S}(x)\fGen{T}(x)</math>, gdzie oba wielomiany <math>\fGen{S}(x),\fGen{T}(x)</math> są stopnia co najmniej <math>2</math>, | ||
* <math>q_0\neq0</math>. | * <math>q_0\neq0</math>. | ||
Wtedy istnieją wielomiany <math>\fGen{A} | Wtedy istnieją wielomiany <math>\fGen{A}(x)</math> oraz <math>\fGen{B}(x)</math> takie, że <math>deg{\fGen{A}(x)}<deg{\fGen{S}(x)}</math> i | ||
<math>deg{\fGen{B} | <math>deg{\fGen{B}(x)}<deg{\fGen{T}(x)}</math> oraz | ||
<center><math>\frac{\fGen{P} | <center><math>\frac{\fGen{P}(x)}{\fGen{Q}(x)} | ||
=\frac{\fGen{A} | =\frac{\fGen{A}(x)}{\fGen{S}(x)}+\frac{\fGen{B}(x)}{\fGen{T}(x)}. | ||
</math></center> | </math></center> | ||
Linia 499: | Linia 498: | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)=\frac{\fGen{P}(x)}{\fGen{Q}(x)}, | ||
</math></center> | </math></center> | ||
gdzie <math>deg{\fGen{P} | gdzie <math>deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}</math>, oraz <math>q_0\neq0</math>. Załóżmy ponadto, że wielomian <math>\fGen{Q}(x)</math> rozkłada się na następujący iloczyn czynników liniowych | ||
<center><math>\fGen{Q} | <center><math>\fGen{Q}(x) | ||
=q_0\left(1-\rho_1x\right)^{m_1}\cdot\left(1-\rho_2x\right)^{m_2}\cdot\ldots\cdot\left(1-\rho_kx\right)^{m_k}. | =q_0\left(1-\rho_1x\right)^{m_1}\cdot\left(1-\rho_2x\right)^{m_2}\cdot\ldots\cdot\left(1-\rho_kx\right)^{m_k}. | ||
</math></center> | </math></center> | ||
Warto wspomnieć, że dalecy nie każdy wielomian ma taki rozkład. Na przykład <math>1+x^2</math> jest nierozkładalny i nieliniowy. Wykorzystując parokrotnie Twierdzenie [[#tw_7.8|7.8]] otrzymujemy wielomiany <math>\fGen{P_1} | Warto wspomnieć, że dalecy nie każdy wielomian ma taki rozkład. Na przykład <math>1+x^2</math> jest nierozkładalny i nieliniowy. Wykorzystując parokrotnie Twierdzenie [[#tw_7.8|7.8]] otrzymujemy wielomiany <math>\fGen{P_1}(x),\ldots,\fGen{P_k}(x)</math> takie, że | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x) | ||
=\frac{\fGen{P} | =\frac{\fGen{P}(x)}{\fGen{Q}(x)}=\frac{\fGen{P_1}(x)}{\left(1-\rho_1x\right)^{m_1}}+\frac{\fGen{P_2}(x)}{\left(1-\rho_2x\right)^{m_2}}+\ldots+\frac{\fGen{P_k}(x)}{\left(1-\rho_kx\right)^{m_k}}, | ||
</math></center> | </math></center> | ||
gdzie <math>deg{\fGen{P_i} | gdzie <math>deg{\fGen{P_i}(x)}<m_i</math>. Na mocy Obserwacji [[#obs_7.6|7.6]] możemy sprowadzić wielomian <math>\fGen{P_i}(x)</math> do | ||
<center><math>\aligned\fGen{P_i} | <center><math>\aligned\fGen{P_i}(x)&=&\fGen{P_i^1}(x)\left(1-\rho_ix\right)+\gamma_{m_i}\\ | ||
&=&\fGen{P_i^2} | &=&\fGen{P_i^2}(x)\left(1-\rho_ix\right)^2+\gamma_{m_i-1}\left(1-\rho_ix\right)+\gamma_{m_i}\\ | ||
&\vdots&\\ | &\vdots&\\ | ||
&=&\gamma_1\left(1-\rho_ix\right)^{m_i-1}+\ldots+\gamma_{m_i-1}\left(1-\rho_ix\right)+\gamma_{m_i}, | &=&\gamma_1\left(1-\rho_ix\right)^{m_i-1}+\ldots+\gamma_{m_i-1}\left(1-\rho_ix\right)+\gamma_{m_i}, | ||
Linia 529: | Linia 528: | ||
gdzie <math>m_i\ | gdzie <math>m_i\geq deg{\fGen{P_i}(x)}>deg{\fGen{P_i^1}(x)}>deg{\fGen{P_i^2}(x)}>\ldots</math>. W konsekwencji otrzymamy | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)\ =\ \sum_{i=1}^k{\left(\frac{\gamma_{i,1}}{1-\rho_ix}+\frac{\gamma_{i,2}}{\left(1-\rho_ix\right)^2}+\ldots+\frac{\gamma_{i,m_i}}{\left(1-\rho_ix\right)^{m_i}}\right)}. | ||
</math></center> | </math></center> | ||
Linia 539: | Linia 538: | ||
<center><math>\fGen{Q} | <center><math>\fGen{Q}(x)/q_0=\left(1-\rho_1x\right)^{m_1}\cdot\left(1-\rho_2x\right)^{m_2}\cdot\ldots\cdot\left(1-\rho_kx\right)^{m_k} | ||
</math></center> | </math></center> | ||
Linia 556: | Linia 555: | ||
{{wzor|wzor_12|12| | {{wzor|wzor_12|12| | ||
<math> | <math> | ||
[x^n]\fGen{R} | [x^n]\fGen{R}(x)\ =\ \sum_{i=1}^k{\left(\gamma_{i,1}+ | ||
\gamma_{i,2}{n+1\choose 1}+ | \gamma_{i,2}{n+1\choose 1}+ | ||
\ldots+ | \ldots+ | ||
Linia 568: | Linia 567: | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)=\frac{x^2}{1-x-x^2+x^3}. | ||
</math></center> | </math></center> | ||
Linia 575: | Linia 574: | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x) | ||
=\frac{x^2}{\left(1-x\right)^2\cdot\left(1+x\right)}=\frac{\alpha}{1-x}+\frac{\beta}{\left(1-x\right)^2}+\frac{\gamma}{1+x}. | =\frac{x^2}{\left(1-x\right)^2\cdot\left(1+x\right)}=\frac{\alpha}{1-x}+\frac{\beta}{\left(1-x\right)^2}+\frac{\gamma}{1+x}. | ||
</math></center> | </math></center> | ||
Linia 602: | Linia 601: | ||
<center><math>\aligned\fGen{R} | <center><math>\aligned\fGen{R}(x)&=&\sum_{n=0}^{\infty}\left(-\frac{1}{4}+\frac{1}{2}\left(n+1\right) - \frac{1}{4}\left(-1\right)^n\right)x^n\\ | ||
&=&x^2+x^3+2x^4+2x^5+3x^6+3x^7+4x^8+\ldots. | &=&x^2+x^3+2x^4+2x^5+3x^6+3x^7+4x^8+\ldots. | ||
\endaligned</math></center> | \endaligned</math></center> | ||
Jeżeli mianownik <math>\fGen{Q} | Jeżeli mianownik <math>\fGen{Q}(x)</math> funkcji wymiernej <math>\fGen{R}(x)=\frac{\fGen{P}(x)}{\fGen{Q}(x)}</math> posiada jedynie pierwiastki jednokrotne, to następne twierdzenie znacznie przyspiesza rozkład <math>\fGen{R}(x)</math> na sumę.}} | ||
{{twierdzenie|7.9|tw 7.9| | {{twierdzenie|7.9|tw 7.9| | ||
Jeśli <math>\fGen{R} | Jeśli <math>\fGen{R}(x)=\fGen{P}(x)/\fGen{Q}(x)</math>, gdzie <math>\fGen{Q}(x)=q_0\cdot\left(1-\rho_1x\right)\cdot\ldots\cdot\left(1-\rho_1x\right)</math> i liczby <math>\rho_1,\ldots,\rho_l</math> są parami różne, to w przypadku gdy <math>\fGen{P}(x)</math> jest wielomianem stopnia mniejszego niż <math>l</math>, zachodzi | ||
<center><math>\vect{x^n}\fGen{R} | <center><math>\vect{x^n}\fGen{R}(x) | ||
=a_1\rho_1^n+\ldots+a_l\rho_l^n, | =a_1\rho_1^n+\ldots+a_l\rho_l^n, | ||
\quad\textrm{dla}\ | \quad\textrm{dla}\ a_k=\frac{-\rho_k\cdot\fGen{P}(1/\rho_k}){\fGen{Q'}(1/\rho_k)}. | ||
</math></center> | </math></center> | ||
Linia 622: | Linia 621: | ||
{{przyklad||| | {{przyklad||| | ||
Mianownik <math>\fGen{Q} | Mianownik <math>\fGen{Q}(x)</math> funkcji wymiernej | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)=\frac{\fGen{P}(x)}{\fGen{Q}(x)}=\frac{2x}{1-5x-2x^2+24x^3}. | ||
</math></center> | </math></center> | ||
ma trzy różne pierwiastki i można <math>\fGen{R} | ma trzy różne pierwiastki i można <math>\fGen{R}(x)</math> przedstawić jako | ||
<center><math>\fGen{R} | <center><math>\fGen{R}(x)=\frac{2x}{\left(1+2x\right)\left(1-3x\right)\left(1-4x\right)}. | ||
</math></center> | </math></center> | ||
Linia 639: | Linia 638: | ||
<center><math>\vect{x^n}\fGen{R} | <center><math>\vect{x^n}\fGen{R}(x)=-\frac{2}{15}\left(-2\right)^n-\frac{6}{5}3^n+\frac{4}{3}4^n. | ||
</math></center>}} | </math></center>}} | ||
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. | 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. |
Wersja z 11:19, 21 sie 2006
Przykład
Słynny matematyk Georg Pólya rozważał problem polegający na policzeniu wszystkich możliwych sposobów, na które można rozmienić 50 centów używając jednocentówek , pięciocentówek , dziesięciocentówek , ćwierćdolarówek , oraz półdolarówki . Rozważania te doprowadziły go do użycia analitycznych metod funkcji tworzących w zaproponowanym przez niego rozwiązaniu. W tym i następnym wykładzie poznamy te metody i zobaczymy jak mogą być pomocne w zliczaniu rożnych obiektów kombinatorycznych.
Wracając do problemu rozmieniania monet, wygodnie nam będzie posiadać jeszcze monetę , którą możemy interpretować jako brak monet. Wypiszmy teraz (nadużywając trochę notacji) nieskończoną sumę wszystkich możliwości rozmiany dowolnej kwoty za pomocą jednocentówek
i analogicznie przeanalizujmy sumę dla pieciocentówek
Wtedy zbiór par jest zbiorem wszystkich możliwości rozmiany kwoty mając do dyspozycji dowolnie wiele jednocentówek oraz pięciocentówek.
Sumy wszystkich możliwości rozmiany za pomocą dziesięciocentówek Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(10)}
, ćwierćdolarówek Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(25)}
, oraz półdolarówek Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(50)}
wyglądają następująco:
Dodając kolejno monety Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(10)}
, Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(25)}
, i na końcu Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(50)}
do możliwych rozmian uzyskujemy odpowiednio:
Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \begin{array} {rcl} E&=&\big(\moneta(1)\big)+\big(\moneta(1)\moneta(1)\big)+\big(\moneta(1)\moneta(1)\moneta(1)\big)+\big(\moneta(1)\moneta(1)\moneta(1)\moneta(1)\big)\\ &&+\big(\moneta(1)\moneta(1)\moneta(1)\moneta(1)\moneta(1)+\moneta(5)\big)\\ &&+\big(\moneta(1)\moneta(1)\moneta(1)\moneta(1)\moneta(1)\moneta(1)+\moneta(5)\moneta(1)\big)+\ldots \end{array} } (1)
Zliczając zaś tylko składniki w podsumie odpowiadającej wartości centów, otrzymujemy liczbę sposobów, na które można rozmienić centów przy użyciu monet Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(1)}
, Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(5)}
, Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(10)}
, Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(25)}
, oraz Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(50)}
. Pomysłem pochodzącym od Pólya, było zastąpienie monety Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(1)}
przez zmienną , monety Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(5)}
przez i analogicznie Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(10)}
przez , Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(25)}
przez , oraz Parser nie mógł rozpoznać (nieznana funkcja „\moneta”): {\displaystyle \moneta(50)}
przez . Uzyskujemy w ten sposób nieskończony szereg zmiennej :
Godne zauważenia jest, że liczba różnych możliwych sposobów rozmiany centów (równa liczbie grup monet w odpowiednim nawiasie we wzorze (1)) jest równa współczynnikowi stojącemu przy jednomianie .
Funkcja tworząca Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)} dla ciągu liczb rzeczywistych (lub zespolonych) to szereg funkcyjny zmiennej rzeczywistej (lub zespolonej) postaci
Na oznaczenie współczynnika -tego wyrazu szeregu Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)}
używać będziemy oznaczenia Parser nie mógł rozpoznać (nieznana funkcja „\vect”): {\displaystyle \vect{x^n}\fGen{G}(x)=g_n}
.
Na funkcje tworzące można spojrzeć dwoiście. Pierwszym sposobem jest potraktowanie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)} jako szeregu liczb rzeczywistych (lub ogólniej zespolonych). Oczywistym pytaniem jest tu kwestia zbieżności szeregu Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=\sum_{n=0}^{\infty}{g_nx^n}} . Z wykładu Analiza Matematyczna wiemy, że szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)} jest zbieżny wtedy i tylko wtedy, gdy istnieje stała ograniczająca wszystkie skończone początkowe sumy, tzn.
zachodzi dla dowolnego . Ponadto jeśli dla pewnej liczby szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x_0)=g_0+g_1x_0+g_2x_0^2+\ldots}
jest zbieżny, to i także szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x_1)=g_0+g_1x_1+g_2x_1^2+\ldots}
jest zbieżny dla dowolnego spełniającego . Możemy więc określić promień zbieżności szeregu jako taką liczbę Parser nie mógł rozpoznać (nieznana funkcja „\vect”): {\displaystyle r\in\mathbb{R}_*\cup{\left\{ {\infty} \right\}\ }=\vect{0,+\infty}}
, że
- jeśli , to Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)} jest zbieżny;
- jeśli , to Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)} jest rozbieżny.
Szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots} można więc potraktować jako funkcję
o wartościach Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=\lim_{n\rightarrow\infty}{\left(g_0+g_1x+g_2x^2+\ldots+g_nx^n\right)}.}
Oczywiście Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(0)=g_0}
, więc dla szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)}
jest zbieżny.
Drugim podejściem, bardziej użytecznym w praktycznych obliczeniach i przekształceniach jest spojrzenie na szereg Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots} jako formę zapisu ciągu , czyli jedynie jako ciąg symboli. Równości pomiędzy odpowiednimi wzorami służą rozwiązaniu problemów kombinatorycznych, tak więc traktujemy je jako równości dwu wyrażeń, a nie jako równość dwu funkcji rzeczywistych, pomimo że mają one uzasadnienia w języku analizy matematycznej.
Jak zobaczymy na wielu przykładach, funkcje tworzące są bardzo użytecznym narzędziem przy wyznaczaniu wartości elementów ciągu. Jeśli bowiem Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots} jest funkcją tworzącą ciągu , oraz w jakiś sposób będziemy w stanie poznać postać zwartą funkcji , to rozwijając tę postać zwartą w szereg Taylora, poznamy kolejne współczynniki tego rozwinięcia. A współczynniki te, to właśnie kolejne wyrazy naszego ciągu.
Będziemy się zajmowali jedynie tymi funkcjami, dla których promień zbieżności . Ponadto będziemy pomijać problem zbieżności oraz wartość promienia zbieżności, skupiając się jedynie na przekształceniach wzorów. Poniżej zebrane zostały te własności, które często wykorzystywane są w takich przekształceniach.
Obserwacja 7.1
Dla dwu funkcji tworzących Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)=f_0+f_1x+f_2x^2+\ldots} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=g_0+g_1x+g_2x^2+\ldots} mamy:
Wyrażenie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)\cdot\fGen{G}(x)}
nazywać będziemy splotem szeregów Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)}
oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)}
.
Twierdzenie 7.2
Funkcja tworząca postaci
ma odwrotną względem mnożenia (splotu), tzn. istnieje funkcja tworząca Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{U}(x)}
taka, że Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{U}(x)\fGen{G}(x)=1}
,
wtedy i tylko wtedy, gdy .
Następne własności są bardzo pomocne w dokonywanych przekształceniach funkcji tworzących.
Obserwacja 7.3
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle x^m\fGen{G}(x)&=&0+\ldots+0x^{m-1}+g_0x^m+g_1x^{m+1}+g_2x^{m+2}+\ldots} (2)
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \frac{\fGen{G}(x)-\sum_{i=0}^{m-1}{g_ix^i}}{x^{m}}&=&g_m+g_{m+1}x+g_{m+2}x^{2}+g_{m+3}x^{3}+g_{m+4}x^{4}+\ldots} (3)
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(\alpha x)&=&g_0+g_1\alpha x+g_2\alpha^2x^2+g_3\alpha^3x^3+g_4\alpha^4x^4+\ldots} (4)
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G'}(x)&=&g_1+2g_2x+3g_3x^2+4g_4x^3+5g_5x^4+\ldots} (5)
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \int \fGen{G}(x)dx &=& 0+g_0x+\frac{1}{2}g_1x^2+\frac{1}{3}g_2x^3+\frac{1}{4}g_3x^4+\ldots} (6)
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \frac{\fGen{G}(x)}{1-x}&=&g_0+\left(g_0+g_1\right)x+\left(g_0+g_1+g_2\right)x^2+\ldots} (7)
Funkcje tworzące w zliczaniu
Widzieliśmy już, że dla
Przyjrzyjmy się teraz rozwinięciu w szereg funkcji , gdzie jest parametrem. Rozwinięcie takie okaże się bardzo przydatne w rozwiązywaniu wielu przykładów. Aby poznać ciąg odpowiadający tej funkcji wprowadźmy definicję.
Uogólniony symbol dwumianowy , gdzie oraz jest oznaczeniem na
Oczywiście dla spełniającego dodatkowo , uogólniony symbol dwumianowy jest liczbą -elementowych podzbiorów zbioru -elementowego.
Twierdzenie 7.4
Dla liczby rzeczywistej oraz liczby naturalnej zachodzi
Wniosek 7.5
Dla liczby naturalnej zachodzi
Dowód
Przykład
Policzmy sumę
Zacznijmy od znalezienia zwartej postaci funkcji tworzącej
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)=\sum_{n=0}^{\infty}n^2x^n}
. Korzystając z Wniosku 7.5 otrzymujemy:
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \frac{1}{1-x}&=&\sum_{n=0}^{\infty}{n \choose n}x^n=\sum_{n=0}^{\infty}x^n,} (8)
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \frac{1}{\left(1-x\right)^2}&=&\sum_{n=0}^{\infty}{n+1 \choose n }x^n\ =\ \sum_{n=0}^{\infty}nx^n+\sum_{n=0}^{\infty}x^n. } (9)
Po przekształceniu równości (9) uzyskuje się
(10)
Powołując się ponownie na Wniosek 7.5 otrzymujemy
co w połączeniu z równościami (9) oraz (10)
daje zwartą postać funkcji tworzącej Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)}
dla ciągu :
Naszym zadaniem było jednakże policzenie funkcji tworzącej dla ciągu , tzn. ciągu sum początkowych wyrazów ciągu . Aby uzyskać Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{H}(x)}
wystarczy więc skorzystać ze wzoru (7) i podzielić Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{G}(x)}
przez .
Tak więc poszukiwanym rozwiązaniem są współczynniki funkcji tworzącej
Korzystając po raz kolejny z Wniosku 7.5 otrzymujemy
W konsekwencji zachodzi równość
Przykład
Wracamy do przykładu z monetami. Występowały tam funkcje tworzące postaci
dla i .
Z równości (7) wiemy, że
tak więc:
skąd natychmiast:
Równości te dają zależności między współczynnikami:
0 | 5 | 10 | 15 | 2 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
1 | 2 | 4 | 6 | 9 | 12 | 16 | 10 | 25 | 30 | 36 | 42 | 49 | 56 | 64 | 72 | 81 | 100 | 121 | |||
1 | 13 | 49 | 121 | 242 | |||||||||||||||||
1 | 50 | 292 | |||||||||||||||||||
Pół dolara można rozmienić na sposobów. Z kolei rozmieniać jednego dolara można na aż sposoby. Do problemu tego wrócimy jeszcze w następnym wykładzie.
Funkcje tworzące w rozwiązywaniu zależności rekurencyjnych
Przykład
Rozważmy ciąg Fibonacci'ego, tzn. ciąg zdefiniowany w następujący sposób:
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 przekładają się natychmiast na następujące równanie, jakie musi spełniać funkcja tworząca Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)}
dla ciągu Fibonacci'ego
Przekształcając powyższe równanie otrzymujemy:
Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)=\frac{x}{1-x-x^2}. } (11)
Celem, który chcemy osiągnąć to wykorzystanie funkcji do przedstawienia współczynników 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
gdzie Parser nie mógł rozpoznać (nieznana funkcja „\gold”): {\displaystyle \gold=\frac{1+\sqrt{5}}{2}}
jest złotą liczbą oraz Parser nie mógł rozpoznać (nieznana funkcja „\goldd”): {\displaystyle \goldd=\frac{1-\sqrt{5}}{2}}
liczbą do niej sprzężoną. Korzystając z równania (7) otrzymujemy teraz
Podczas rozwiązywania przykładu związanego z liczbami Fibonacci'ego natrafiliśmy na problem polegający na przedstawieniu w postaci szeregu wyrażenia . Przyjrzymy się dokładniej tego typu wyrażeniom.
Stopień wielomianu Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P}(x)}=n} , jeśli Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)=p_0+p_1x+\ldots+p_nx^n} .
Funkcja wymierna Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)} to funkcja postaci Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \frac{\fGen{P}(x)}{\fGen{Q}(x)}} , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)\neq0} są wielomianami skończonego stopnia.
Obserwacja 7.6
Niech oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)} będą wielomianami Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{A}(x)}\geq deg{\fGen{B}(x)}} . Wtedy istnieją wielomiany Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)} takie, że
Przykład
Niech
Wtedy wielomiany
spełniają
Wniosek 7.7
Niech Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)} będą wielomianami takimi, że Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P}(x)}\geq deg{\fGen{Q}(x)}} . Wtedy funkcję wymierną Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)=\fGen{P}(x)/ \fGen{Q}(x),} można przedstawić w postaci
dla pewnych wielomianów Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{A}(x)}
oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)}
Będziemy więc skupiali się jedynie nad takimi funkcjami wymiernymi Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)\fGen{P}(x)/\fGen{Q}(x), } dla których Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}} .
Twierdzenie 7.8
Niech Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)} będą wielomianami takimi, że
- Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}} ,
- Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)=\fGen{S}(x)\fGen{T}(x)} , gdzie oba wielomiany Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S}(x),\fGen{T}(x)} są stopnia co najmniej ,
- .
Wtedy istnieją wielomiany Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{A}(x)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)} takie, że Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{A}(x)}<deg{\fGen{S}(x)}} i Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{B}(x)}<deg{\fGen{T}(x)}} oraz
Twierdzenie 7.8 pozwala na rozbijanie skomplikowanych funkcji wymiernych na sumę prostszych.
Dowód [Metoda rozwijania funkcji wymiernej w szereg]
Rozważmy funkcję wymierną w postaci
gdzie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P}(x)}<deg{\fGen{Q}(x)}}
, oraz . Załóżmy ponadto, że wielomian Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)}
rozkłada się na następujący iloczyn czynników liniowych
Warto wspomnieć, że dalecy nie każdy wielomian ma taki rozkład. Na przykład jest nierozkładalny i nieliniowy. Wykorzystując parokrotnie Twierdzenie 7.8 otrzymujemy wielomiany Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_1}(x),\ldots,\fGen{P_k}(x)}
takie, że
gdzie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle deg{\fGen{P_i}(x)}<m_i}
. Na mocy Obserwacji 7.6 możemy sprowadzić wielomian Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_i}(x)}
do
gdzie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle m_i\geq deg{\fGen{P_i}(x)}>deg{\fGen{P_i^1}(x)}>deg{\fGen{P_i^2}(x)}>\ldots}
. W konsekwencji otrzymamy
Mnożąc teraz obie strony przez
i porównując współczynniki przy odpowiadających potęgach uzyskujemy pewien układ równań, rozwiązanie którego da nam poszukiwane współczynniki . Z drugiej strony, z wniosku 7.5 wynika, że

Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle [x^n]\fGen{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} \right)}\rho_i^n. } (12)
Przykład
Opisaną wyżej metodę ogólną zilustrujemy na przykładzie funkcji
Wielomian ma jeden podwójny pierwiastek oraz jeden pojedynczy . Poznana metoda rozwijania funkcji wymiernej w szereg daje więc
Mnożąc obie strony przez otrzymujemy:
Dwa wielomiany są równe, gdy współczynniki przy odpowiadających potęgach są sobie równe. Wartości można więc wyliczyć z układu równań
Rozwiązaniem powyższego układu są wartości W konsekwencji otrzymujemy szereg
Twierdzenie 7.9
Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)=\fGen{P}(x)/\fGen{Q}(x)} , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)=q_0\cdot\left(1-\rho_1x\right)\cdot\ldots\cdot\left(1-\rho_1x\right)} i liczby są parami różne, to w przypadku gdy Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)} jest wielomianem stopnia mniejszego niż , zachodzi
Przykład
Mianownik Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{Q}(x)} funkcji wymiernej
ma trzy różne pierwiastki i można Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{R}(x)}
przedstawić jako
Na mocy twierdzenia 7.9 otrzymujemy więc, że
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.