Verhulstin logistinen malli ja GeoGebran iteraatiolista-komento

Alun perin minun piti kirjoittaa pieni juttu GeoGebran Iteraatiolista/Iteraatio-komennoista, sitten mopo karkasi käsistä ja tästä tulikin tarina liittyen kaaosteorian syntyvaiheisiin. Täytynee myöhemmin kirjoittaa toinen artikkeli liittyen Iteraatio/Iteraatiolista -komentojen kielioppiin.

Tarinan lopusta löytyy linkki GeoGebra-kirjaan, jossa on tähän artikkeliin liittyviä GeoGebra-tiedostoja sekä linkki Python-versioon.

Verhulstin logistinen malli

1970-luvulla biologi Robert May tutki yksinkertaista rekursiivista populaatiomallia

x_{n+1}=r·x_n\left(1-x_n\right)

missä vakio r saa arvoja > 0. Tätä rekursiivista mallia  kutsutaan usein Verhulstin malliksi, sillä hän esitti mallin vuonna 1838.  Wikipediassa Verhulstin malli esitetään muodossa

\frac{dN}{dt}=rN-\alpha N^2

Mayn vuonna 1976  Naturessa julkaisussa artikkelissa ”Simple Mathematical Models With Very Complicated Dynamics” (linkki tarinan lopussa) löydettiin kaaos yksinkertaisella tavalla.

May muutti  r:n arvoja ja tutki millaiseen tilanteeseen iteraatio johti. Hän havaitsi, että pienillä r:n arvoilla iteraatiosta syntyvä lukujono suppenee kohden yhtä arvoa. Kasvattamalla r:ää lukujono päätyy hyppelehtimään kahden, neljän, …jne. arvon välillä. Näitä kasautumispisteitä kutsutaan attraktoreiksi.

Tein alla olevaan GeoGebra-taulukkoon pienen testin iteraatiosta eri r:n arvoilla. Rivillä 1 sarakkeesta B alkaen on eri r:n arvoja, alkuarvona x0 = 0.1. A-sarakkeella näkyy iteraation indeksi n ja sarakkeilla B-H laskennan arvot.

Vakion r arvoilla 0.5, …, 2.5 iterointi näyttää käyttäytyvän aika tylsästi. Lukujonot suppenevat kohti yhtä pistettä. r:n arvolla 3 jono näyttää hyppelehtivän kahden arvon välillä ja kun r  = 3.5 lukujono hyppelehtii neljän luvun välillä. Taulukosta näkee, että r:n arvolla 4 lukujono hyppelehtii ihan sekavasti..

Tässä vaiheessa jätetään taulukkolaskenta ja aletaan tutkia mallia GeoGebran iteraatio-komentojen avulla.

iteraatio Iteraatiolista-komennon avulla

GeoGebralla funktion iterointi onnistuu helposti Iteraatio ja  Iteraatiolista-komentojen avulla. Iteraatio-komento laskee iteraation n:n arvon ja Iteraatiolista tuottaa listan n:stä ensimmäisestä arvosta alkuarvo mukaan lukien; Iteraatiolista( <Funktio>, <Alkuarvo>, <Iteraatioiden määrä> ).  Teen tässä tarinassa kaikki komennot GeoGebra 5:n Syöttökenttään, on hyvä muistaa, että CAS:ia ei kannata käyttää, jos pisteitä on paljon. 

Tutkitaan ensin, mitä iteroinnissa tapahtuu, kun parametria r muutetaan.  Luodaan aluksi liuku r ja määritellään funktio. Iteraatiolista tuottaa listan iteroinnin n:nnestä termistä. 

Laitetaan pisteitä koordinaatistoon Jono-komennon avulla.

Kun vakion r arvoja muuttaa, niin näkee miten kasautumispiste muuttuu yhdestä pisteestä kahteen, sitten neljään jne. Tätä ilmiötä kutsutaan bifurkaatioksi.

Alla yksi kasautumispiste eli attraktori.

Kaksi kasautumispistettä.

Neljä kasautumispistettä.

Kahdeksaa on vaikeata löytää, sillä aika pian tuo kasautumispisteiden joukko muuttuu kaoottiseksi.

Kasautumispisteiden kuvaaja eri r:n arvoilla 

Tässä vaiheessa May ja kumppanit varmaankin päätyivät käyttämään apuna tietokoneita ja loivat kuvaajan, jota kutsutaan bifurkaatiodiagrammiksi. Mayn artikkelissa on oheinen kuvaaja. Mayn artikkelissa a vastaa tämän tarinan r:ää.

Tehdään ensin kokeilumalli yksittäisellä r:n arvolla. Luodaan sitten varsinainen kuvaaja käyttäen useita eri r:n arvoja Jono-komennon avulla.

harjoitusversio

Luodaan lista l1, jossa on funktion r x (1 – x) iteraation arvot, kun iteraatiota toistetaan n kertaa. Aluksi n = 100 ja r  vaikkapa 2.5. Käytän alussa pientä n:n arvoa, jotta testaaminen ei kaadu pisteiden lukumäärään.

