SYMBOLINEN ANALYYSI Keijo Ruohonen 2003
Sisältö 1 I SYMBOLIT JA SYNTAKSI 1 1.1 Symbolit ja aakkostot 2 1.2 Lausekkeet ja syntaksi 4 1.3 Tulkinta 5 1.4 Yhtälöt, listat, jonot, joukot, asetelmat, vektorit, matriisit,... 6 II SYMBOLINEN DIFFERENTIAALLASKENTA 6 2.1 Symbolinen derivointi 7 2.2 Taylorin sarja 8 2.3 Eräitä apufunktioita ja niiden derivaattoja 14 III KOKONAISLUVUT 14 3.1 Jaollisuus, tekijät, alkuluvut 16 3.2 Kokonaisluvun esitys eri kannoissa 17 3.3 Suurin yhteinen tekijä ja pienin yhteinen jaettava 22 3.4 Kongruenssilaskenta eli moduläärilaskenta 24 3.5 Kertoma. Stirlingin approksimaatio 26 3.6 Binomi- ja multinomikertoimet 29 3.7 (Suurten) kokonaislukujen algoritmeja 38 IV ALGEBRAA 38 4.1 Yleistä 38 4.2 Renkaat ja kunnati 40 4.3 Esimerkkejä renkaista ja kunnista 41 4.4 Alirenkaat ja -kunnat, laajennukset, ihanteet, tekijärenkaat, murtokunnat 43 4.5 Tekijät, s.y.t. ja p.y.j kokonaisalueissa 46 4.6 UFD, PID ja ED 47 V POLYNOMIT 47 5.1 Yhden muuttujan polynomit 49 5.2 Polynomien juuret 52 5.3 Algebralliset laajennukset 53 5.4 Rationaalifunktiot ja osamurtokehitelmä 57 5.5 Monen muuttujan polynomit ja rationaalifunktiot 58 5.6 Transsendenttiset laajennukset 59 5.7 Polynomien algoritmeja i
ii 66 VI ESITYS JA SIEVENNYS 66 6.1 Kanoniset ja normaalit esitykset 68 6.2 Polynomien ja rationaalifunktioiden esitykset ja sievennys 70 6.3 Juurilausekkeiden, algebrallisten lukujen ja algebrallisten funktioiden esitys ja sievennys 73 6.4 Transsendenttifunktiot 75 VII SYMBOLINEN INTEGROINTI JA DIFFERENTIAALI- YHTÄLÖT 75 7.1 Yleistä 75 7.2 Rationaalifunktioiden integrointi 82 7.3 Irrationaalisten alkeisfunktioiden integrointi 89 7.4 Erikoisfunktiot 90 7.5 Differentiaaliyhtälöt 95 VIII SUMMAUS JA KERTOMINEN 95 8.1 Summat ja differenssit 98 8.2 Rationaalifunktioiden summaus 103 8.3 Hypergeometrinen summaus. Gosperin algoritmi 107 8.4 Tulo 110 IX LINEAARISET REKURSIOKAAVAT 110 9.1 Yleistä 111 9.2 Ensimmäisen kertaluvun lineaarinen rekursiokaava 111 9.3 Vakiokertoiminen lineaarinen rekursiokaava 112 9.3.1 Matriisiesitys 117 9.3.2 Generoiva funktio 120 9.3.3 Eksponentiaalipolynomi 121 Kirjallisuus 123 Hakemisto Esipuhe Tämä moniste on tarkoitettu TTY:n kurssin 73265 Symbolinen analyysi 1 perusmateriaaliksi. Monisteessa käydään läpi symbolisen laskennan peruskäsitteet sekä suuri joukko algoritmeja. Esitietoina tarvitaan vain peruskurssit, vaikkakin monet muut kurssit (esimerkiksi Algebra 1, Kryptologia ja Algoritmimatematiikka) ovat toki hyödyksi. Tarvittavat lukuteorian ja algebran käsitteet ja tulokset käydään läpi. Symbolinen analyysi on suhteellisen lyhyessä ajassa kehittynyt omaksi hyvin laajaksi alueekseen matematiikan ja laskennallisen fysiikan tai yleisesti tieteellisen laskennan välimaastossa, ks. esimerkiksi ENNS & MCGUIRE tai GRABMEIER & KALTOFEN & WEISPFENNING. Tästä syystä mikään kovin laaja tai yksityiskohtainen asian käsittely ei ole mahdollista yhden kurssin puitteissa. Tästäkin monisteesta on jätetty pois tai vain maininnalle useat tehokkaat algoritmit, jotka ovat työläitä esittää ja/tai vaativat paljon esitietoja, ja esimerkiksi symbolista lineaarialgebraa tai monen muuttujan polynomien manipulaatiossa keskeisiä Gröbnerin kantoja ei käsitellä ollenkaan.
Olennainen osa symbolisen analyysin kurssia on tutustuminen johonkin laajaan symbolisen laskennan ohjelmistoon (Maple, Mathematica, MuPAD, jne.). Moniste on kuitenkin kirjoitettu mahdollisimman ohjelmistoriippumattomaksi. Näissä ohjelmistoissa on myös helppokäyttöinen ohjelmointikieli, jolla käsittelyn voi automatisoida. Symbolisen laskennan rajoitukset johtuvat enimmäkseen siitä, että aivan puhtaan symbolisesti esitettyinä monet tavalliset tehtävät ovat hyvin vaativia tai suorastaan algoritmisesti ratkeamattomia! Pelastuksena on tehtävien formuloiminen algebralliseen muotoon, jolloin ne tulevat helpommiksi tai yleensä ottaen ratkeaviksi. Ohjelmistot tekevät tällaisen formuloinnin usein automaattisesti. Koska puhtaan symbolisen lausekkeen ja tarkoitetun vastaavan algebrallisen muodon välillä ei ole mitään helppoa yhteyttä tehtävähän pitäisi oikeaoppisesti formuloida alusta alkaen algebralliseen muotoon tapahtuu tässä toisinaan virheitä, jotka käyttäjän pitäisi huomata. Ohjelmistojen käyttö ei olekaan aivan niin mutkatonta kuin käyttäjät muutaman esimerkin jälkeen usein kuvittelevat ja siinä tarvitaan tiettyä rutiinia ja varovaisuutta. Oikein käytettynä symbolinen analyysi on tavattoman vahva työkalu, jolla selvitetään monia muutoin aivan mahdottomia tehtäviä. iii Keijo Ruohonen
Luku 1 SYMBOLIT JA SYNTAKSI 1.1 Symbolit ja aakkostot Symbolinen laskenta on pohjimmiltaan tiettyjen symbolijonojen manipulaatiota annettujen sääntöjen mukaan. Käytännön syistä perussymboleja voi olla vain tietty äärellinen määrä. Ne muodostavat ns. perusaakkoston Σ={a 1,a 2,...,a N }. Perussymbolien joukossa ovat ainakin englanninkielen aakkoset a,b,...,z sekä numeraalit 0,1,2,...,9, mutta käytännössä tietysti suuri joukko muitakin symboleja (sananväli, sulut, välimerkkejä, jne.). Aakkoston Σ symboleista voidaan muodostaa ns. sanoja 1, ts. äärellisiä symbolijonoja, jotka perinteiseen tapaan kirjoitetaan ilman erottimia: w = a i1 a i2 a in. Tässä n on sanan pituus. Mukana on myös ns. tyhjä sana Λ, jonka pituus on nolla. n-pituisia sanoja on N n kpl. Symbolisen laskennan ohjelmistoissa suurin sallittu sananpituus on äärellinen, mutta niin suuri, ettei sitä käytännössä juurikaan kukaan hätyyttele. Osa sanoista käy muuttujien, vakioiden, funktioiden yms. nimiksi, mutta eivät kaikki. Esimerkiksi sulut eivät yleensä saa esiintyä nimissä, vaan niillä on oma tavanomainen käyttönsä lausekkeissa (tietyt sulut voivat kuitenkin erottaa muuttujan indeksin). Sanojen perusoperaatio on ns. katenaatio, mikä tarkoittaa yhdyssanojen muodostamista: Sanojen w 1 = a i1 a i2 a in1 ja w 2 = a j1 a j2 a jn2 katenaatio on sana a i1 a i2 a in1 a j1 a j2 a jn2 = merk. w 1 w 2. Katenointi on ilmeisesti liitännäinen operaatio, ts. aina (w 1 w 2 )w 3 = w 1 (w 2 w 3 ), mutta se ei ole (yleisesti) vaihdannainen. Kaikki mahdolliset perusaakkoston symboleista muodostetut sanat muodostavat katenaation suhteen algebrallisesti ns. monoidin, ts. operaatio (katenaatio) on liitännäinen ja sillä on identiteettialkio (tyhjä sana). Symbolisen laskennan ohjelmistoissa katenaatiolla on omat merkintänsä, mutta tietysti vain osalle sanoja! (Katenaation merkki on mukana perusaakkostossa.) Samoin tyhjällä sanalla on oma merkkinsä. Näitä käyttäen voidaan esimerkiksi ohjelmallisesti muodostaa uusia muuttujanimiä. 1 Sanojen teoria on sinällään hyvinkin pitkälle vietyä, ks. kurssit Automaattiteoria ja Formaaliset kielet. 1
LUKU 1. SYMBOLIT JA SYNTAKSI 2 1.2 Lausekkeet ja syntaksi Osa perussymboleista tulkitaan kiinteiksi operaattoreiksi tai funktioiksi. Tuttuja tällaisia operaattoreita ovat esimerkiksi +, -, * (kertolasku), /, ˆ (potenssiin korotus) ja sin (sinifunktio). Operaattoreita ja funktioita voidaan ottaa lisääkin käyttöön antamalla niille nimet ja tarvittaessa määrittelemällä operaattorin toiminta. Määrittelemätöntä operaattoria tarvitaan laskettaessa symbolisesti operaattoreilla tai esimerkiksi annettaessa differentiaaliyhtälön riippuva muuttuja. Operaattori operoi aina argumentteihinsa, joita voi olla yksi tai useampia. (Tai ei yhtään, jolloin operaattori on kuten muuttuja tai vakio.) Argumenttien lukumäärä voi olla kiinteä tai vaihteleva. Argumentit merkitään yleensä järjestyksessä operaattorin perään sulkujen sisään, ns. prefiksimerkintä. Operaattoria, jolla on vain yksi argumentti, kutsutaan unääriseksi. Operaattoria, jolla on kaksi argumenttia, kutsutaan binääriseksi. +, -, *, / ja ˆ ovat binäärisiä, - on myös unäärinen. Binäärinen operaattori esiintyy usein infiksimerkintäisenä, ts. ei esimerkiksi merkitä +(a,b) vaan a + b. Lisäksi esiintyy toisinaan ns. suffiksimerkintä eli puolalainen merkintä, jossa operaattori merkitään argumenttiensa perään. Huomattakoon, että eräät operaattorit eivät hyväksy mitä tahansa argumentteja, vaan tietyllä argumenttipaikalla on aina oltava tietynlainen termi. Vakioihin, muuttujiin tms. operoivat operaattorit ovat ns. 1. kertaluvun operaattoreita. Toisaalta tietyt operaattorit operoivat 1. kertaluvun operaattoreihin, esimerkkinä vaikkapa funktioiden yhdistäminen tai derivointi. Näitä kutsutaan 2. kertaluvun operaattoreiksi. Edelleen jotkin operaattorit (ns. 3. kertaluvun operaattorit) operoivat 2. kertaluvun operaattoreihin, jne. Käytännössä ei kovin korkean kertaluvun operaattoreita juurikaan tarvita, eivätkä ohjelmistot niitä tue. Binäärinen operaattori f voi määrittää liitännäisen operaation, ts. operaattori käyttäytyy siten, että aina infiksimerkinnässä f(a,f(b,c)) = f(f(a,b),c), a f (b f c) = (a f b) f c. Monet operaattorit, varsinkin kiinteät, ajatellaan ilman muuta liitännäisiksi. Esimerkiksi edellisen pykälän katenaatio ja funktioiden yhdistäminen ovat liitännäisiä, samoin + ja *. Liitännäisille operaatioille pitkät peräkkäiset operoinnit voidaan suluttaa missä järjestyksessä tahansa. Jotta päästäisiin tähän, määritellään sulkuopillisesti oikea sulutus infiksioperaattoreille. Lauseke on oikein sulutettu, jos (i) jokaisella sulkumerkillä on lausekkeessa yksikäsitteinen vastapari, (ii) jokaisen sulkeen ja sen vastasulkeen sisällä oleva lauseke on muotoa x f y tai x f (...) tai (...) f y tai (...) f (...), missä f on operaattori ja x ja y eivät sisällä operaattoreita, ja (iii) itse lauseke on muotoa x tai x f y tai x f (...) tai (...) f y tai (...) f (...), missä f on operaattori ja x ja y eivät sisällä operaattoreita.
LUKU 1. SYMBOLIT JA SYNTAKSI 3 Lause 1.1. Liitännäisen operaattorin f sulkuopillisesti oikea lauseke, jossa f esiintyy n 2 kertaa eikä muita infiksioperaattoreita esiinny, voidaan aina kirjoittaa ekvivalenttiin muotoon x 1 f (x 2 f (x 3 f(... (x n f x n+1 )... ))). Todistus. Asia on selvä, jos n =2.Muutoin (kohta (iii) yllä) lauseke on muotoa x f (...) tai (...) f y tai (...) f (...), missä x ja y eivät sisällä operaattoria f. Jos lauseke on muotoa x f (...), jatketaan sulkujen sisällä olevasta lausekkeesta, jossa on operaattoreita yksi vähemmän. Jos taas lauseke on muotoa (...) f y, voidaan olettaa että sulkujen sisällä oleva lauseke (kohta (ii)) on jo saatettu vaadittuun muotoon x 1 f (x 2 f (x 3 f(... (x n 1 f x n )... ))), jolloin lauseke voidaan kirjoittaa muotoon x 1 f ((x 2 f (x 3 f(... (x n 1 f x n )... ))) f y), mistä jatketaan. Samoin menetellään muotoa (...) f (...) olevan lausekkeen kanssa, ensimmäinen sulkulauseke saatetaan vaadittuun muotoon, jne. Lauseesta seuraa, että liitännäisen operaattorin tapauksessa sulutuksella ei ole väliä, kunhan se on sulkuopillisesti oikea. Niinpä kirjoitetaankin lauseke usein täysin ilman sulkuja: x 1 f x 2 f x 3 f... x n f x n+1. Ohjelmistot yleensä tukevat tätä merkintätapaa tavallisimpien liitännäisten operaattorien suhteen. Huomautus. Laskujen määrän suhteen ei ole aina ollenkaan yhdentekevää, miten lauseke lopulta sulutetaan (sehän on sulutettava laskuja varten täydellisesti). Esimerkiksi kerrottaessa monia erikokoisia matriiseja, voi laskujen määrässä olla suuria eroja sulutuksesta riippuen. Huomattakoon, että sulkusymboleja voi esiintyä erilaisina alkusulku-loppusulku-pareina. Niille yllä oleva pätee samoin perustein. Itse asiassa, koska jokaisella alkusululla on yksikäsitteinen loppusulkunsa, on yhdentekevää kuinka sulkuja merkitään, kunhan alku- ja loppusulut erotetaan toisistaan merkinnällisesti. Erikoisia sulkupareja käytetään usein matematiikassa myös operaattorien merkintään, esimerkkinä tuttu määräämätön integraali, jota merkitään alkusululla ja loppusululla dx. (Tätä käytäntöä näkee vähemmän symbolisen laskennan ohjelmistoissa.) Samoin sulkupareja käytetään rajoittimina, erityisesti ohjelmistoissa, esimerkiksi joukon määrittelyssä: {a, b, c}. Parittomien sulkujen käyttö on tavallista matematiikassa (esimerkkinä itseisarvo a tai normi a ), mutta sitä vältetään ohjelmistoissa (miksi muuten?). Sulkuja käyttäen ohjelmisto jäsentää lausekkeen, joko automaattisesti tai vasta pyydettäessä. Huomattakoon, että sulkuja jätetään pois lausekkeista sopimalla operaatioille suoritusjärjestys. Esimerkiksi * ja / sovitaan suoritettaviksi aina ennen operaatiota + ja -, mikä mahdollistaa esimerkiksi lausekkeen (x * y) + (z * (u / v))kirjoittamisen suluttomaan muotoon x * y + z * u / v. Ohjelmistot tukevat tavallisimpia tällaisia suoritusjärjestyksiä. Huomattakoon myös, että useimmiten * ja / ajatellaan samanarvoisiksi ja yhteisliitännäisiksi, ts. esimerkiksi a * b / c * d / e = a * b * c 1 * d * e 1. Binäärinen operaattori f on vaihdannainen, jos aina
LUKU 1. SYMBOLIT JA SYNTAKSI 4 a f b = b f a. Monet operaattorit, varsinkin kiinteät, ajatellaan vaihdannaisiksi, esimerkkeinä * ja +. Toisaalta esimerkiksi / ei ole vaihdannainen eikä myöskään ˆ, funktioiden yhdistäminen tai katenaatio. Ohjelmistot tunnistavat tavallisimmat vaihdannaiset operaattorit. Symbolisessa laskussa lausekkeiden koko kasvaa usein valtavaksi, niin isoksi, että niiden kirjoittaminen tai kopiointi on käytännössä mahdotonta. Tästä syystä ohjelmistoissa nimetään lausekkeita muuttujanimillä, joilla niihin voidaan sitten myöhemmin viitata. Huomattakoon, että tällaisen nimeämisen liittäminen varsinaiseen syntaksiin johtaa tiettyihin vaikeuksiin. Näin nimeäminen onkin ajateltava metaoperaatioksi, ts. käyttäjän kannalta, ei ohjelmiston. Myös operaattoreita ja funktioita voidaan nimetä. 1.3 Tulkinta Ohjelmisto ei voi koskaan täysin tulkita lauseketta, ts. tajuta täydellisesti sen yhteyttä käyttötilanteeseen, vaan tämä jää käyttäjälle. Toisaalta aivan puhtaan symbolinen merkkipeli johtaa varsin työlääseen käyttöön, mikäli joitain tulkinnan osia ei ole valmiina tai kutsuttavissa. Esimerkiksi numeraalit 0,1,2,...,9 liitetään melko automaattisesti lukuihin, kun se on paikallaan, ja lasketaan niillä sen mukaisesti. On kuitenkin huomattava, että valmiit tulkinnan osat voivat olla melko pinnallisia, ts. ohjelmisto ei tunne syvällisempiä ominaisuuksia. Erikoistarkoituksiin tehdyt paketit sen sijaan voivat tuntea alansa ominaisuuksia tarkemminkin. Valmiiksi mukaan otetut tulkinnan osat liittyvät tavallisimmin kokonaislukuihin (lukuteoria), reaali- ja kompleksilukujen aritmetiikkaan (numeerinen laskenta), algebraan (polynomit, kunnat, lineaarialgebra, jne.), analyysiin (differentiaali- ja integraalilaskenta, differentiaaliyhtälöt, integraalimuunnokset, jne.), summauslaskentaan (summat, differenssit, differenssiyhtälöt, jne.), logiikkaan tai joukko-oppiin. Nämä alat eivät ole kuitenkaan erillisiä, vaan laskennan kuluessa tarvitaan usean alueen tulkintoja, joskus kaikkiakin. Erityisen tavallista on laskea ensin symbolisesti ja, kun on saatu sille otollinen muoto, sitten numeerisesti. Näiden (ja muiden) eri tulkinta-alojen yhteispeli antaa symboliselle analyysille sen tavattoman voiman, mutta tekee sen algoritmien kehittämisen ja käyttämisenkin sangen vaativaksi. Todettakoon, että itse asiassa tulkinta johonkin rajaan asti on teoreettisestikin välttämätöntä laskujen etenemiseksi. Puhtaasti symbolisena ilman tulkintoja annettu tehtävä voi nimittäin olla jopa algoritmisesti ratkeamaton tai laskennallisesti hyvin vaativa, ks. Pykälä 6.1. Monesti ohjelmisto tekee automaattisesti tällaisen tulkinnan, eikä voi edetä ollenkaan, ellei se sitä voi tehdä. Esimerkiksi sopivasti algebrallisesti tulkittu symbolinen alkeisfunktioiden integrointi on algoritmisesti ratkeava tehtävä, mutta puhtaasti symbolinen ei sitä ole, ks. Pykälä 7.1. Jatkossa käsitellään pääasiassa eri tulkinta-alojen piirteitä nimenomaan symbolisen laskennan näkökannalta. Numeerisen laskennan osuus jää vähäiseksi (sille on oma kurssinsa Numeerinen analyysi 1). Algebraa käsitellään sen sijaan enemmänkin, kurssi Algebra 1 on avuksi,
LUKU 1. SYMBOLIT JA SYNTAKSI 5 muttei välttämätön. Lukuteorian, logiikan ja joukko-opin taustatietona kurssi Algoritmimatematiikka on hyödyksi, muttei sekään välttämätön. Keskeisessä asemassa on polynomialgebra, sillä hyvin monet symboliset operaatiot pohjautuvat siihen, esimerkiksi lausekkeessa 3 / 4 * sqrt(2) * sin(x) - y ˆ 3 / 4 * (1 - sin(x) ˆ 2) esiintyvä sin(x) voidaan tulkita yhdeksi muuttujaksi, jolloin kyseessä on sen ja y:n polynomi. Symbolista lineaarialgebraa ei tässä käsitellä. 1.4 Yhtälöt, listat, jonot, joukot, asetelmat, vektorit, matriisit,... Erilaisilla erottimilla lausekkeista voidaan muodostaa uusia käsitteitä, joista monet ovat matematiikasta tuttuja. Kirjoittamalla kahden lausekkeen väliin yhtäläisyysmerkki = saadaan yhtälö, esimerkiksi tan(x) = x. Ohjelmistot tuntevat yhtälön käsitteen ja käsittelevät sitä oikein. (Tavallisinta on tietysti yrittää ratkaista yhtälö numeerisesti tai symbolisesti, mutta yhtälöjä voidaan käsitellä muullakin tavoin.) Lausekkeista voidaan muodostaa erotinta käyttäen jono. Tavallisin erotin on pilkku,, esimerkiksi 1 - x ˆ 2, 3 - x, x ˆ 4, 0, 0 on viiden polynomin jono. Ohjelmistoissa on yleensä käsky, jolla jonoja voidaan muodostaa ohjelmallisesti. Jonoja tarvitaan mm. operaattorien argumentteina, tiedostorakenteina, yms. Jonojen perusoperaatio on katenaatio, jonka merkkinä on erotin. Tämä operaatio on selvästi liitännäinen, identiteettinä on tyhjä jono. Näin jonotkin muodostavat algebralliselta rakenteeltaan monoidin. Lista on yhdeksi lausekkeeksi merkitty jono. Matemaattisesti lista on järjestetty jono. Ohjelmistoissa on operaattori, joka ottaa listasta sen sisällä olevan jonon eli litistää listan. Joukko taas on matemaattinen joukko, ts. järjestämätön jono, joka ei sisällä samaa termiä monta kertaa. Joukkoihin voidaan soveltaa tavallisia joukko-opin operaatioita: yhdiste, leikkaus ja erotus. Asetelma eli taulu muodostuu taulukon muotoon kirjoitetuista lausekkeista. Tavallisesti tällainen taulukko tulkitaan matemaattiseksi vektoriksi tai matriisiksi. Todettakoon, että jonorakenne on eräänlainen liitännäisen operoinnin prototyyppi, josta helposti saadaan muita. Koska summa (merkkinä +) on liitännäinen, on summarakenne hyvin samantapainen kuin jonorakenne. Toisaalta siihen liittyvät summalle ominaiset tulkinnalliset piirteet, jotka ohjelmistot tunnistavat, ts. summa summataan. Samoin tulorakenne on hyvin samantapainen kuin jonorakenne, mutta siinäkin tulkinta tuo muita piirteitä. Tyhjä summa on nolla ja tyhjä tulo on ykkönen. Myös yhtälöitä, jonoja, listoja ja asetelmia voidaan nimetä. Niiden osiin viitataan tavalliseen tapaan indekseillä.
Luku 2 SYMBOLINEN DIFFERENTIAALILASKENTA 2.1 Symbolinen derivointi Symbolisista operaatioista periaatteessa yksinkertaisin on derivointi. Tämä johtuu siitä, että peruskursseilla opitut derivointisäännöt ovat selvästi symbolisia: perusoperaatioille saadaan symboliset derivointisäännöt ja toisaalta alkeisfunktioiden derivointi tuottaa toisia alkeisfunktioita. Näin onkin vain tarpeen jäsentää lauseke ja käyttää derivointisääntöjä ja tunnettuja alkeisfunktioiden derivaattoja. Derivaatan raja-arvomäärittelyä ei siten tarvita lainkaan! Sama koske osittaisderivointia. Seuraavassa kertauksen vuoksi derivointisäännöt: D(f(x) ± g(x)) =Df(x) ± Dg(x) D(f(x)g(x)) = g(x)df(x) + f(x)dg(x) D(f(x)/g(x)) = 1 (g(x)df(x) f(x)dg(x)) g(x) 2 ( ) g(x) D(f(x) g(x) )=f(x) g(x) Df(x)+(ln f(x))dg(x) f(x) k D(f(g 1 (x),...,g k (x)) = D i f(g 1 (x),...,g k (x))dg i (x) Df 1 (x) = i=1 1 Df(f 1 (x)) Tässä D i tarkoittaa osittaisderivointia i:nnen muuttujapaikan suhteen. Ohjelmistot osaavat nämä säännöt, myös määräämättömille funktioille. Korkeamman kertaluvun derivaatat saadaan toistamalla derivointia. Lausekkeissa saa myös esiintyä derivoituja määräämättömiä funktioita. Edelleen derivoitavissa lausekkeissa saa esiintyä integraaleja ja näidenkin derivointi on symbolista peruskursseilta tutun kaavan mukaan: b(x) b(x) D f(x, y)dy = D 1 f(x, y)dy + f(x, b(x))db(x) f(x, a(x))da(x). a(x) a(x) Pulmallisinta symbolisessa derivoinnissa on se, että lopputuloksena saatavat lausekkeet ovat usein hyvin isoja, vaikka ne itse asiassa sieventyisivät huomattavasti pienemmiksi. Näin ni- 6
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 7 menomaan sievennyksellä on tärkeä rooli symbolisessa derivoinnissa. Sievennykseen palataan myöhemmin Luvussa 6. Huomautus. Koska derivointi on näin symbolinen operaatio, voidaan funktion laskevasta ohjelmakoodista usein helposti muokata sen derivaatan laskeva koodi. Tätä kutsutaan automaattiseksi derivoinniksi, käyttäjän ei tarvitse sitä tehdä tai edes tietää, että derivointi tehtiin. (Ks. esimerkiksi RALL.) Vektorilaskennan nablauskaavat ovat kutakuinkin kaikki symbolisia identiteettejä, joten ne olisivat periaatteessa käytettävissä. Nablausta ei kuitenkaan ole yleisesti ohjelmistoissa, johtuen siitä, että kaavojen käyttö ei enää olekaan suoraviivaista vaan vaatii tietyt strategiat ja näitä ei ole saatu mekanisoiduksi tyydyttävästi. Koska nablauskaavat ovat symbolisia, niitä vastaava tulos saadaan toisinaan aikaan derivoinnilla ja sopivalla sievennyksellä. 2.2 Taylorin sarja Funktion f(x) Taylorin sarja pisteessä x = a saadaan tutulla kaavalla f(x) =f(a)+ 1 1! Df(a)(x a)+ 1 2! D2 f(a)(x a) 2 + 1 3! D3 f(a)(x a) 3 + + 1 n! Dn f(a)(x a) n + Koska derivaatat pisteessä x = a ovat symbolisesti laskettavissa, saadaan sarjasta lasketuksi symbolisesti periaatteessa miten tahansa suuri määrä termejä. Ohjelmistot eivät kuitenkaan yleensä pysty laskemaan yleistä termiä, vaan antavat tuloksen n:nnen asteen Taylorin kehitelmänä eli muodossa Taylorin polynomi + virhetermi eli f(x) =f(a)+ 1 1! Df(a)(x a)+ 1 2! D2 f(a)(x a) 2 + 1 3! D3 f(a)(x a) 3 + + 1 n! Dn f(a)(x a) n + O((x a) n+1 ). Tässä virhetermi O((x a) n+1 ) tarkoittaa kollektiivisesti sellaista korjaustermiä θ n (x), että θ n (x) C x a n+1 jollain välillä x a R, missä C on vakio (ns. O-notaatio). Samoin saadaan symbolisesti lasketuksi monen muuttujan funktion Taylorin sarjan termejä. Huomattakoon, että myös määräämättömien funktioiden Taylorin sarjat ovat käytettävissä ja että lausekkeissa saa esiintyä myös integraaleja. On muitakin tapoja saada symbolisesti Taylorin kehitelmiä. Jos esimerkiksi funktio y = y(x) määritellään yhtälöllä g(x)f(y) =h(x), missä f(y):n, g(x):n ja h(x):n Taylorin kehitelmät (pisteissä y = b ja x = a, joille g(a)f(b) = h(a))tunnetaan, saadaan y(x):n Taylorin kehitelmä pisteessä x = a y(x) =c 0 + c 1 (x a)+ + c m (x a) m + O((x a) m+1 ) lasketuksi iteroiden peräkkäisten approksimaatioiden menetelmällä: Peräkkäisten approksimaatioiden menetelmä: 1. Asetetaan r 0 ja y 0 b.
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 8 2. Lasketaan g(x):n ja h(x):n Taylorin polynomit P (x) ja Q(x) pisteessä x = a sekä f(y):n Taylorin polynomi R(y) pisteessä y = b. (Polynomien asteen pitää olla riittävän korkea.) 3. Ratkaistaan yhtälöstä P (x)r(y r )=Q(x) kerroin c r (unohtaen (x a) r :ää korkeammat x a:n potenssit). 4. Jos tarvitaan vielä korkeampiasteisia termejä, asetetaan r r +1 sekä y r y r 1 + c r (x a) r ja mennään kohtaan 2. Muuten tulostetaan y r ja lopetetaan. Peräkkäisten approksimaatioiden menetelmällä saadaan esimerkiksi lasketuksi funktioiden h(x) ja g(x) osamäärän h(x)/g(x) sekä neliöjuuren f(x) jms. Taylorin kehitelmät, kunhan tunnetaan lähtöfunktioiden kehitelmät. Edellinen saadaan käyttäen yhtälöä g(x)y = h(x) ja jälkimmäinen yhtälöllä y 2 = f(x). Onhuomattava, ettei menetelmä säilytä aina alkuperäisten Taylorin kehitelmien tarkkuutta. Esimerkiksi ns. sinc-funktion eli kardinaalisinin 1 sinc x = sin x x 2. asteen Taylorin kehitelmää origossa ei saa 2. asteen kehitelmistä sin x = x + O(x 3 ) ja x = x + O(x 3 ). Kuten peruskursseilla on opittu, määräämättömiä raja-arvoja voidaan useinkin laskea Taylorin sarjoja käyttäen, ottaen mukaan sopiva määrä termejä. Näin tämäkin operaatio voidaan suorittaa symbolisesti. Mutkikkaammat raja-arvot vaativat muunkinlaisia sarjakehitelmiä. 2.3 Eräitä apufunktioita ja niiden derivaattoja (Diracin) deltafunktiota δ(x) käytetään symbolisesti laskettaessa seuraavassa formaalisessa merkinnässä: b { f(c), jos c on integrointivälillä f(x)δ(x c)dx = 0 muuten. a Tässä oletetaan, että a b. Integrointiväli voi olla myös ääretön. Merkinnän etu on se, että integraalin sisään saadaan tavaraa, joka ei sinne normaalisti kuulu. Näin käsittely ja notaatio yksinkertaistuu ja yhtenäistyy. Jotta deltafunktiomerkintä olisi käyttökelpoinen, sovitaan vielä, että (1) b (f(x)δ(x c)+g(x))dx = b f(x)δ(x c)dx + b g(x)dx (yhteenlasku), (2) a b f(x)δ(x c)dx = b d a f(y + d)δ(y + d c)dy a (translaatio), (3) a a d b a f(x)δ(x c)dx = f(x)δ(x c)dx (a b, rajojen vaihto). a b 1 Nimi lienee englanninkielen sanaleikki, vrt. cardinal sin, peräisin J.M. Whittakerin klassikosta Interpolatory Function Theory. Cambridge University Press (1935).
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 9 Huomautus. On melko ilmeistä, ettei mikään tavallinen funktio voi käydä yo. deltafunktioksi. Deltafunktio onkin usein vain merkinnällinen apuväline. Matemaattisesti toki voidaan upottaa tavalliset funktiot laajempaan luokkaan, ns. yleistettyihin funktioihin, joihin myös deltafunktio kuuluu. Symbolisesti laskettaessa kumpikin tulkinta on mahdollinen. Funktio g(x) on funktion f(x) ns. heikko derivaatta, jos voidaan kirjoittaa f(x) =f(a)+ x a g(y)dy jollekin vakiolle a (voi olla ). Huomaa, ettei heikko derivaatta ole yksikäsitteinen. Vaikkakin yo. deltafunktiomerkintä on vain merkintä, voidaan sen avulla saada (heikot) symboliset derivaatat monille funktioille. Esimerkiksi x δ(y)dy = x 1 δ(y)dy = { 0, jos x<0 1, jos x 0 } = H(x), joten deltafunktio on ns. Heavisiden funktion H(x) symbolinen derivaatta. Samoin Tästä syystä voidaan merkitä D(H(x c)) = δ(x c). δ(x c) =0, kun x c, sillä H(x c) on vakio, kun x<ctai x>c. Edelleen on mukavaa sopia, että deltafunktio on parillinen funktio, ts. δ( x) =δ(x), kun x 0. Vielä, koska suoraan deltafunktion määritelmän mukaan b a f(x)δ(x c)dx = b a f(c)δ(x c)dx, on tapana kirjoittaa f(x)δ(x c) =f(c)δ(x c). Deltafunktioon voidaan soveltaa myös osittaisintegrointia: Lause 2.1. Jos f(x):llä on derivaatta, niin b a f(x)δ(x c)dx = / b a f(x)h(x c) b a H(x c)df(x)dx (osittaisintegrointi), kun c min(a, b). Todistus. Rajoitutaan tapaukseen, missä a < b ja c =0(muut menevät samoin). Saadaan kolme alatapausta: 0 on integrointivälillä. Silloin a<0 ja oikea puoli = f(b) b 0 Df(x)dx = f(0) = vasen puoli.
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 10 a on positiivinen. Silloin oikea puoli = b on negatiivinen. Silloin / b a oikea puoli = f(x) / b a 0 / b a b a f(x) =0=vasen puoli. 0 dx = 0 = vasen puoli. Seuraus. Tulolle f(x)h(x c) pätee tulon derivointisääntö. Todistus. Lauseen 2.1 nojalla (valitaan b = x) x f(x)h(x c) =f(a)h(a c)+ (f(y)δ(y c)+h(y c)df(y))dy. a Osittaisintegroimalla symbolisesti toisin päin kuin Lauseessa 2.1 (ja olettaen, että a<b) todetaan, että f(c), jos a<c<b 0, jos c<atai c>b } = = b a / b a b = f(x)δ(x c)dx F (x)δ(x c) a b F (x)d(δ(x c))dx, a F (x)d(δ(x c))dx missä F (x) on f(x):n integraalifunktio. Näin symbolisesti saadaan deltafunktion derivaatta D(δ(x c)). Eli derivaatta valitaan siten, että tulon derivointisääntö pätee tulolle f(x)δ(x c) (vrt. yo. Seuraus). Yleisesti n-kertaisella osittaisintegroinnilla voidaan perustella deltafunktion n:nnen kertaluvun derivaatan seuraava määritelmä: b { f(x)d n ( 1) n D n f(c), jos c on integrointivälillä (δ(x c))dx = 0 muuten. a Huomaa myös, että on järkevää merkitä D n (δ(x c)) =0, jos x c. Likeistä sukua Heavisiden funktiolle on signumfunktio 1, jos x>0 sgn(x) = 0, jos x =0 = H(x) H( x). 1, jos x<0
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 11 Näin ollen (symbolisesti) D sgn(x) =DH(x) DH( x)( 1) =2δ(x). Huomaa myös, että signumfunktio sgn(x) on itseisarvon x heikko derivaatta. Eräänlaiset yleistykset signumfunktiolle ovat katto ja pohja. Reaaliluvun x katto, merkitään x,onpienin kokonaisluku, joka on x.vastaavasti luvun x pohja, merkitään 2 x,onsuurin kokonaisluku, joka on x. Seuraavassa kuvaajat ja varsin ilmeisiä katon ja pohjan ominaisuuksia: katto pohja 3 2 1 4 3 2 1 1 2 3 4 1 x 2 3 (1) x = x x on kokonaisluku x = x { 1, jos x ei ole kokonaisluku (2) x x = 0, jos x on kokonaisluku (3) x 1 < x x x <x+1 (4) x = x ja x = x Edelleen, jos k on kokonaisluku, niin saadaan seuraavat ominaisuudet: (5) x = k k x<k+1 x 1 <k x (6) x = k k 1 <x k x k<x+1 (7) x + k = x + k ja x + k = x + k (8) x<k x <k (9) k<x k< x 2 Vanha, vieläkin usein käytössä oleva merkintä on [x].
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 12 (10) x k x k (11) k x k x Mitään varsinaisia perustuloksia ei katolle ja pohjalle ole, sievennykseen on kuitenkin toisinaan käytettävissä Lause 2.2. (McEliecen lemma) Jos f(x) on jatkuva ja aidosti kasvava ja jos x on kokonaisluku aina kun f(x) on kokonaisluku, niin f(x) = f( x ) ja f(x) = f( x ). Todistus. Näytetään kaava f(x) = f( x ). Pohjia koskevan kaavan todistus on kutakuinkin samanlainen (jätetään lukijalle). Jos x = x, niin asia on selvä. Näin ollen voidaan siirtyä tapaukseen x < x. Tällöin f(x) < f( x ), sillä f on aidosti kasvava, ja edelleen f(x) f( x ). Asetetaan vastaoletus: f(x) < f( x ). Silloin f(x) f(x) < f( x ). Koska f on jatkuva, niin on sellainen luku y väliltä x y< x, että f(y) = f(x). Mutta tällöin y on kokonaisluku lauseessa mainitun ehdon takia, mikä on ristiriita. Lauseesta saadaan erikoistapauksina mm. kaavat x = x ja x = x (valitaan f(x) = x). Edelleen, jos m 2 on kokonaisluku ja log m merkitsee m-kantaista logaritmia, niin log m x = log m x ja log m x = log m x (valitaan f(x) =log m x). Vielä, jos k ja n>0ovat kokonaislukuja, niin x + k x + k x + k x + k = ja = n n n n (valitaan f(x) = x + k n ). Kattoa ja pohjaa käyttäen saadaan ilmaistuksi reaalilukuväleillä olevien kokonaislukujen lukumäärät: Lause 2.3. (i) Välillä [a, b] on b a +1kokonaislukua (a b). (ii) Välillä [a, b) on b a kokonaislukua (a b). (iii) Välillä (a, b] on b a kokonaislukua (a b). (iv) Välillä (a, b) on b a 1 kokonaislukua (a <b). Todistus. (i) k on välillä [a, b] oleva kokonaisluku tarkalleen silloin, kun a k b. (ii) k on välillä [a, b) oleva kokonaisluku tarkalleen silloin, kun a k< b. (iii) k on välillä (a, b] oleva kokonaisluku tarkalleen silloin, kun a <k b. (iv) k on välillä (a, b) oleva kokonaisluku tarkalleen silloin, kun a <k< b.
LUKU 2. SYMBOLINEN DIFFERENTIAALILASKENTA 13 Katto ja pohja liittyvät likeisesti Heavisiden funktiosarjoihin, sillä ilmeisesti x = n=0 H(x n)+ (H(x n) 1) n=1 (ja x = x ). Siispä symbolisesti D x =D x = δ(x n), n= ns. 1-jaksoinen deltafunktio eli deltafunktiokampa (tunnetaan myös ideaalisen näytteenottofunktion nimellä). Kyseessä on erikoistapaus ns. deltafunktiosarjasta, jollaisen yleinen muoto on a n δ(x n). n=
Luku 3 KOKONAISLUVUT 3.1 Jaollisuus, tekijät, alkuluvut Symbolisen laskennan tavallisin valmistulkinta on numeraalijonojen tulkinta kokonaisluvuiksi. Näin ollen tietyt lukuteorian 1 käsitteet ja tulokset tulevat hyvin usein esille laskettaessa symbolisesti, vaikka lasku sinänsä ei liitykään lukuteoriaan. Kaikkien kokonaislukujen joukkoa merkitään Z:lla. Ei-negatiivisten kokonaislukujen eli ns. luonnollisten lukujen joukkoa {0, 1, 2,...} merkitään N:llä. Kokonaislukujen yhteen- ja kertolasku ovat tuttuja vaihdannaisia ja liitännäisiä operaatioita, joiden identiteettialkiot ovat 0 ja 1. Muista myös liitäntälaki x(y +z) = xy +xz sekä vastaluvun ja vähennyslaskun määrittelyt: x =( 1)x ja x y = x +( 1)y.Kokonaislukujen jakolasku tarkoittaa seuraavanlaista operaatiota: Jaettaessa kokonaisluku x (jaettava)kokonaisluvulla y 0 (jakaja) x saatetaan muotoon x = qy + r, missä kokonaisluku r on jakojäännös, joka toteuttaa ehdon 0 r < y. Kokonaisluku q on osamäärä. Lisäämällä x:ään toistuvasti y:tä tai y:tä nähdään, että x on mahdollista kirjoittaa ko. muotoon. Jos voidaan kirjoittaa x = qy, missä q on kokonaisluku, sanotaan, että x on jaollinen y:llä tai että y jakaa x:n tai että y on x:n tekijä, merkitään y x. Kokonaisluvun x ns. triviaalit tekijät ovat ±1 ja ±x. Mahdolliset muut tekijät ovat ei-triviaaleja. Seuraavat jakolaskun ja jaollisuuden ominaisuudet ovat melko ilmeisiä: (1) 0 on jaollinen millä tahansa kokonaisluvulla, mutta jakaa vain itsensä. (2) ±1 jakaa kaikki kokonaisluvut, mutta on jaollinen vain itsellään. (3) Jos y x ja x 0, niin y x. (4) Jos x y ja y z, niin myös x z. (5) Jos x y ja x z, niin myös x y ± z. (6) Jos x y ja z on kokonaisluku, niin x yz. 1 Lukuteoria on nimenomaan kokonaislukujen teoriaa. 14
LUKU 3. KOKONAISLUVUT 15 (7) Jakolaskun tulos on yksikäsitteinen. Jos nimittäin x = q 1 y + r 1 = q 2 y + r 2, missä q 1,q 2,r 1,r 2 ovat kokonaislukuja ja 0 r 1,r 2 <y, niin y jakaa r 1 r 2 :n. Koska r 1 r 2 < y, tästä seuraa että r 1 = r 2 ja edelleen että q 1 = q 2. Kokonaislukua, jolla on vain triviaalit tekijät, kutsutaan jaottomaksi. Jaoton kokonaisluku on alkuluku, jos seon 2. Ensimmäiset alkuluvut ovat 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,... 2 on ainoa parillinen alkuluku. Eräs symbolisen laskennan perustehtävä on testata onko luonnollinen luku alkuluku vai ei. Alkulukujen joukkoa merkitään toisinaan P:llä. Kokonaisluku, joka on 2 eikä ole alkuluku, on yhdistetty luku. Lause 3.1. Jos kokonaisluku x on itseisarvoltaan 2, niin sillä on alkulukutekijä eli ns. alkutekijä. Todistus. Jos x 2, alkutekijä p löytyy seuraavalla algoritmilla: 1. Asetetaan z x. 2. Jos z on jaoton, tulostetaan p = z ja lopetetaan. 3. Jos z ei ole jaoton, etsitään ei-triviaali tekijä u. Asetetaan z u ja mennään kohtaan 2. Menettely pysähtyy, sillä kohdan 3. kautta mentäessä aina z pienenee ja on lopulta alkuluku, jolloin tullaan ulos kohdasta 2. Seuraus. Alkulukuja on äärettömän monta. Todistus. Äärettömän pitkä jono alkulukuja voidaan saada aikaan seuraavalla jo muinaisten kreikkalaisten tuntemalla menettelyllä (joka ei tietenkään tuota kaikkia alkulukuja): 1. Asetetaan P 2. 2. Jos P = p 1,...,p n, niin lasketaan x = p 1 p n +1. Huomaa, ettei mikään jonon P alkuluvuista jaa x:ää (jakolaskun yksikäsitteisyys). 3. Lauseen 3.1 mukaisesti x:llä on alkutekijä p, joka ei siis kuitenkaan ole mikään jonon P alkuluvuista. Etsitään jokin p, asetetaan P P,pja palataan kohtaan 2. Symbolisen laskennan alkulukuihin liittyviä perustehtäviä ovat mm. seuraavat: (1) Laske (suuruusjärjestyksessä) n:s alkuluku. (2) Laske (suuruusjärjestyksessä) n ensimmäistä alkulukua. (3) Laske suurin (vast. pienin) alkuluku, joka on x (vast. x). (4) Laske alkuluvut, jotka ovat x. Jos merkitään π(x):llä niiden alkulukujen lukumäärää, jotka ovat x, niin saadaan asymptoottinen arvio
LUKU 3. KOKONAISLUVUT 16 Lause 3.2. (Alkulukulause) 2 lim x π(x) x/ ln x =1 Lause 3.3. Kokonaisluku x 0voidaan etumerkkiä vaille kirjoittaa alkulukujen tuloksi, ns. tekijöihinjako. Todistus. Seuraava menettely tuottaa jonon alkulukuja, joiden tulo on = ±x: 1. Asetetaan T NULL (tyhjä jono). 2. Jos x = ±1, tulostetaan T ja lopetetaan. (Muista, että tyhjä tulo on =1.) 3. Etsitään jokin x:n alkutekijä p (Lause 3.1), jolloin x = py. Asetetaan T T,p sekä x y ja mennään kohtaan 2. Menettely pysähtyy, koska aina kohdan 3. kautta mentäessä x pienenee ja on lopulta =1, jolloin tullaan ulos kohdasta 2. Myöhemmin todetaan vielä, että ko. tekijöihinjako on (tekijöiden järjestystä lukuunottamatta) yksikäsitteinen (ks. Pykälä 3.3). Luonnollisesti eräs symbolisen analyysin perustehtäviä on kokonaisluvun tekijöihinjaon etsiminen. Laskennallisesti tämä on varsin vaativa tehtävä. 3.2 Kokonaisluvun esitys eri kannoissa Tavallisin tapa esittää kokonaisluku on käyttää tuttua desimaaliesitystä eli 10-kantaista esitystä. Myös 2-kantainen eli binääriesitys on usein esillä, samoin 8-kantainen oktaaliesitys tai 16-kantainen heksadesimaaliesitys. Yleisen kannan esityksen antaa Lause 3.4. Jos k 2, niin jokainen positiivinen kokonaisluku x voidaan esittää yksikäsitteisesti muodossa x = a n k n + a n 1 k n 1 + + a 1 k + a 0, missä 0 a 0,a 1,...,a n k 1 ja a n > 0. (Kyseessä on x:n k-kantainen esitys, n +1on esityksen pituus.) Todistus. Esityksen eli jonon a n,a n 1,...,a 0 antaa seuraava algoritmi: 1. Asetetaan K NULL (tyhjä jono). 2. Jaetaan x kantaluvulla k: x = qk + r (osamäärä q, jakojäännös r). Asetetaan K r, K ja x q. 3. Jos x =0, tulostetaan K ja lopetetaan. Muussa tapauksessa mennään kohtaan 2. Koska kohdassa 2. aina x pienenee, menettely pysähtyy lopulta kohtaan 3. k-kantainen esitys on yksikäsitteinen. Jos nimittäin x = a n k n + a n 1 k n 1 + + a 1 k + a 0 = b m k m + b m 1 k m 1 + + b 1 k + b 0, missä 0 a 0,a 1,...,a n,b 0,b 1,...,b m k 1 ja a n,b m > 0 ja n m, niin ensinnäkin voidaan päätellä, että n = m (eli että esityksen pituus on yksikäsitteinen). Jos olisi n>m, niin olisi myös 2 Tämän todistus on varsin hankala!
LUKU 3. KOKONAISLUVUT 17 b m k m + b m 1 k m 1 + + b 1 k + b 0 (k 1)k m +(k 1)k m 1 + +(k 1)k + k 1 = k m+1 1 <k m+1 k n a n k n + a n 1 k n 1 + + a 1 k + a 0, mikä on ristiriita. Siispä n = m. Samalla tavoin voidaan todeta, että a n = b n. Jos nimittäin vaikkapa a n >b n, niin b n k n + b n 1 k n 1 + + b 1 k + b 0 (a n 1)k n +(k 1)k n 1 + +(k 1)k + k 1 = a n k n 1 <a n k n + a n 1 k n 1 + + a 1 k + a 0, mikä on taas ristiriita. Edelleen voidaan samalla tavoin näyttää, että a n 1 = b n 1, jne. Eo. todistuksen menettely antaa nollan esitykseksi tyhjän jonon, yleensä kuitenkin sovitaan, että ko. esitys on 0. Esitys on usein tapana kirjoittaa sanaksi eikä jonoksi, ts. erotinta (pilkkua) ei käytetä. Konversio eri kantaesitysten välillä (ns. kantamuunnos eli radix-muunnos) on tietysti symbolisen analyysin perustehtäviä. Lause 3.5. Positiivisen kokonaisluvun xk-kantaisen esityksen pituus on missä log k on k-kantainen logaritmi 3. log k x +1= log k (x +1), Todistus. Jos x:n k-kantainen esitys on x = a n k n + a n 1 k n 1 + + a 1 k + a 0,niin pituus on s = n +1. Ilmeisesti x k n ja toisaalta x (k 1)k n +(k 1)k n 1 + +(k 1)k + k 1=k n+1 1 <k n+1. Koska siis k s 1 x<k s, niin s 1 log k x<seli s = log k x +1. Toisaalta myös k s 1 <x+1 k s,joten s 1 < log k (x +1) s eli s = log k (x +1). 3.3 Suurin yhteinen tekijä ja pienin yhteinen jaettava Kokonaislukujen x ja y suurin yhteinen tekijä (s.y.t.) onsuurin kokonaisluku d, joka jakaa molemmat luvut, merkitään d = syt(x, y). S.y.t. on olemassa, jos ainakin toinen luvuista x ja y on 0. Huomaa, että s.y.t. on positiivinen. Jos syt(x, y) =1, sanotaan että luvuilla x ja y ei ole yhteisiä tekijöitä tai että ne ovat keskenään jaottomia. 3 Muistathan, että logaritmien kannan vaihto sujuu kaavalla log k x = ln x ln k.
LUKU 3. KOKONAISLUVUT 18 Lause 3.6. (Bezout n lause) Kokonaislukujen x ja y (joista ainakin toinen on 0) s.y.t. d voidaan kirjoittaa muotoon d = c 1 x + c 2 y (ns. Bezout n muoto), missä c 1 ja c 2 ovat kokonaislukuja (ns. Bezout n kertoimet). Lisäksi, jos x, y 0, voidaan olettaa, että c 1 y ja c 2 x. Todistus. Bezout n muodon samoin kuin s.y.t.:nkin antaa seuraava ns. (Yleistetty) Eukleideen algoritmi. Tässä oletetaan, että 0 x y, mikä ilmeisesti ei mitenkään rajoita tilannetta. Merkitään SYT(x, y) =(d, c 1,c 2 ). (Yleistetty) Eukleideen algoritmi: 1. Jos x =0, niin tulostetaan SYT(x, y) =(y, 0, 1) ja lopetetaan. 2. Jos x>0, niin jaetaan yx:llä: y = qx + r, missä 0 r<x. Ilmeisesti syt(x, y) = syt(x, r) (ajattele jaollisuuksia). Etsitään SYT(r, x) =(d, e 1,e 2 ). Silloin d = e 1 r + e 2 x = e 1 (y xq)+e 2 x =(e 2 e 1 q)x + e 1 y. Tulostetaan SYT(x, y) =(d, e 2 e 1 q, e 1 ) ja lopetetaan. Rekursio on päättyvä, koska min(r, x) < min(x, y), ts. aina kutsuttaessa SYT ko. minimiarvo pienenee ja on lopulta =0. Ilmeisesti juuri ennen kuin tullaan kohtaan 1. on y = qx ja r =0ja d = x, jolloin c 1 = 1 y ja c 2 =0 x. Toisaalta, jos y = qx + r ja d = e 1 r + e 2 x,missä e 1 x ja e 2 r, niin e 1 ja e 2 ovat erimerkkiset ja e 2 e 1 q = e 2 + e 1 q r + xq = y. Suoraan Bezout n lauseesta näkee seuraavan tuloksen: Seuraus. Jos kokonaisluku z jakaa kokonaisluvut x ja y (joista ainakin toinen on 0), niin se jakaa myös syt(x, y):n. Huomautus. Tästä johtuen syt(x, y) määritelläänkin usein siten, että se on x:n ja y:n yhteinen tekijä, joka on jaollinen kaikilla näiden lukujen yhteisillä tekijöillä. Tämä johtaa samaan s.y.t.:n käsitteeseen. Vm. määritelmä soveltuu kuitenkin myös tilanteeseen x = y =0ja antaa kaavan syt(0, 0) = 0. Toinen seuraus Bezout n lauseesta on lukujen tekijöihinjaon yksikäsitteisyys (ks. Lause 3.3). Lause 3.7. Kokonaisluvun x 0tekijöihinjako on yksikäsitteinen. Todistus. Asetetaan vastaoletus: On kokonaisluku x, jolla on (ainakin) kaksi eri tekijöihinjakoa. Voidaan olettaa, että x on positiivinen ja pienin sellainen positiivinen kokonaisluku, jolla on vastaoletuksessa mainittu ominaisuus. Ilmeisesti x 2 (sillä ykkösen ainoa tekijöihinjako on tyhjä tulo). Nyt x voidaan kirjoittaa tulomuotoihin x = p i 1 1 p i 2 2 p in n = q j 1 1 q j 2 2 q jm m, missä p 1,...,p n ovat eri alkulukuja ja samoin q 1,...,q m ovat eri alkulukuja ja i 1,...,i n,j 1,..., j m ovat positiivisia kokonaislukuja. Itse asiassa edelleen tiedetään, että myös alkuluvut p 1,...,
LUKU 3. KOKONAISLUVUT 19 p n eroavat alkuluvuista q 1,...,q m.jos nimittäin esimerkiksi p 1 = q 1, niin kokonaisluvulla x/p 1 olisi myös kaksi eri tekijöihinjakoa ja se on pienempi kuin x. Ilmeisesti syt(p 1,q 1 )=1, joten Bezout n muodossa 1=c 1 p 1 + c 2 q 1. Mutta tästä seuraa, että q j 1 1 1 q j 2 2 qm jm = c 1 p 1 q j 1 1 1 q j 2 2 qm jm + c 2 x, josta havaitaan, että p 1 jakaa tulon q j 1 1 1 q j 2 2 qm jm, ts. q j 1 1 1 q j 2 2 qm jm = p 1 z. Koska z:lla ja q j 1 1 1 q j 2 2 qm jm :llä on yksikäsitteiset tekijöihinjaot (ne ovat pienempiä kuin x), seuraa tästä, että p 1 on jokin alkuluvuista q 1,...,q m,mikä on ristiriita. Vastaoletus on siis väärä. Esitettäessä rationaaliluku muodossa x/y, ontapana että syt(x, y) =1, ts. luku on supistetussa muodossa. Tämä on erityisen tärkeää symbolisessa analyysissä, jotta x ja y eivät pääsisi kasvamaan suuriksi. Supistettu muoto saadaan luonnollisesti jakamalla x ja y syt(x, y):llä, joten pitkissä laskuissa s.y.t. joudutaan etsimään toistuvasti. On tärkeää huomata, että Bezout n lauseessa mainittu kertoimia koskeva ehto on voimassa eo. Eukleideen algoritmin joka vaiheessa. Välitulokset eivät näin kasva suuriksi. Jotta toisaalta saataisiin mielikuva siitä miten monta askelta eo. Eukleideen algoritmi enintään ottaa, merkitään Y n :llä pienintä sellaista positiivista kokonaislukua y, että jollekin kokonaisluvulle 0 x<y n Eukleideen algoritmi tarvitsee n askelta. Ilmeisesti Y 0 =1, Y 1 =2ja Y 2 =3. Lause 3.8. (Lamén lause) Y n toteuttaa rekursiokaavan Y n = Y n 1 + Y n 2, ts. Y n on ns. n +1:s Fibonaccin luku 4 F n+1. Lisäksi nimenomaan syt(f n,f n+1 ):n laskeminen vaatii ne n askelta Eukleideen algoritmilla, kun n>0. Todistus. Laskettaessa syt(x, Y n ) Eukleideen algoritmilla tehdään jakolaskut y 0 = Y n = q 1 x + r 1,y 1 = x = q 2 r 1 + r 2,..., y n 3 = r n 4 = q n 2 r n 3 + r n 2, y n 2 = r n 3 = q n 1 r n 2 + r n 1,y n 1 = r n 2 = q n r n 1, joten y n 1 2,y n 2 y n 1 +1,y n 3 y n 2 + y n 1,... Siispä pienin y 0 eli Y n saadaan valitsemalla y n 1 =2,y n 2 = y n 1 +1,y n 3 = y n 2 + y n 1,..., jolloin y n j = F j+1 (j =1, 2,...,n)jaerityisesti Y n = y 0 = F n+1 ja x = y 1 = F n. Seuraus. Jos x ja y ovat kokonaislukuja ja 0 x<y, niin syt(x, y):n laskeminen Eukleideen algoritmilla vie enintään ln( / 5y) ln 1+ 5 1 2 askelta. Todistus. Jos askelia tarvitaan n, niin y Y n = F n+1. Suoraan laskien voidaan todeta, että 4 Fibonaccin luvut F n (n =0, 1, 2,...)määritellään sopimalla ensin, että F 0 = F 1 =1ja jatkamalla määrittelyä rekursiokaavalla F n = F n 1 + F n 2 (n =2, 3,...), ks. Luku 9.
LUKU 3. KOKONAISLUVUT 20 F n = 1 ( ) n+1 2 1 ( ) n+1 2. 5 5 1 5 5+1 (Ks. myös Pykälä 9.3.3.) Näytetään tätä käyttäen, että F n > 1 5 ( 2 5 1 ) n (n 0). Koska ( 2 5+1 ) n+1 < 2 5+1, riittää näyttää, että ( ) n+1 ( ) n 2 2 5 1 5 1 2 5+1 eli että ( ) n ( ) 2 2 1 5 1 5 1 Tämä on kuitenkin selvä, sillä 2 5+1. 2 5 1 1= 5 1 2 = 2 5+1 ja 2 5 1 > 1. Siispä 1 5 ( 2 5 1 ) n+1 <F n+1 y, mistä otetaan puolittain logaritmit ja pohjat. Eukleideen algoritmin soveltaminen ei näin ole kovin työlästä, ln( 5y) on verrannollinen y:n pituuteen (Lause 3.5). Tarkemmin Eukleideen algoritmin laskennallista vaativuutta käsittelee esimerkiksi KNUTH. Useamman kuin kahden kokonaisluvun x 1,x 2,...,x N suurin yhteinen tekijä d = syt(x 1,x 2,...,x N ) määritellään samoin kuin kahdenkin eli se on suurin kokonaisluku, joka jakaa kaikki luvut x 1,x 2,...,x N. Jälleen vaaditaan, että ainakin yksi luvuista on 0,voidaan sopia, että x N 0. Tällainen s.y.t. voidaan laskea soveltamalla N 1 kertaa Eukleideen algoritmia: Lause 3.9. syt(x 1,x 2,...,x N )=syt(x 1, syt(x 2,...,x N )) ja lisäksi s.y.t. voidaan kirjoittaa Bezout n muodossa Todistus. Merkitään lyhyyden vuoksi = syt(x 1, syt(x 2, syt(x 3,...,syt(x N 1,x N ) ))) syt(x 1,x 2,...,x N )=c 1 x 1 + c 2 x 2 + + c N x N. d = syt(x 1,x 2,...,x N ) ja d = syt(x 1, syt(x 2, syt(x 3,...,syt(x N 1,x N ) ))). Bezout n lauseen nojalla syt(x N 1,x N )=e 1 x N 1 + e 2 x N
LUKU 3. KOKONAISLUVUT 21 ja edelleen syt(x N 2, syt(x N 1,x N )) = e 3 x N 2 + e 4 syt(x N 1,x N )=e 3 x N 2 + e 4 e 1 x N 1 + e 4 e 2 x N, jne., eli lopulta nähdään, että d = c 1 x 1 + c 2 x 2 + + c N x N. Tästä seuraa, että d d ja siis d d.toisaalta d jakaa x 1 :n ja s.y.t.:n syt(x 2, syt(x 3,...,syt(x N 1,x N ) )). Viimemainittu s.y.t. jakaa x 2 :n ja s.y.t.:n syt(x 3,...,syt(x N 1,x N ) ). Jne. Siispä d jakaa kaikki luvut x 1,x 2,...,x N ja näin ollen d d. Kaiken kaikkiaan päätellään, että d = d. Jos lukujen x 1,x 2,...,x N tekijöihinjaot ovat x i = ±p j i1 1 p j i2 2 p j im M (i =1, 2,...,N), missä sovitaan, että j ik =0, mikäli luku p k ei ole x i :n alkutekijä, niin ilmeisesti syt(x 1,x 2,...,x N )=p min{j 11,...,j N1 } 1 p min{j 12,...,j N2 } 2 p min{j 1M,...,j NM } M. Vaikeus tämän tuloksen käytössä on se, ettei tekijöihinjakoja yleisesti tunneta ja niiden etsiminen taas on tunnetusti hyvin työlästä. Kokonaislukujen x 1,x 2,...,x N pienin yhteinen jaettava (p.y.j.) onpienin positiivinen kokonaisluku, jonka kaikki luvut x 1,x 2,...,x N jakavat, merkitään pyj(x 1,x 2,...,x N ). Jotta p.y.j. olisi olemassa, pitää olla x 1,x 2,...,x N 0. Myös p.y.j. saadaan rekursiivisesti Eukleideen algoritmilla, sillä Lause 3.10. pyj(x 1,x 2,...,x N )=pyj(x 1, pyj(x 2,...,x N )) =pyj(x 1, pyj(x 2, pyj(x 3,...,pyj(x N 1,x N ) ))) ja pyj(x 1,x 2 )= x 1x 2 syt(x 1,x 2 ). Todistus. Ajatellen edellä ollutta tekijöihinjakoa on ilmeisesti pyj(x 1,x 2,...,x N )=p max{j 11,...,j N1 } 1 p max{j 12,...,j N2 } 2 p max{j 1M,...,j NM } M. Lauseen ensimmäinen kaava seuraa tästä, sillä p k :n eksponentti pyj(x 1, pyj(x 2,...,x N )):ssä on max{j 1k, max{j 2k,...,j Nk }} ja toisaalta max{j 1k, max{j 2k,...,j Nk }} = max{j 1k,j 2k,...,j Nk } (k =1, 2,...,M). Samoin toinen kaava seuraa tekijöihinjaosta, sillä alkutekijän p k eksponentti x 1 x 2 :ssa on j 1k + j 2k ja toisaalta max{j 1k,j 2k } = j 1k + j 2k min{j 1k,j 2k }. Seuraus. (Bezout n lause) pyj(x 1,x 2,...,x N ) voidaan esittää lukujen x 1,x 2,...,x N harmonisena yhdelmänä, ts. 1 pyj(x 1,x 2,...,x N ) = c 1 + c 2 + + c N (Bezout n muoto). x 1 x 2 x N Todistus. Jätetään lukijalle harjoitukseksi. Tavallinen tilanne, missä p.y.j. tulee esille, on etsittäessä rationaaliluvuille yhteenlaskua varten pienintä yhteistä nimittäjää.
LUKU 3. KOKONAISLUVUT 22 3.4 Kongruenssilaskenta eli moduläärilaskenta Kongruenssilaskennan idea on, että lasketaan vain kokonaislukujen jakojäännöksillä käyttäen (yhtä tai useampaa) kiinteää jakajaa, ns. modulia m 2. Kongruenssilaskentaa kutsutaan usein myös moduläärilaskennaksi. Sanotaan, että kokonaisluvut x ja y ovat kongruentit modulo m, merkitään x y mod m, jos x y on jaollinen m:llä. Tämä luetaan myös x on kongruentti y:n kanssa modulo m tai vain x on y modulo m. x y mod m sanoo, että jaettaessa x ja y modulilla m:llä saadaan sama (jako)jäännös, ts. x ja y kuuluvat samaan (jako)jäännösluokkaan modulo m. Jokainen kokonaisluku kuuluu aina johonkin jäännösluokkaan modulo m ja vain yhteen sellaiseen. Lause 3.11. (i) Jos x y mod m ja u v mod m, niin x + u y + v mod m. (ii) Jos x y mod m ja u v mod m, niinxu yv mod m. (iii) Jos x y mod m ja n on positiivinen kokonaisluku, niin x n y n mod m. Todistus. (i) Jos x y = km ja u v = lm, niin (x + u) (y + v) =(k + l)m. (ii) Jos x y = km ja u v = lm, niin xu yv =(x y)u +(u v)y =(ku + ly)m. (iii) Tämä seuraa (ii):sta. Näin ollen, jos ajatellaan jakojäännöksiä, voidaan laskea millä tahansa kokonaisluvuilla, joilla modulilla jaettaessa on kyseiset jakojäännökset, ja tulokset ovat samat, ts. edustajien valinnasta riippumattomat. Tietyt edustajajoukot, ns. jäännössysteemit, ovat kuitenkin usein esillä: positiivinen jäännössysteemi 0, 1,..., m 1; symmetrinen jäännössysteemi (parittomalle m:lle) m 1 2, m 3 2,..., 1, 0, 1,..., m 3 2 negatiivinen jäännössysteemi m +1,..., 1, 0., m 1 ; 2 Tavallisin on positiivinen jäännössysteemi. Yleisesti mitkä tahansa m kokonaislukua, joista mitkään eivät ole keskenään kongruentteja modulo m, muodostavat jäännössysteemin modulo m. Jakolasku ei yleisesti ole sallittua kongruensseissa, vaan vain seuraavassa mielessä: Lause 3.12. xu yu mod m on sama kuin kuin x y mod m/syt(u, m), eli kongruenssista saa supistaa pois kokonaisluvun, mikäli samalla jakaa modulin sen ja supistettavan luvun s.y.t.:llä. Todistus. Lähdetään ensin liikkeelle siitä, että xu yu mod m eli että (x y)u = km. Merkitään d = syt(u, m) ja u = du 1 sekä m = dm 1. Silloin ilmeisesti syt(u 1,m 1 )=1ja m 1 = m/syt(u, m) ja vielä (x y)u 1 = km 1. Bezout n lauseen mukaan 1=c 1 u 1 + c 2 m 1, josta seuraa että x y = c 1 u 1 (x y)+c 2 m 1 (x y) =(c 1 k + c 2 (x y))m 1, ts. että x y mod m/syt(u, m). Lähdetään sitten liikkeelle siitä, että x y mod m/d eli että x y = km/d.tästä seuraa, että (x y)d = km ja edelleen että (x y)u = u 1 km. Siispä xu yu mod m.
LUKU 3. KOKONAISLUVUT 23 Erityisesti kokonaisluvun, jolla ei ole yhteisiä tekijöitä modulin kanssa, saa supistaa pois kongruenssista (moduliin koskematta). Seuraus. Jos syt(x, m) = 1, niin luvut y + kx (k = 0, 1,..., m 1) muodostavat jäännössysteemin modulo m, olipa y mikä tahansa kokonaisluku. Todistus. Lukuja on m kpl. Jos y + ix y + jx mod m,missä 0 i, j m 1, niin ix jx mod m ja Lauseen 3.12 nojalla i j mod m. Siis j i = km,mutta koska 0 i, j m 1, tämä on mahdollista vain kun k =0eli i = j. Luvut eivät siis ole kongruentteja keskenään. Samantapaisella tekniikalla nähdään välittömästi, että jos syt(x, m) =1, niin x:llä on inverssi modulo m, ts. on sellainen luku y, että xy 1 mod m. Tällöin kirjoitetaan myös x 1 y mod m tai 1/x y mod m. Tällainen inverssi saadaan Eukleideen algoritmilla, sillä Bezout n lauseen nojalla 1=c 1 x+c 2 m ja näin x 1 c 1 mod m. Hyvin usein moduli on alkuluku p. Tällöin muut kuin p:llä jaolliset kokonaisluvut voidaan aina supistaa pois kongruensseista modulo p ja niillä on myös inverssi modulo p. Myös potenssien laskenta helpottuu, sillä Lause 3.13. (Fermat n pieni lause) Jos syt(x, p) =1ja p on alkuluku, niin x p 1 1 mod p. Todistus. Otetaan positiivinen jäännössysteemi 0, 1,..., p 1 sekä eo. Seurauksen antama jäännössysteemi 0,x,2x,...,(p 1)x. Nämä luvut ovat keskenään pareittain kongruentteja modulo p jossain järjestyksessä: 0 0 mod p, 1 k 1 x mod p, 2 k 2 x mod p,..., p 1 k p 1 x mod p. Siispä (Lause 3.11 kohta (ii)) 1 2 (p 1) k 1 k 2 k p 1 x p 1 mod p. Mutta k 1 k 2 k p 1 =1 2 (p 1) ja ilmeisesti syt(1 2 (p 1),p)=1, joten Lauseen 3.12 nojalla x p 1 1 mod p. Laskettaessa nyt x n modulo p, missä syt(x, p) =1ja n on suuri luku, jaetaan n ensin p 1:llä n = q(p 1) + r, 0 r<p 1, jolloin x n x q(p 1)+r (x p 1 ) q x r x r mod p. x r modulo p onkin sitten jo paljon helpompi laskea. Jos taas syt(x, p) 1, niin p x ja x n 0 mod p. Näin hyvinkin korkeiden potenssien lasku modulo alkuluku on rutiininomaista. Samalla tekniikalla saadaan myös x:n inverssi modulo p, sillä ilmeisesti x 1 x p 2 mod p. Jos modulin tekijöitä tunnetaan, ts. voidaan kirjoittaa m = m 1 m 2 m k, seuraa kongruenssista x y mod m luonnollisesti kongruenssit x y mod m i (i =1, 2,...,k). Jos moduli on suuri luku, voi usein olla helpompaa laskea käyttäen näitä pienempiä moduleja. Näin voidaan tehdä aivan yleisestikin, jos tekijät m 1,m 2,...,m k ovat pareittain keskenään jaottomia: