Luulisi, ettei mikään ole niin tarkkaa kuin matemaattinen tarkkuus, mutta jonkinlainen kaaos voi tulla vastaan lukujenkin maailmassa. Osaltaan tämä johtuu siitä, että tietokoneella voidaan laskea vain äärellisellä tarkkuudella varsinkin systeemeissä, jotka ovat hyvin herkkiä alkuarvojen suhteen. Tällaisia ovat monet luonnontieteen matemaattiset mallit, joissa lasketaan planeettojen ratoja tai säätä. Kyllä, planeettojenkin liikkeissä on samanlaisia pienestä sattumasta kiinni olevia heilahteluja kuin sääilmiöissä. Viimeksi mainituista yksi tunnetuimmista on perhosefekti: jos jotakin perhosen siiven iskua ei olisi viime vuonna tapahtunut, niin jokin hirmumyrsky olisi vältetty tänä vuonna tai toisinpäin. Vuosituhansien saatossa saattavat pienet ja kaukaiset tekijät vaikuttaa planeettojen kiertoratoihinkin. Kun tähän lisätään vielä kvanttimekaniikan tuoma sattumallisuus mikromaailman ilmiöihin, niin ainakaan niitä ei voida ennustaa.
Tietokoneella on helppo tutkia numeerisesti sellaisia käsitteitä kuin jaksollisuus, kaaos ja tasapainotila. Esimerkiksi hyvin yksinkertainen rekursiivinen kaava