Poimitaan m viimeistä listasta l1. Nämä toivottavasti edustavat kasautumispisteitä.

Tosin tuossa l2 listassa on 11 alkiota, ei tehdä siitä ongelmaa.

Luodaan r:n arvoista ja kasautumispisteiden arvoista pisteitä koordinaatistoon Zip-komennon avulla.  Zip-komennon toimintaa olen esitellyt esimerkiksi artikkelissa ”Kolme noppaa ja Zip-komento”, linkki löytyy lähteistä. Tuolla ylempänä tein saman Jono-komennon avulla. Zip on tyylikkäämpi :o)

Muokataan l3-pisteiden ominaisuuksia siten, että pisteistä jää jälki ja pisteen koko on pieni. Tehdään r:stä liuku ja muutetaan sen arvoja, näin saadaan kasautumispisteet näkyviin eri r:n arvoilla.

Muutetaan n:n ja m:n arvoja suuremmiksi, tässä vaiheessa ei kannata ahnehtia liian suurilla arvoilla. Muutetaan liu’un minimiarvoksi 1, maksimiarvoksi 4 ja animaatioaskeleeksi 0.01.

lopullinen versio bifurkaatiokuvaajasta

Luodaan yksi komento, jossa Jono-komennon avulla tuotetaan bifurkaatiokuvaaja. Minä käytin tekstinkäsittelyohjelmaa apuna, kun yhdistin Iteraatiolista, Poimi, Zip ja Jono -komennot yhdelle riville. GeoGebran yksi ”heikkous” on, että toisinaan se pakottaa käyttäjän kirjoittamaan pitkiä komentorivejä. Virheiden etsintä ja korjaaminen on suht’koht hankalaa. 

Tässä kuvassa n = 1000, m = 200 ja r:n arvojen välimatka d = 0.01.

m1 = Jono(Zip((q, s), s, Poimi(Iteraatiolista(q x (1 - x), 0.1, n - 1), n - m)), q, 1, 4, d)

Alla kasautumispisteet d:n arvolla 0.001 välillä (Jono-komennon reunat) arvoilla 3.4 – 4.


Jätän lukijan tutkimaan tarkemmin iteraatiolle tapahtuu eri r:n arvoilla ja miksi. Voi myös pohdiskella, miksi tässä tarinassa tutkitaan vain r:n arvoja 1 – 4 ja miksi iteroidut arvot pysyvät välillä 0 – 1. 

Pythonistit kirjoittanevat omat koodinpätkänsä bifurkaatiokaavion tuottamiseksi.

Laitan vielä loppuun bonuksena kuvaajan funktion iteroinnista. Kun Iteraatiolista-komennon kirjoittaa CASiin, niin se suorittaa iteroinnin koko funktiolle. Alla g(x) taitaa olla 32:n asteen polynomi.

Lähteet

Verhulstin logistinen malli – GeoGebra kirja
https://www.geogebra.org/m/grwcfuur

Bifurkaatio Pythonilla Colabissa
https://colab.research.google.com/drive/1jrF42hti2fEIrGgoi_BRonrW03JXi_L0?usp=sharing

Kolme noppaa ja Zip-komento
https://mikkorahikka.blog/2019/08/27/kolme-noppaa-ja-zip-komento/ 

Robert May, Simple Mathematical Models With Very Complicated Dynamics
https://www.researchgate.net/publication/237005499_Simple_Mathematical_Models_With_Very_Complicated_Dynamics

Verhulst Wikipediassa
https://en.wikipedia.org/wiki/Pierre_Fran%C3%A7ois_Verhulst

Bifurcation Diagram Wikipediassa
https://en.wikipedia.org/wiki/Bifurcation_diagram

Alla olevat kirjat ovat parhaat lähteeni aiheeseen.

James Cleick. Chaos. Cardinal. 1987. Luku Life’s Ups and Downs. Tämä kirja löytyy myös suomen kielellä.

Douglas R. Hofstadter. Metamagical Themas: Questing for Essence of Mind and Pattern. Penguin. 1985. Luku 16. Mathematical Chaos and Strange Attractors.

A.K. Dewdney. The Magic Machine, a Handbook of Computer Sorcery. Freeman. 1990 Luku 4 The Strange Attractions of Chaos. 

Ivars Peterson. The Mathematical Tourist. Freeman. 1988. Luku 6 The Dragons of Chaos.

Advertisement

GeoGebra versio 749 – mitä uutta

Edellisellä kerralla elokuussa GeoGebran versionumero oli 724. Katsotaan näin syyslukukauden lopuksi mitä uutta GeoGebra-ohjelmistoversioihin on tullut. Syksyn 2022 Abittissa on mukana versiot 5.0.668.0 ja 6.0.639.0. 

726

Uusi tyyli valituille pisteille, en keksi mikä näistä tyyleistä on uusi.

