En veldig enkel tilfeldig tall-generator

Akkurat nå leser jeg boken "Chaos - A Very Short Introduction". Den definerer et kaotisk system til å være et system som er veldig ømfintlig overfor initialbetingelsene. På et tidspunkt nevner boken et veldig enkelt dynamisk system.

Hva mener vi med et dynamisk system? For våre formål mener vi bare en følge med tall, x_0, x_1, \ldots. En enkel klasse av dynamiske systemer er på formen x_0=a for en eller annen a, som vi kaller initialverdien. Så definerer vi rekursivt alle andre verdier av x_n som x_{n+1}=f(x_n) hvor f(x) er en eller annen funksjon.

Nå skal vi la f(x)=4x(1-x). Denne har to nullpunkter, nemlig x=0 og x=1. Den har et toppunkt i x=1/2.

Dette gir opphav til et dynamisk system så snart vi velger en initialverdi. Det kule med denne enkle funksjonen, er at i tidligere tider brukte man denne for å generere "tilfeldige" tall. La oss se litt på dette. En enkel, rekursiv implementasjon i SAGE er gitt ved:

def r(x,n):
    if n==0:
        return x
    else:
        return r(4*x*(1-x),n-1)

Vi genererer listen:

def generateList():
    return [[i,r(1/float(pi),i)] for i in range(0,500)];
L = generateList()

Og vi plotter den:

p = line(L)
p.show(xmin=0,xmax=500,ymin=0,ymax=1)

Her er resultatet vi får (klikk på bildet for noe større versjon):

Dette er kanskje litt overveldende. La oss bare ta 100 punkter:

Dette er ganske kult, for vi ser at oppførselen til følgen er helt vill. Betydningen av "vill" kan defineres matematisk, men la oss hoppe over det. Poenget er at følgen i stor grad oppfører seg "tilfeldig". Vi ser også at små endringer i startverdien kan gi helt forskjellige følger. Under er først for startverdien 0.3, så for startverdien 0.31.

Vi ser at grafene er ganske like, men at verdiene opptrer på ganske forskjellige steder. Dette kan utnyttes for å lage tilfeldige tall. Man kan for eksempel først velge en initialverdi, så kjøre det dynamiske systemet, og bruke dette til å generere en følge av 100 tall. Neste gang velger man en annen initialverdi, og man vil få en følge som ikke ligner på den forrige.

Legg igjen en kommentar