31  Lineaariset rekursiot

Tekijä

Olli Järviniemi

31.1 Johdanto

Varsin tunnettu Fibonaccin luku­jono koostuu luvuista 1,1,2,3,5,8,13,21,34,1, 1, 2, 3, 5, 8, 13, 21, 34, \ldots Jono alkaa kahdella kappaleella lukua 11 ja sen seuraava luku on aina kahden edellisen summa. Luku­jono saadaan siis määrittelemällä F1=1,F2=1F_1 = 1, F_2 = 1 ja Fn+2=Fn+1+FnF_{n+2} = F_{n+1} + F_n kaikilla n=1,2,3,n = 1, 2, 3, \ldots

Tilannetta voi yleistää tutkimalla luku­jonoja, joissa seuraava jäsen saadaan ottamalla muutama edellinen termi, kertomalla niitä joillain vakioilla ja summaamalla loppu­tulokset. Tällaisia luku­jonoja kutsutaan lineaarisesti rekursiivisiksi. Esimerkiksi ehdoilla a0=0,a1=1,a2=4a_0 = 0, a_1 = 1, a_2 = 4 ja an+3=3an+23an+1+an,kun n=0,1,2,a_{n+3} = 3a_{n+2} - 3a_{n+1} + a_n, \quad \text{kun } n = 0, 1, 2, \ldots määritelty luku­jono on lineaarisesti rekursiivinen. (Harjoitus lukijalle: mikä luku­jono on kyseessä?)

Tässä tekstissä käsitellään lineaarisesti rekursiivisia luku­jonoja. Ensin esitetään yleinen menetelmä luku­jonon kaavan ratkaisemiseksi. Tämän jälkeen käydään läpi esimerkki­tehtäviä.

31.2 Luku­jonon kaava

Ehkä hieman yllättäen mille tahansa lineaarisesti rekursiiviselle luku­jonolle voidaan löytää kaava. Esitetään menetelmä esimerkin kautta.

Tehtävä 31.1 Määritellään a1=1,a2=5a_1 = 1, a_2 = 5 ja an+2=5an+16ana_{n+2} = 5a_{n+1} - 6a_n kaikilla n=1,2,3,n = 1, 2, 3, \ldots Määritä kaava luku­jonon jäsenille.

Lasketaan hieman ensimmäisiä arvoja, jos säännön­mukaisuus sattuisi löytymään.

nn 11 22 33 44 55 66
ana_n 11 55 1919 6565 211211 665665

Selvää logiikkaa ei löydy, mutta yksi asia on selvä: luku­jono kasvaa hyvin nopeasti. Tarkemmin katsottuna seuraava jäsen on suunnilleen kolmin­kertainen edelliseen nähden, eli kasvu vaikuttaa eksponentiaaliselta.

Tästä motivoituneena tehdään arvaus.

Arvaus 1. Arvataan, että an=cna_n = c^n jollakin vakiolla cc.

Toimiiko tämä? Jotta pätee an+2=5an+16ana_{n+2} = 5a_{n+1} - 6a_n, tulee olla cn+2=5cn+16cn.c^{n+2} = 5c^{n+1} - 6c^n. Tietysti c=0c = 0 toteuttaa yhtälön, mutta tämä ei ole kiinnostavaa. Oletetaan, että c0c \neq 0. Jakamalla puolittain luvulla cnc^n saadaan c2=5c6.c^2 = 5c - 6. Tämä on toisen asteen yhtälö, jolla on ratkaisut c=2c = 2 ja c=3c = 3.

Selvästikään kumpikaan arvauksista an=2na_n = 2^n ja an=3na_n = 3^n ei ole oikein: kummallakaan ei päde a1=1a_1 = 1. Arvausta pitää parantaa.

Arvaus 2. Arvataan, että an=kcna_n = k \cdot c^n, missä kk on jokin vakio ja c=2c = 2 tai c=3c = 3.

Huomataan, että tämä toteuttaa edelleen rekursio­yhtälön: yhtälö kcn+2=5kcn+16kcnkc^{n+2} = 5kc^{n+1} - 6kc^n selvästi pätee jos k=0k = 0, ja jos kk ei ole nolla, voidaan jakaa puolittain luvulla kcnkc^n ja saada yhtälö c2=5c6.c^2 = 5c - 6. Tämä on sama yhtälö kuin aiemminkin, eli c=2c = 2 ja c=3c = 3 ovat taas ratkaisuja.

Ikävä kyllä tämäkään arvaus ei vielä toimi. Tapauksessa c=2c = 2 jonon an=kcna_n = kc^n ensimmäiset arvot ovat a1=2ka_1 = 2k ja a2=4ka_2 = 4k, ja haluamme niiden olevan a1=1a_1 = 1 ja a2=5a_2 = 5. Kuitenkaan ei voi saman­aikaisesti päteä sekä 2k=12k = 1 että 4k=54k = 5. Vastaavasti tapauksessa c=3c = 3 tulisi päteä 3k=13k = 1 ja 9k=59k = 5, mikä ei onnistu.

Arvaukseen tarvitaan vielä yksi parannus.

Arvaus 3. Arvataan, että an=x2n+y3na_n = x \cdot 2^n + y \cdot 3^n, missä xx ja yy ovat joitain vakioita.

Huomataan, että tämäkin arvaus toteuttaa rekursio­yhtälön. Arvauksen 2 kohdalla nimittäin huomattiin, että x2n+2=5x2n+16x2nx \cdot 2^{n+2} = 5x \cdot 2^{n+1} - 6x \cdot 2^n ja y3n+2=5y3n+16y3n.y \cdot 3^{n+2} = 5y \cdot 3^{n+1} - 6y \cdot 3^n. Summaamalla nämä yhtälöt saadaan

x2n+2+y3n+2=5x2n+1+5y3n+1(6x2n+6y3n).x \cdot 2^{n+2} + y \cdot 3^{n+2} = 5x \cdot 2^{n+1} + 5y \cdot 3^{n+1} - (6x \cdot 2^n + 6y \cdot 3^n).

Tämä on juuri mitä haluamme: tämä kertoo, että arvauksemme an=x2n+y3na_n = x \cdot 2^n + y \cdot 3^n toteuttaa yhtälön an+2=5an+16an.a_{n+2} = 5a_{n+1} - 6a_n.

Entä alku­arvot? Jotta pätee a1=1a_1 = 1, tulee päteä x21+y31=1x \cdot 2^1 + y \cdot 3^1 = 1 eli 2x+3y=1.2x + 3y = 1. Jotta pätee a2=5a_2 = 5, tulee vastaavasti päteä x22+y32=5x \cdot 2^2 + y \cdot 3^2 = 5 eli 4x+9y=5.4x + 9y = 5. Tämä on yhtälö­pari, jonka ratkaisuksi saadaan x=1x = -1, y=1y = 1.

Täten an=3n2na_n = 3^n - 2^n toteuttaa rekursio­yhtälön ja alku­arvot menevät oikein, eli tämä antaa oikean tuloksen kaikilla nn. Lauseke 3n2n3^n - 2^n on hyvinkin siisti kaava luku­jonolle.

Kommentti. Sama menetelmä toimii yleisemminkin. Fibonaccin luku­jonon tapauksessa arvauksessa 1 saadaan toimiviksi cc:n arvoiksi yhtälön c2=c+1c^2 = c + 1 ratkaisut. Tämän yhtälön ratkaisut eivät ole kokonais­lukuja vaan melko ikävän näköisiä: c1=1+52,c2=152.c_1 = \frac{1 + \sqrt{5}}{2}, \quad c_2 = \frac{1 - \sqrt{5}}{2}. Tämän jälkeen edetään kuten yllä, eli vastaus on muotoa an=xc1n+yc2na_n = xc_1^n + yc_2^n. Lukujen xx ja yy arvot voidaan ratkaista kuten edellä alku­arvojen antaman yhtälö­parin kautta, mutta nekin ovat melko ikävän näköisiä. Laskuja ei esitetä tässä, mutta lopulta kuitenkin saadaan, että Fn=15(1+52)n15(152)n.F_n = \frac{1}{\sqrt{5}}\left(\frac{1 + \sqrt{5}}{2}\right)^n - \frac{1}{\sqrt{5}}\left(\frac{1 - \sqrt{5}}{2}\right)^n.