Näppäimistö-ikoni pitäisi näkyä vanhan alfa-merkin tilalla. Toki GG 5:ssä alfa-ikoni näkyy vielä.

729

CAS: Paremmat virheilmoitukset, jos muuttujien lukumäärä on väärin.

Bugikorjauksia taulukoiden tallentamiseen ja kiinnittyville pisteille napakoordinaatistossa.

”transparent:true” toimii oikein 3D:ssä

Notes: Kuvia ja kaavoja voi vetää Notesin ikkunan ulkopuolelta.

Paloitellusti määriteltyjen kuvaajat toimivat paremmin Jos-komennon kanssa.

730

Uusia kuvia painikkeita varten.

731

Pikkukorjauksia

732

Korjaus integraalin näkyvyydelle piirtoalueella, kun muuttuja on false.

734

Korjauksia taulukkolaskennan muokkaamiseen iOS:ssä.

735

Todennäköisyyslaskuri on lisätty iOS ja Android-versioihin.

736

Korjaus WebGL:n toimintaan.

Korjaus riippuvien objektien liikkumiseen vedettäessä ohjelmallisesti  monikulmioita.

739

Spliniä voi vetää.

Korjauksia alasvetovalikkojen toimintaan, enableFileFeatures -komentoon, kuvaajien piirtoon ja työkaluihin.

741

Korjaus kuvaajanpiirto-ongelmiin. Esimerkiksi Derivaatta(2^x).

Korjaus yhden muuttujan analyysin frekvenssitaulukkoon. 

CAS: korjauksia Ratkaise ja NRatkaisut -komentojen toimintaan.

Useammille objekteilla voi määrittää kiinteän paikan asetuksissa.

742

Korjaus SovitaPolynomi(lista, 1) -komennon toimintaan. Tästä ilkeästä bugista keskusteltiin suomalaisissa Facebook-ryhmissä jokin aika sitten.

Uusia värejä koordinaattiakseleille.

744

Korjaus regressiosuoran tallentamiseen.

Korjauksia kuvaajien piirtoon, esim. f(x) = Normaalijakauma(5, 2, x, false) ja g(x) = x + sqrt(2*3).

CAS: Korjauksia Raja-arvoon ja funktion useiden arvojen laskemiselle.

Korjaus napakoordinaatiston pisteiden esittämiseen ja muokkaamiseen (1;20deg).

745

Korjaus -1 / tan²(x) – 1 kuvaajan piirtoon.

749

Uusi skriptauskomento AsetaKuva( Objekti, Kuva).

Uusia parametrejä appleteille (koodaajille) ”ScreenReaderMode”:”Unicode” tai ”ScreenReaderMode”:”ASCII”

Tekstin ja kuvien valitseminen tabulaattorilla.

Uudet ikonit kun vaihdetaan tarkan ja likiarvon välillä. Ei GG 5.

Classic 6: ”Open Tool” lisätty. En löytänyt tätä. Tällaista ei ole käännöksessä.

Kun objektin kiinnittää asetuksissa Kiinnitä objekti-ruksilla, niin paikan koordinaateissa voi olla muuttujia.

Korjauksia kosketusnäytöllisten versioiden liukujen toimintaan.

Lähteet

GeoGebra changelog
https://wiki.geogebra.org/en/Reference:Changelog_6.0 

Abitti-koejärjestelmässä käytettävissä olevat ohjelmat, luettu 16.12..2022
https://www.ylioppilastutkinto.fi/ylioppilastutkinto/digitaalinen-ylioppilastutkinto/koejarjestelman-ohjelmat

mielenkiintoinen jakolasku – 666/(6+6+6)= 777/(7+7+7)

Tällaisen löysin “Miraculous world of Numbers” -blogista. Enpä ole ennen törmännyt tähän. Tästä saa mukavan tutkimus/todistustehtävän peruskoululaisille ja lukiolaisille. 

Tutkitaan tätä ongelmaa GeoGebran CASilla.

Kolmella numerolla

Taulukkolaskennalla sama juttu.

Jos tutkitaan samaa asiaa isommalla lukumäärällä numeroita, vaikkapa viidellä numerolla, niin osamäärä toki muuttuu, mutta se pysyy samana.

Taulukkolaskennassa

Kokeillaan vielä vaikkapa 15 numerolla

Pohdiskeltavaa

Sovitaan, että a on jokin numeroista 1-9 ja n on osoittajan numeroiden määrä. Näin ollen tutkittava lukumme on 

  1. Todista, että kun n on 2, niin osamäärä pysyy muuttumattomana kaikilla a:n arvoilla.
  2. Todista, että jokaista n:n arvoa 1, 2, 3, … vastaa osamäärän arvo, joka on sama kaikilla a:n arvoilla.
  3. Määritä

Lähteet

Luin aiheesta ensimmäisen kerran täältä, “Miraculous world of Numbers” -blogi

https://anil7pute.blogspot.com/2022/12/136-number-pattern-and-its-beauty.html