missä x:lle lasketaan arvo x:n edellisen arvon perusteella. Valitaan q väliltä nollasta kahteen. Jos q on nolla, niin sarja saa heti arvon yksi ja pysyy siinä, sillä 1=1-0*x*x, vaikka x olisi mikä tahansa luku. Tutkitaan E-kielisellä ohjelmalla, miten käy kun q=0.1. On selvää, että jos sarja saa missä tahansa vaiheessa saman arvon kuin joskus aikaisemmin, niin se ei kehity vaan toistaa itseään. Seuraavassa ohjelman pätkässä lasketaan kymmenen lukua kerralla taulukkoon ja tutkitaan, onko niiden joukossa samoja. E-kielessä ovat desimaaliluvut aivan tavallisia LONG-tyyppisiä 32-bittisiä (kokonais)lukuja, joille vain on omat laskutoimitukset. Muuttujan ja laskutoimituksen tulkitseminen reaalityyppiseksi merkitään huutomerkillä, samoin muunnokset lukutyyppien välillä. Lukuarvo tulkitaan desimaaliluvuksi (tai float, real - mikä se onkaan), jos siinä on desimaalipiste.
PROC main()
DEF x[10]: ARRAY OF LONG,
s[20]:STRING, /* apumuuttuja reaalilukujen tulostukseen */
x0=0.0, /* alkuarvo Huom! desimaalipiste on oltava nollassakin*/
ind=0, /* sarjan alkion indeksi (tämä on 16-bit kokonaisluku) */
i, j, /* taulukkojen käsittelyyn */
q=0.1, /* samoin tässä on oltava "." (vaikka arvo olisi 1.0) */
samoja, /* totuusarvo samojen löytymiselle 10 joukosta */
pot=10 /* apumuuttuja tulostuksen hallintaan */
WriteF('Rekursiokaava x:=1-qxx, missä x[0]=\s ',RealF(s,!x0,8))
WriteF('ja q=\s\n',RealF(s,!q,8))
REPEAT
FOR i:=0 TO 9 /* lasketaan kymmenen kerralla */
x[i]:=!1.0-(!q*x0*x0)
x0:=x[i]
INC ind
ENDFOR
i:=0 /* tarkastetaan löytyikö niiden joukosta */
REPEAT /* samoja */
j:=i+1
REPEAT
samoja:=(!x[i]=x[j])
INC j
UNTIL (j=9) OR samoja
INC i
UNTIL (i=8) OR samoja
/* tulostetaan jos samoja löytyi tai */
/* ind-10 on jaollinen 10 ot:lla */
IF samoja OR (Mod(ind-10,pot)=0)
FOR i:=0 TO 9
WriteF('x[\d] = \s\n',ind+i-9,RealF(s,x[i],8))
ENDFOR
pot:=10*pot
ENDIF
x0:=x[9] /* asetetaan uusi x0 ja jos ei paineta hiirtä, niin */
UNTIL (ind>650000) OR samoja OR (Mouse()=1) /* toistetaan kunnes...*/
WriteF('Ohjelma päättyi.')
ENDPROC
Tuloste:
Rekursiokaava x:=1-qxx, missä x[0]=0.00000000 ja q=0.10000001 x[1] = 1.0 x[2] = 0.90000000 x[3] = 0.91900000 x[4] = 0.91554392 x[5] = 0.91617792 x[6] = 0.91606184 x[7] = 0.91608312 x[8] = 0.91607920 x[9] = 0.91607984 x[10] = 0.91607976 x[11] = 0.91607976 x[12] = 0.91607976 x[13] = 0.91607976 x[14] = 0.91607976 x[15] = 0.91607976 x[16] = 0.91607976 x[17] = 0.91607976 x[18] = 0.91607976 x[19] = 0.91607976 x[20] = 0.91607976 Ohjelma päättyi.
Eli sarja lähestyy hyvin nopeasti arvoa 0.91607976.
Voidaan todeta, ettei raja-arvo (tässä tapauksessa kun q=0.1) riipu sarjan ensimmäisestä jäsenestä x[0], vaan esim. jos lähdemme arvosta x[0]=-5.0, niin saamme saman raja-arvon:
Rekursiokaava x:=1-qxx, missä x[0]=-5.0 ja q=0.10000001 x[1] = -1.50000000 x[2] = 0.77500000 x[3] = 0.93993744 x[4] = 0.91165176 x[5] = 0.91688912 x[6] = 0.91593144 x[7] = 0.91610696 x[8] = 0.91607480 x[9] = 0.91608072 x[10] = 0.91607960 x[11] = 0.91607984 x[12] = 0.91607976 x[13] = 0.91607976 x[14] = 0.91607976 x[15] = 0.91607976 x[16] = 0.91607976 x[17] = 0.91607976 x[18] = 0.91607976 x[19] = 0.91607976 x[20] = 0.91607976 Ohjelma päättyi.
Näin käy ainakin niin kauan kuin x[0] ei ole pienempi kuin noin -10.916. Alkuarvosta -10.917 raja-arvoksi yhtäkkiä tulee 0 (en tiedä miksi). Mutta annetaan nyt x[0]:n olla aluksi nolla ja tutkitaan raja-arvon määräytymistä pelkästään q:sta. Olkoon esim. q=0.7:
Rekursiokaava x:=1-qxx, missä x[0]=0.00000000 ja q=0.70000000 x[1] = 1.0 x[2] = 0.30000002 x[3] = 0.93700000 x[4] = 0.38542168 x[5] = 0.89601512 x[6] = 0.43800984 x[7] = 0.86570320 x[8] = 0.47539060 x[9] = 0.84180264 x[10] = 0.50395780 x[101] = 0.67937728 x[102] = 0.67691248 x[103] = 0.67925264 x[104] = 0.67703112 x[105] = 0.67914024 x[106] = 0.67713800 x[107] = 0.67903888 x[108] = 0.67723432 x[109] = 0.67894760 x[110] = 0.67732112 x[261] = 0.67811376 x[262] = 0.67811320 x[263] = 0.67811368 x[264] = 0.67811328 x[265] = 0.67811360 x[266] = 0.67811336 x[267] = 0.67811360 x[268] = 0.67811336 x[269] = 0.67811360 x[270] = 0.67811336 Ohjelma päättyi.
Huomataan, että sarja näyttää kyllä lähestyvän jotain raja-arvoa, mutta ei tarkasti saavuta sitä, vaan parilliset ja parittomat jäsenet saavuttavat omansa (vaikkakin hyvin läheiset). Kasvatetaan vielä hieman q:ta: q=0.74:
Rekursiokaava x:=1-qxx, missä x[0]=0.00000000 ja q=0.74000000 x[1] = 1.0 x[2] = 0.26000000 x[3] = 0.94997600 x[4] = 0.33218372 x[5] = 0.91834400 x[6] = 0.37591684 x[7] = 0.89542800 x[8] = 0.40667444 x[9] = 0.87761576 x[10] = 0.43004508 x[1121] = 0.66890328 x[1122] = 0.66890060 x[1123] = 0.66890324 x[1124] = 0.66890060 x[1125] = 0.66890324 x[1126] = 0.66890060 x[1127] = 0.66890324 x[1128] = 0.66890060 x[1129] = 0.66890324 x[1130] = 0.66890060
Edelleen parittomat ja parilliset jäsenet saavuttavat raja-arvonsa erikseen, mutta nyt hieman myöhemmin. Itse asiassa sarjan pitäisi saavuttaa yksikäsitteinen raja-arvo, jota ei tietokoneella saavuteta. Raja-arvo on helppo laskea: onhan se kiintopiste eli piste, jossa x=1-q*x*x, jolla on toisen asteen yhtälön (q*x*x+x-1=0) ratkaisu, kun x=(-1+-Sqrt(1+4q))/(2*q) eli edellisellä sarjalla olisi pitänyt olla raja-arvo: (-1+Sqrt(1+4*0.74))/(2*0.74)=0.668901942... Tutkitaan vielä arvoa q=0.75:
Rekursiokaava x:=1-qxx, missä x[0]=0.00000000 ja q=0.75000000 x[1] = 1.0 x[2] = 0.25000000 x[3] = 0.95312504 x[4] = 0.31866456 x[5] = 0.92383968 x[6] = 0.35989016 x[7] = 0.90285928 x[8] = 0.38863384 x[9] = 0.88672280 x[10] = 0.41029204 x[101] = 0.75357712 x[102] = 0.57409112 x[103] = 0.75281456 x[104] = 0.57495272 x[105] = 0.75207200 x[106] = 0.57579076 x[107] = 0.75134872 x[108] = 0.57660628 x[109] = 0.75064392 x[110] = 0.57740028 x[1001] = 0.69596128 x[1002] = 0.63672840 x[1003] = 0.69593272 x[1004] = 0.63675828 x[1005] = 0.69590416 x[1006] = 0.63678800 Tietokoneella on helppo tehdä monisivuisia x[1007] = 0.69587576 numeroita käsitteleviä artikkeleita. x[1008] = 0.63681764 x[1009] = 0.69584744 x[1010] = 0.63684724 x[10001] = 0.67605248 x[10002] = 0.65721476 x[10003] = 0.67605152 x[10004] = 0.65721572 x[10005] = 0.67605064 x[10006] = 0.65721668 x[10007] = 0.67604968 x[10008] = 0.65721764 x[10009] = 0.67604872 x[10010] = 0.65721852 x[52601] = 0.67077388 x[52602] = 0.66254676 x[52603] = 0.67077388 x[52604] = 0.66254676 x[52605] = 0.67077388 x[52606] = 0.66254676 x[52607] = 0.67077388 x[52608] = 0.66254676 x[52609] = 0.67077388 x[52610] = 0.66254676 Ohjelma päättyi.
Kestää yhä kauemmin, ennen kuin sarja saavuttaa raja-arvonsa. Itse asiassa 0.75 on "katastrofipiste", jonka jälkeen sarjan ei matemaattisestikaan pitäisi saavuttaa yksikäsitteistä raja-arvoa vaan kaksi erillistä. Esim. q=0.76:
Rekursiokaava x:=1-qxx, missä x[0]=0.00000000 ja q=0.76000000 x[1] = 1.0 x[2] = 0.24000000 x[3] = 0.95622400 x[4] = 0.30508310 x[5] = 0.92926248 x[6] = 0.34371816 x[7] = 0.91021192
jne..., kunnes sarja saavuttaa melko nopeasti kaksi raja-arvoansa:
x[511] = 0.78947528 x[512] = 0.52631384 x[513] = 0.78947528 x[514] = 0.52631384 x[515] = 0.78947528 x[516] = 0.52631384 x[517] = 0.78947528 x[518] = 0.52631384 x[519] = 0.78947528 x[520] = 0.52631384 Ohjelma päättyi.
q:n arvolla 1 sarja saavuttaa heti kaksi raja-arvoaan: 0 ja 1:
1-1*0*0=1 ja 1-1*1*1=0.
Mutta saavuttaako se ne kaikilla x[0]:n lähtöarvoilla?
Rekursiokaava x:=1-qxx, missä x[0] = 0.12300001 ja q=1.0 x[1] = 0.98487096 x[2] = 0.03002918 x[3] = 0.99909824 x[4] = 0.00180268 x[5] = 0.99999672 x[6] = 0.00000656 x[7] = 1.0 x[8] = 0.00000000 x[9] = 1.0 x[10] = 0.00000000 Ohjelma päättyi.
Saavuttaa, ja melko nopeasti. Paitsi: on olemassa arvo x[0]=0.618033988, joka on kiintopiste:
Rekursiokaava x:=1-qxx, missä x[0]=0.61803400 ja q=1.0 x[1] = 0.61803396 x[2] = 0.61803400 x[3] = 0.61803396 x[10001] = 0.61803396 x[10002] = 0.61803400 x[10003] = 0.61803396 x[10004] = 0.61803400 x[10005] = 0.61803396 x[10006] = 0.61803400 x[10007] = 0.61803396 x[10008] = 0.61803400 x[10009] = 0.61803396 x[10010] = 0.61803400
Sarja on ja pysyy siinä, mutta jos siihen tehdään pieni poikkeama - eli perhosen siivenisku tai hyttysen aivastus häiritsemässä Jupiterin kiertorataa - niin:
Rekursiokaava x:=1-qxx, missä x[0]=0.61803300 ja q=1.0 x[1] = 0.61803520 x[2] = 0.61803244 x[3] = 0.61803584 x[4] = 0.61803168 x[5] = 0.61803680 x[6] = 0.61803048 x[7] = 0.61803828 x[8] = 0.61802864 x[9] = 0.61804056 x[10] = 0.61802584 x[101] = 1.0 x[102] = 0.00000000 x[103] = 1.0 x[104] = 0.00000000
Sarja saavuttaa kaksi raja-arvonsa 1 ja 0 taas melko nopeasti.
Jatketaan q:n kasvattamista (ja annetaan x[0]:n olla taas aina 0). Seuraava katastrofipiste on q=1.25, jossa sarja ei saavuta kahta, vaan neljä raja-arvoansa:
Rekursiokaava x:=1-qxx, missä x[0]=0.10000001 ja q=1.25000000 x[1] = 0.98750000 x[2] = -0.21894538 x[3] = 0.94007864 x[4] = -0.10468484 x[5] = 0.98630136 x[6] = -0.21598792
jne..., jolloin sarja saavuttaa (tietokoneella kahdeksan desimaalin tarkkuudella) neljä raja-arvonsa, mutta ei kovin nopeasti:
x[17121] = 0.96672512 x[17122] = -0.16819692 x[17123] = 0.96463720 x[17124] = -0.16315615 x[17125] = 0.96672512 x[17126] = -0.16819692 x[17127] = 0.96463720 x[17128] = -0.16315615 x[17129] = 0.96672512 x[17130] = -0.16819692 Ohjelma päättyi.
Kun q:ta kasvatetaan ja annetaan sen lähestyä 1.401:tä, niin huomataan, että tällä välillä raja-arvojen määrä kaksinkertaistuu yhä uudestaan ja uudestaan, niin että mitä lähempänä 1.401:tä q on, sitä useampia raja-arvoja se saavuttaa.
Kaikesta edellä mainitusta voidaan ohjelmalla aikaansaada kuva 1:
Siinä siis q kasvaa vasemmalta oikealle 0 < q< 2 ja x kasvaa ylhäältä alas -1 < x < 1.1. Sarjan ensimmäiset arvot (0 ja 1 jne.) plotataan mustilla pis- teillä ja sitä valkoisemmilla, mitä suurempi järjestysnumero niillä on. Sel- keästi nähdään ne pisteet, joissa raja-arvot kahdentuvat. Kuvasta nähdään, kuin- ka pisteessä q=0.75 sarja saavuttaa raja-arvon. Mutta jos zoomataan aluetta, niin havaitaan, että se on harhaa: kuva 2
Kuvasta 2 nähdään selvästi ("perseen muodossa"), kuinka sarja ei todellisuudessa koskaan saavuta raja-arvoa pisteessä q=0.75 (vaikka äärellisen laskutarkkuuden omaavalla tietokoneella sen myös numeerisesti edellä saavuttikin).
Kuvasta 1 nähdään myös, kuinka pisteen q=1.401 jälkeen sarja ei saavuta yleensä mitään raja-arvoja, vaan heilahtelee summittaisesti(?) - mutta matemaattisen tarkasti - tiettyjen arvojen välillä. Kuitenkin tämänkin pisteen jälkeen on ha- vaittavissa alue (q>1.75), jossa sarja saavuttaa kolme tarkkaa raja-arvoa:
Aluetta 1.401:stä eteenpäin ei tunneta kovin tarkkaan. Mitään selkeätä matemaattista mallia ei ole sen käyttäytymiselle, vaikka selkeää säännönmukaisuutta sielläkin on havaittavissa. Determinismi ja matemaattinen tarkkuus antavat sijaa sattumalle ja kaaokselle.
Tässä tuli lähinnä tutkittua vain q:ta, koska käsittääkseni yleensä alkuarvon x[0] valitseminen - ainakin kun pysytään alueella -1 < x[0] < 1, ei vaikuta raja-arvoon - poikkeuksena kiintopisteet. Lopuksi kuitenkin kuva siitä, miten käy kun alkuarvona onkin x[0]=-2 (alueella, jossa q lähestyy 0.75:sta).