Johdanto
Varsin tunnettu Fibonaccin lukujono koostuu luvuista Jono alkaa kahdella kappaleella lukua ja sen seuraava luku on aina kahden edellisen summa. Lukujono saadaan siis määrittelemällä ja kaikilla
Tilannetta voi yleistää tutkimalla lukujonoja, joissa seuraava jäsen saadaan ottamalla muutama edellinen termi, kertomalla niitä joillain vakioilla ja summaamalla lopputulokset. Tällaisia lukujonoja kutsutaan lineaarisesti rekursiivisiksi. Esimerkiksi ehdoilla ja määritelty lukujono on lineaarisesti rekursiivinen. (Harjoitus lukijalle: mikä lukujono on kyseessä?)
Tässä tekstissä käsitellään lineaarisesti rekursiivisia lukujonoja. Ensin esitetään yleinen menetelmä lukujonon kaavan ratkaisemiseksi. Tämän jälkeen käydään läpi esimerkkitehtäviä.
Lukujonon kaava
Ehkä hieman yllättäen mille tahansa lineaarisesti rekursiiviselle lukujonolle voidaan löytää kaava. Esitetään menetelmä esimerkin kautta.
Tehtävä 31.1 Määritellään ja kaikilla Määritä kaava lukujonon jäsenille.
Lasketaan hieman ensimmäisiä arvoja, jos säännönmukaisuus sattuisi löytymään.
|
|
|
|
|
|
|
Selvää logiikkaa ei löydy, mutta yksi asia on selvä: lukujono kasvaa hyvin nopeasti. Tarkemmin katsottuna seuraava jäsen on suunnilleen kolminkertainen edelliseen nähden, eli kasvu vaikuttaa eksponentiaaliselta.
Tästä motivoituneena tehdään arvaus.
Arvaus 1. Arvataan, että jollakin vakiolla .
Toimiiko tämä? Jotta pätee , tulee olla Tietysti toteuttaa yhtälön, mutta tämä ei ole kiinnostavaa. Oletetaan, että . Jakamalla puolittain luvulla saadaan Tämä on toisen asteen yhtälö, jolla on ratkaisut ja .
Selvästikään kumpikaan arvauksista ja ei ole oikein: kummallakaan ei päde . Arvausta pitää parantaa.
Arvaus 2. Arvataan, että , missä on jokin vakio ja tai .
Huomataan, että tämä toteuttaa edelleen rekursioyhtälön: yhtälö selvästi pätee jos , ja jos ei ole nolla, voidaan jakaa puolittain luvulla ja saada yhtälö Tämä on sama yhtälö kuin aiemminkin, eli ja ovat taas ratkaisuja.
Ikävä kyllä tämäkään arvaus ei vielä toimi. Tapauksessa jonon ensimmäiset arvot ovat ja , ja haluamme niiden olevan ja . Kuitenkaan ei voi samanaikaisesti päteä sekä että . Vastaavasti tapauksessa tulisi päteä ja , mikä ei onnistu.
Arvaukseen tarvitaan vielä yksi parannus.
Arvaus 3. Arvataan, että , missä ja ovat joitain vakioita.
Huomataan, että tämäkin arvaus toteuttaa rekursioyhtälön. Arvauksen 2 kohdalla nimittäin huomattiin, että ja Summaamalla nämä yhtälöt saadaan
Tämä on juuri mitä haluamme: tämä kertoo, että arvauksemme toteuttaa yhtälön
Entä alkuarvot? Jotta pätee , tulee päteä eli Jotta pätee , tulee vastaavasti päteä eli Tämä on yhtälöpari, jonka ratkaisuksi saadaan , .
Täten toteuttaa rekursioyhtälön ja alkuarvot menevät oikein, eli tämä antaa oikean tuloksen kaikilla . Lauseke on hyvinkin siisti kaava lukujonolle.
Kommentti. Sama menetelmä toimii yleisemminkin. Fibonaccin lukujonon tapauksessa arvauksessa 1 saadaan toimiviksi :n arvoiksi yhtälön ratkaisut. Tämän yhtälön ratkaisut eivät ole kokonaislukuja vaan melko ikävän näköisiä: Tämän jälkeen edetään kuten yllä, eli vastaus on muotoa . Lukujen ja arvot voidaan ratkaista kuten edellä alkuarvojen 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ä
Yleisesti ongelmassa pitää ratkaista vastaava polynomiyhtälö. Joissakin tapauksissa yhtälöllä on moninkertaisia nollakohtia. Esimerkiksi johdannon esimerkissä yhtälöksi tulee eli . Moninkertaisen nollakohdan tapauksessa eksponentiaalisia arvauksia pitää lisäksi kertoa polynomeilla. Tässä tapauksessa arvaukset ovat ja . On helppo tarkistaa, että nämä toteuttavat rekursioyhtälön.
Yleisessä tapauksessa lineaarisen rekursioyhtälön ratkaisut ovat siis summia termeistä muotoa ”polynomi kertaa eksponenttifunktio”. (Tämän väitteen todistaminen on melko vaikeaa, joten sitä ei tehdä tässä.)
1 Yleisesti kaksinkertaisen nollakohdan tapauksessa myös arvaus toimii. Jos on kolminkertainen nollakohta, niin myös toimii, ja niin edelleen.
Esimerkkitehtäviä
Yksi sovelluskohde (lineaarisille) rekursioille ovat kombinatoriset ongelmat. Tekstissä Induktiivinen päättely nähtiinkin yksi sovellus liittyen merkkijonoihin, joissa ei ole kahta -kirjainta peräkkäin.
Tässä annetaan pari algebrallisempaa esimerkkiä.
Tehtävä 31.2 Lukujonon kaikki jäsenet ovat kokonaislukuja ja on olemassa reaaliluvut ja , joilla kaikilla . Lisäksi tiedetään, että jono ei ole vakiojono. Ovatko ja välttämättä kokonaislukuja?
Vastaus: Ei, lukujen ja ei tarvitse olla edes rationaalisia!
Valitaan jokin yksinkertainen lukujono, joka on lineaarisesti rekursiivinen. Esimerkiksi käy hyvin. Nyt selvästikin toteuttaa lineaarisen rekursioyhtälön jota vastaava polynomiyhtälö on . Tämä lukujono toteuttaa kuitenkin myös monimutkaisempia rekursioyhtälöitä, kunhan niitä vastaavien polynomien nollakohdista löytyy . Esimerkiksi polynomiyhtälöä vastaa rekursioyhtälö ja lukujono toteuttaa tämänkin yhtälön. Eli yksi vastaesimerkki tehtävään on ja .
Kommentti. Polynomeja käsittelevissä teksteissä on puhuttu siitä, kuinka polynomeja voi miettiä niiden kertoimien tai nollakohtien kautta. Lineaaristen rekursioiden tapauksessa tilanne on samankaltainen: suoraan rekursioyhtälön tuijottaminen ja siitä jonon jäsenien laskeminen vastaa polynomin miettimistä kertoimien kautta ja lukujonoa vastaavan polynomiyhtälön ja kaavan miettiminen vastaa polynomin miettimistä nollakohtien kautta. Tämä tehtävä on esimerkki tilanteesta, jossa jälkimmäinen ajattelutapa on parempi.
Tehtävä 31.3 Määritellään Fibonaccin lukujono asettamalla ja kaikilla . Olkoot ja sellaisia positiivisia kokonaislukuja, joilla . Osoita, että .
Tässä on taulukoitu vähän useampi Fibonaccin luku.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tutkitaan aluksi jotakin helppoa tapausta, kuten . Tulee osoittaa, että . Tapauksissa ja huomataan, että ja mikä vihjaa siihen, että (Tämä pätee myös pienemmillä :n arvoilla.)
Miten tällaisen identiteetin voisi todistaa? Yksi suoraviivainen tapa on kirjoittaa missä ja ja sievennellä lausekkeita. Sieventämisessä käytetään apuna tietoja ja Vietan kaavoista (Alaluku 12.3.2) (tai suoraan laskemalla) saatavia tietoja .
Huomataan, että kahden neliön erotuksena Enää riittää perustella, miksi . Oikeastaan alkuperäistä tehtävää varten riittää perustella vain, että on kokonaisluku. Tämä on hieman helpompaa, joten teemme vain tämän.
Idea on, että ja ovat kokonaislukuja, ja näistä luvuista voidaan rakentaa muita lausekkeita luvuista ja . Esimerkiksi yhtälössä termit ja ovat kokonaislukuja, joten nyt myös on kokonaisluku. Yleisesti voimme todistaa induktiolla, että on kokonaisluku. Riittää huomata, että summa saadaan muodostettua lukujen ja tulon kautta: Nyt jos ja ovat kokonaislukuja, niin myös on.
Olemme siis todistaneet, että . Tehtävän todistamiseksi tarvitaan yleisemmin, että kaikilla . Tämän todistaminen onnistuu vastaavalla tavalla kuin yllä tapauksessa : tekijöihinjaolla saadaan
Sulkulausekkeen termit voi ryhmitellä pareiksi, joiden summa on muotoa Tässä on kokonaisluku ja edellä on todistettu, että on aina kokonaisluku. Väite seuraa.
Kommentti. Tehtävän voi ratkaista myös lukuteoreettisesti. Fibonaccin luvut ovat jaksollisia modulo , ja jonon arvot modulo ovat järjestyksessä (kun luvut kirjoitetaan sopivalla tavalla) eli arvot ovat melko säännöllisiä modulo . (Esimerkiksi modulo luvut ovat ) Tätä kautta nähdään, että jos on jaollinen :llä, niin eli .
Tätä kautta voidaan todistaa myös vahvempi väite .
Tehtäviä
Tehtävä 1. Olkoon kaikilla . Etsi (lineaarinen) rekursioyhtälö, jonka lukujono toteuttaa.
Tehtävä 2. Lukujonolla pätee ja kaikilla . Etsi suljettu muoto jonon termeille.
Tehtävä 3. Luvut ja ovat sellaisia, että luvut ja ovat kokonaislukuja. Osoita, että on kokonaisluku kaikilla positiivisilla kokonaisluvuilla .
Tehtävä 4. Lukujonolla pätee ja kaikilla . Osoita, että on jonkin kokonaisluvun neliö kaikilla
Tehtävä 5. Osoita, että on olemassa Fibonaccin luku, joka on jaollinen sadalla.