home *** CD-ROM | disk | FTP | other *** search
- ; Example procedures of nonlinear systems.
-
- ; *********************************************************************
- ; lorenz
- ; The Lorenz attractor.
-
- make "lorenz [
- procedure [ [ ] [ ] [ :x :y :z :xn :yn :zn :h :f ] ]
- make "s1 ( openscreen 3 1 [ Lorenz ] )
- make "w1 openwindow :s1
- setrgb :s1 0 [ 0 0 0 ]
- setrgb :s1 1 [ 15 15 15 ]
- setpen :w1 1
- make "x 0.06
- make "y 0.06
- make "z 0.06
- move :w1 + 320 * 6 :x - 200 * 6 :y
- make "h 0.005
- make "f / 8 3
- while [ true ] [
- make "xn + :x ( * 10 :h - :y :x )
- make "yn + :y * :h ( - * 28 :x :y * :z :x )
- make "zn + :z * :h - * :x :y * :z :f
- make "x :xn
- make "y :yn
- make "z :zn
- draw :w1 + 320 * 6 :x - 200 * 6 :y ] ]
-
- ; *********************************************************************
- ; bif
- ; Bifurcation diagram for May's equation.
-
- make "bif [
- procedure [ [ ] [ ] [ :r :x :b :sx :c :y :l ] ]
- make "s1 ( openscreen 3 3 [ bif ] )
- make "w1 openwindow :s1
- make "r 1
- while [ < :r 8 ] [
- setrgb :s1 :r ( se 15 + :r :r + :r :r )
- make "r + :r 1 ]
- setrgb :s1 0 [ 0 0 0 ]
- make "r 0
- make "sx 0
- while [ < :sx 640 ] [
- make "x 0.9
- make "l + 40 / :sx 3
- repeat :l [
- make "x / * :r :x power + :x 1 5
- make "y - 399 * :x 50
- make "c readpixel :w1 :sx :y
- setpen :w1 if < :c 6 [ + 1 :c ] [ 7 ]
- writepixel :w1 :sx :y ]
- make "sx + :sx 1
- make "r + :r 0.2 ] ]
-
- ; *********************************************************************
- ; bif2 pricesion ( limit )
- ; Bifurcation diagram for May's equation.
- ; bif2 1
- ; ( bif2 10 18 )
-
- make "bif2 [
- procedure [ [ :z ] [ :l ] [ :m :mi :r :x :sx :c :y :yy :zz ] ]
- make "s1 ( openscreen 3 3 ( se "\ bif2 :z :l ) )
- make "w1 openwindow :s1
- make "r 1
- while [ < :r 8 ] [
- setrgb :s1 :r ( se 15 + :r :r + :r :r )
- make "r + :r 1 ]
- setrgb :s1 0 [ 0 0 0 ]
- make "m ( system 3 ( * :z 8 640 ) )
- make "mi :m
- repeat * :z 640 [ poke 8 :mi 0.9 make "mi psum :mi 8 ]
- make "zz / 0.2 :z
- if emptyp :l [ make "l 40 ] [ ]
- repeat :l [
- make "r 0
- make "sx 0
- make "mi :m
- while [ < :sx 640 ] [
- make "yy -1
- repeat :z [
- make "x peek 8 :mi
- make "x / * :r :x power + :x 1 5
- poke 8 :mi :x
- make "y int - 399 * :x 45
- if = :yy :y
- [ ]
- [ make "c readpixel :w1 :sx :y
- setpen :w1 if < :c 6 [ + 1 :c ] [ 7 ]
- writepixel :w1 :sx :y ]
- make "mi psum :mi 8
- make "r + :r :zz
- make "yy :y ]
- make "sx + :sx 1 ] ]
- ( system 5 :m ) ]
-
- ; *********************************************************************
- ; bif3 pricesion ( limit )
- ; Bifurcation diagram for May's equation.
- ; bif3 1
- ; ( bif3 10 18 )
-
- make "bif3 [
- procedure [ [ :z ] [ :l ] [ :m :mi :r :x :sx :c :y :yy :zz ] ]
- make "s1 ( openscreen 3 1 ( se "\ bif3 :z :l ) )
- make "w1 openwindow :s1
- make "r 1
- setrgb :s1 0 [ 0 0 0 ]
- setrgb :s1 1 [ 15 15 15 ]
- make "m ( system 3 ( * :z 8 640 ) )
- make "mi :m
- repeat * :z 640 [ poke 8 :mi 0.9 make "mi psum :mi 8 ]
- make "zz / 0.2 :z
- if emptyp :l [ make "l 40 ] [ ]
- repeat :l [
- make "yy 399
- move :w1 0 :yy
- make "r 0
- make "sx 0
- make "mi :m
- while [ < :sx 640 ] [
- repeat :z [
- make "x peek 8 :mi
- make "x / * :r :x power + :x 1 5
- poke 8 :mi :x
- make "y int - 399 * :x 45
- if = :yy :y
- [ writepixel :w1 :sx :y
- move :w1 :sx :y ]
- [ draw :w1 :sx :y ]
- make "mi psum :mi 8
- make "r + :r :zz
- make "yy :y ]
- make "sx + :sx 1 ] ]
- ( system 5 :m ) ]
-
-