Yleisesti ongelmassa pitää ratkaista vastaava polynomi­yhtälö. Joissakin tapauksissa yhtälöllä on moninkertaisia nolla­kohtia. Esimerkiksi johdannon esimerkissä an+3=3an+23an+1+ana_{n+3} = 3a_{n+2} - 3a_{n+1} + a_n yhtälöksi tulee c3=3c23c+1c^3 = 3c^2 - 3c + 1 eli (c1)3=0(c-1)^3 = 0. Moninkertaisen nolla­kohdan tapauksessa eksponentiaalisia arvauksia pitää lisäksi kertoa polynomeilla. Tässä tapauksessa arvaukset ovat 1n,n1n1^n, n \cdot 1^n ja n21nn^2 \cdot 1^n. On helppo tarkistaa, että nämä toteuttavat rekursio­yhtälön.1

Yleisessä tapauksessa lineaarisen rekursio­yhtälön ratkaisut ovat siis summia termeistä muotoa ”polynomi kertaa eksponentti­funktio”. (Tämän väitteen todistaminen on melko vaikeaa, joten sitä ei tehdä tässä.)

1 Yleisesti kaksin­kertaisen nolla­kohdan cc tapauksessa myös arvaus ncnnc^n toimii. Jos cc on kolmin­kertainen nolla­kohta, niin myös n2cnn^2c^n toimii, ja niin edelleen.

31.3 Esimerkki­tehtäviä

Yksi sovellus­kohde (lineaarisille) rekursioille ovat kombinatoriset ongelmat. Tekstissä Induktiivinen päättely nähtiinkin yksi sovellus liittyen merkki­jonoihin, joissa ei ole kahta aa-kirjainta peräkkäin.

Tässä annetaan pari algebrallisempaa esimerkkiä.

Tehtävä 31.2 Luku­jonon a1,a2,a_1, a_2, \ldots kaikki jäsenet ovat kokonais­lukuja ja on olemassa reaali­luvut xx ja yy, joilla an+2=xan+1+yana_{n+2} = xa_{n+1} + ya_n kaikilla n1n \ge 1. Lisäksi tiedetään, että jono a1,a2,a_1, a_2, \ldots ei ole vakio­jono. Ovatko xx ja yy välttämättä kokonais­lukuja?

Vastaus: Ei, lukujen xx ja yy ei tarvitse olla edes rationaalisia!

Valitaan jokin yksin­kertainen luku­jono, joka on lineaarisesti rekursiivinen. Esimerkiksi an=2na_n = 2^n käy hyvin. Nyt a1,a2,a_1, a_2, \ldots selvästikin toteuttaa lineaarisen rekursio­yhtälön an+1=2an,a_{n+1} = 2a_n, jota vastaava polynomi­yhtälö on c2=0c-2 = 0. Tämä luku­jono toteuttaa kuitenkin myös moni­mutkaisempia rekursio­yhtälöitä, kunhan niitä vastaavien polynomien nolla­kohdista löytyy 22. Esimerkiksi polynomi­yhtälöä (c2)(cπ)=0(c-2)(c - \pi) = 0 vastaa rekursio­yhtälö an+2=(2+π)an+12πan,a_{n+2} = (2 + \pi)a_{n+1} - 2\pi a_n, ja luku­jono an=2na_n = 2^n toteuttaa tämänkin yhtälön. Eli yksi vasta­esimerkki tehtävään on x=2+π,y=2πx = 2 + \pi, y = 2\pi ja an=2na_n = 2^n.

Kommentti. Polynomeja käsittelevissä teksteissä on puhuttu siitä, kuinka polynomeja voi miettiä niiden kertoimien tai nolla­kohtien kautta. Lineaaristen rekursioiden tapauksessa tilanne on saman­kaltainen: suoraan rekursio­yhtälön tuijottaminen ja siitä jonon jäsenien laskeminen vastaa polynomin miettimistä kertoimien kautta ja luku­jonoa vastaavan polynomi­yhtälön ja kaavan miettiminen vastaa polynomin miettimistä nolla­kohtien kautta. Tämä tehtävä on esimerkki tilanteesta, jossa jälkimmäinen ajattelu­tapa on parempi.

