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

3 Replies to “Verhulstin logistinen malli ja GeoGebran iteraatiolista-komento”

  1. On mukava nähdä, millaisia mahdollisuuksia uudet työvälineet antavat vanhojen tehtävien käsittelyyn. Neljättä kymmentä vuotta vanhassa artikkelissani käytin muistaakseni Logo-kieltä. Finna antaa siitä seuraavat tiedot

    Kaoottista populaatiobiologiaa
    Korhonen, Hannu
    Julkaisussa Dimensio 52(1988) : 8, s.34-37

    Kannattaa muistaa, että mallit eivät ole pelkkää matematiikkaa, vaan selittävät todella luonnon tapahtumia, mistä käytin jutussani esimerkkinä metsokantojen vaihtelua.

    Yst. terv.
    Hannu Korhonen
    Orimattila

    Tykkää

  2. Kyllä ne lehdet ovat jossain laatikossa kirjahyllyn peränurkassa kirjakasojen takana. Pengon esiin, skannaan ja lähetän sähköpostissa.
    t. Hannu

    Tykkää

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggaajaa tykkää tästä: