Tässä blogissa esitellään matematiikkaa visuaalisesti ja tee-se-itse-periaatteella. Tämä tarkoittaa sitä, että kaikki asiat esitetään matematiikan (joskus puisevaksi haukutun) kielen lisäksi kuvina. Kaikkiin kuviin sekä matematiikan konsepteihin annetaan myös python-ohjelmointikieliset koodit, jolla lukija voi itsekin luoda kuvia ja kokeilla miten asiat toimivat käytännössä. Pääaiheita ovat fraktaalit, kaaos ja 3d-grafiikka, jotka kaikki ovat helposti visualisoitavia aiheita, mutta samalla sisältävät asioita monilta matematiikan eri aloilta. Kaikissa näissä aiheissa alkuun pääsee helposti, mutta syvemmälle mentäessä aiheista löytyy yhä monimutkaisempia ja matemaattisesti haastavampia puolia.

lauantai 10. syyskuuta 2011

Julian joukko

Julian joukko hyvin samankaltainen kuin Mandelbrotin joukko, mutta Julian joukossa iterointi aloitetaankin tarkasteltavasta kompleksitason pisteestä z[0] = c, jossa c = x + iy. Iteroitavana funktiona on nyt z[n+1] = z[n]^2 + b, jossa b on jokin vapaasti valittava kompleksilukuvakio. Muutoin joukon määritelmä on täysin sama kuin Mandelbrotin joukon, eli piste c kuuluu joukkoon jos iteraatio ei mene äärettömään (ts. sen itseisarvo ei ylitä lukua 2).

Alla on esitettynä Julian joukko vakioparametrilla b = -0.8 + 0.156i (tai -0.8 + 0.156j Pythonin notaatiolla):





















Koodi kuvan tuottamiseen on tällainen:

from Tkinter import Tk, PhotoImage, Label
from math import *

def main():
    root = Tk()
    pic = PhotoImage(width=400, height=400)
    lbl = Label(root, image=pic)
    lbl.pack()
    root.update()

    b = -0.8 + 0.156j
    max_iter = 1000

    for y in range(pic.height()):
        for x in range(pic.width()):

            xs = 3.0 * x / pic.width() - 1.5
            ys = 3.0 * y / pic.height() - 1.5

            z = xs + ys*1j
            n = 0
            while n < max_iter and abs(z) <= 2:
                z = z**2 + b
                n = n + 1

            if n == max_iter:
                (red,green,blue) = (0,0,0)
            else:
                (red,green,blue) = (n,2*n,3*n + 150)

            color = "#%02x%02x%02x" % (red % 256, green % 256, blue % 256)

            pic.put(color, (x,y))

        root.update()
    root.mainloop()

main()

Ei kommentteja:

Lähetä kommentti