Tehtävä 31.3 Määritellään Fibonaccin luku­jono asettamalla F1=F2=1F_1 = F_2 = 1 ja Fn+2=Fn+1+FnF_{n+2} = F_{n+1} + F_n kaikilla n1n \ge 1. Olkoot nn ja mm sellaisia positiivisia kokonais­lukuja, joilla mnm \mid n. Osoita, että FmFnF_m \mid F_n.

Tässä on taulukoitu vähän useampi Fibonaccin luku.

nn 11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515
FnF_n 11 11 22 33 55 88 1313 2121 3434 5555 8989 144144 233233 377377 610610

Tutkitaan aluksi jotakin helppoa tapausta, kuten n=2mn = 2m. Tulee osoittaa, että FmF2mF_m \mid F_{2m}. Tapauksissa m=6m = 6 ja m=7m = 7 huomataan, että F12F6=1448=18=5+13\frac{F_{12}}{F_6} = \frac{144}{8} = 18 = 5 + 13 ja F14F7=37713=29=8+21,\frac{F_{14}}{F_7} = \frac{377}{13} = 29 = 8 + 21, mikä vihjaa siihen, että F2m=Fm(Fm1+Fm+1).F_{2m} = F_m(F_{m-1} + F_{m+1}). (Tämä pätee myös pienemmillä mm:n arvoilla.)

Miten tällaisen identiteetin voisi todistaa? Yksi suora­viivainen tapa on kirjoittaa Fn=15(anbn),F_n = \frac{1}{\sqrt{5}}(a^n - b^n), missä a=(1+5)/2a = (1 + \sqrt{5})/2 ja b=(15)/2b = (1 - \sqrt{5})/2 ja sievennellä lausekkeita. Sieventämisessä käytetään apuna tietoja a2=a+1,b2=b+1a^2 = a+1, b^2 = b+1 ja Vietan kaavoista (Alaluku 12.3.2) (tai suoraan laskemalla) saatavia tietoja ab=1,a+b=1ab = -1, a+b = 1.

Huomataan, että kahden neliön erotuksena F2m=15(a2mb2m)=15(ambm)(am+bm)=Fm(am+bm).\begin{align*} F_{2m} &= \frac{1}{\sqrt{5}}(a^{2m} - b^{2m}) \\ &= \frac{1}{\sqrt{5}}(a^m - b^m)(a^m + b^m) \\ &= F_m(a^m + b^m). \end{align*} Enää riittää perustella, miksi am+bm=Fm1+Fm+1a^m + b^m = F_{m-1} + F_{m+1}. Oikeastaan alkuperäistä tehtävää varten riittää perustella vain, että am+bma^m + b^m on kokonais­luku. Tämä on hieman helpompaa, joten teemme vain tämän.

Idea on, että abab ja a+ba+b ovat kokonais­lukuja, ja näistä luvuista voidaan rakentaa muita lausekkeita luvuista aa ja bb. Esimerkiksi yhtälössä (a+b)2=a2+2ab+b2(a+b)^2 = a^2 + 2ab + b^2 termit (a+b)2(a+b)^2 ja 2ab2ab ovat kokonais­lukuja, joten nyt myös a2+b2a^2 + b^2 on kokonais­luku. Yleisesti voimme todistaa induktiolla, että am+bma^m + b^m on kokonais­luku. Riittää huomata, että summa am+bma^m + b^m saadaan muodostettua lukujen a+ba+b ja am1+bm1a^{m-1} + b^{m-1} tulon kautta: (a+b)(am1+bm1)=am+bm+(ab)(am2+bm2).(a+b)(a^{m-1} + b^{m-1}) = a^m + b^m + (ab)(a^{m-2} + b^{m-2}). Nyt jos am1+bm1a^{m-1} + b^{m-1} ja am2+bm2a^{m-2} + b^{m-2} ovat kokonais­lukuja, niin myös am+bma^m + b^m on.

Olemme siis todistaneet, että FmF2mF_m \mid F_{2m}. Tehtävän todistamiseksi tarvitaan yleisemmin, että FmFkmF_m \mid F_{km} kaikilla k1k \ge 1. Tämän todistaminen onnistuu vastaavalla tavalla kuin yllä tapauksessa k=2k = 2: tekijöihin­jaolla xkyk=(xy)()x^k - y^k = (x-y)(\cdots) saadaan

Fkm=15(akmbkm)=15(ambm)((am)k1+(am)k2(bm)++(am)(bm)k2+(bm)k1)=Fm(am(k1)+(ab)mam(k3)++(ab)mbm(k3)+bm(k1)).\begin{align*} F_{km} &= \frac{1}{\sqrt{5}}\left(a^{km} - b^{km}\right) \\ &=\frac{1}{\sqrt{5}}(a^m - b^m)\left((a^m)^{k-1} + (a^m)^{k-2}(b^m) + \ldots + (a^m)(b^m)^{k-2} + (b^m)^{k-1}\right) \\ &=F_m\left(a^{m(k-1)} + (ab)^ma^{m(k-3)} + \ldots + (ab)^mb^{m(k-3)} + b^{m(k-1)}\right). \end{align*}

Sulku­lausekkeen termit voi ryhmitellä pareiksi, joiden summa on muotoa (ab)mi(amj+bmj).(ab)^{mi}(a^{mj} + b^{mj}). Tässä ab=1ab = -1 on kokonais­luku ja edellä on todistettu, että an+bna^n + b^n on aina kokonais­luku. Väite seuraa.

Kommentti. Tehtävän voi ratkaista myös luku­teoreettisesti. Fibonaccin luvut ovat jaksollisia modulo FmF_m, ja jonon arvot modulo FmF_m ovat järjestyksessä (kun luvut kirjoitetaan sopivalla tavalla) F1,F2,,Fm2,Fm1,0,Fm1,Fm2,Fm3,Fm4,,±F1,F1,0,F1,F1,,\begin{multline*} F_1, F_2, \ldots , F_{m-2}, F_{m-1}, 0, \\ F_{m-1}, -F_{m-2}, F_{m-3}, -F_{m-4}, \ldots , \pm F_1, \mp F_1, 0, \\ \mp F_1, \mp F_1, \ldots, \end{multline*} eli arvot ovat melko säännöllisiä modulo FmF_m. (Esimerkiksi modulo 13=F713 = F_7 luvut ovat 1,1,2,3,5,8,0,8,5,3,2,1,1,0,1,1,1, 1, 2, 3, 5, 8, 0, 8, -5, 3, -2, 1, -1, 0, -1, -1, \ldots) Tätä kautta nähdään, että jos nn on jaollinen mm:llä, niin Fn0(modFm)F_n \equiv 0 \pmod{F_m} eli FmFnF_m \mid F_n.

Tätä kautta voidaan todistaa myös vahvempi väite syt(Fm,Fn)=Fsyt(m,n)\text{syt}(F_m, F_n) = F_{\text{syt}(m, n)}.

31.4 Tehtäviä

Tehtävä 1. Olkoon an=n2na_n = n2^n kaikilla n1n \ge 1. Etsi (lineaarinen) rekursio­yhtälö, jonka luku­jono a1,a2,a_1, a_2, \ldots toteuttaa.

Tehtävä 2. Luku­jonolla a1,a2,a_1, a_2, \ldots pätee a1=1,a2=2a_1 = 1, a_2 = 2 ja an+2=5an+16an+na_{n+2} = 5a_{n+1} - 6a_n + n kaikilla n1n \ge 1. Etsi suljettu muoto jonon termeille.

Tehtävä 3. Luvut xx ja yy ovat sellaisia, että luvut x+y,x2+y2,x3+y3x+y, x^2+y^2, x^3+y^3 ja x4+y4x^4+y^4 ovat kokonais­lukuja. Osoita, että xn+ynx^n + y^n on kokonais­luku kaikilla positiivisilla kokonais­luvuilla nn.

Tehtävä 4. Luku­jonolla a1,a2,a3,a_1, a_2, a_3, \ldots pätee a1=4,a2=9,a3=25a_1 = 4, a_2 = 9, a_3 = 25 ja an+3=7an+214an+1+8ana_{n+3} = 7a_{n+2} - 14a_{n+1} + 8a_n kaikilla n1n \ge 1. Osoita, että ana_n on jonkin kokonais­luvun neliö kaikilla n=1,2,3,n = 1, 2, 3, \ldots

Tehtävä 5. Osoita, että on olemassa Fibonaccin luku, joka on jaollinen sadalla.