
'
' Lyapunov Space
'
' written by   scott dhomas trenn
'              797 Mitchell Street, Fredericton, NB, E3B 3S8, CANADA
'              INTERNET: wilkie@jupiter.sun.csd.unb.ca
'

REM $OPTION Y+

DEFINT a-z

SCREEN 1,640,400,LOG2(16),4
WINDOW 1,,(0,0)-(640,400),16+32+128+256,1

PALETTE 0, .67,.67,.67 : PALETTE 1, 0,0,0
PALETTE 13, 1,1,0 : PALETTE 7, 1,0,.8 : PALETTE 15, .8,.9,.8

LogOf2# = LOG(2)

IterationsStable = 100
IterationsChaotic = 10
xOrigin = 542
xScale = 71
yOrigin = 399
ySize = 380
rMin# = 1e-129#
rMax# = 4#

PRINT "Lyapunov Space";
LOCATE 2,1
FOR lp = 0 TO 15 : COLOR lp : PRINT "*"; : NEXT lp

rStep# = (rMax# - rMin#) / (ySize+1)
rChaotic# = 3.56994571869#

DIM counts(15), ranges#(15,2)
FOR lp =  0 TO 15 : READ ranges#(lp,0), ranges#(lp,1), ranges#(lp,2) : NEXT lp
DATA  0,      0,      0
DATA  1,      0,      0
DATA 15, -  .09,      0
DATA 14, -  .20, -  .09
DATA 13, -  .34, -  .20
DATA 12, -  .485, -  .34
DATA 11, -  .66, -  .485
DATA 10, -  .88, -  .66
DATA  9, - 1.12, -  .88
DATA  8, - 1.44, - 1.12
DATA  7, - 1.84, - 1.44
DATA  6, - 2.43, - 1.84
DATA  5, - 3.40, - 2.43
DATA  4, -10.00, - 3.40
DATA  3, -55.00, -10.00
DATA  2,      0,      0

r# = rMin#
FOR yCor = yOrigin TO yOrigin-ySize-1 STEP -1
        x# = .5
        total# = 0

        ' Eliminate transients
        FOR n = 1 TO 50 : x# = (r# * x#) * (1-x#) : NEXT n

        ' Plot logistic system
        IF r# < rChaotic# THEN
                Iterations = IterationsStable
        ELSE
                Iterations = IterationsChaotic
        END IF

        Total! = 0
        FOR n = 1 TO Iterations
                x# = (r# * x#) * (1-x#)
                Total# = Total# + (LOG(ABS(r# - 2*r#*x#))/LogOf2#)
        NEXT n
        Lyap# = Total# / Iterations

        IF Lyap# > 0 THEN
                COLOR 1 : INCR counts(1)
        ELSEIF Lyap# < ranges#(14,1) THEN
                COLOR 2 : INCR counts(2)
        ELSE
                t = 2
                DO
                        IF Lyap# > ranges#(t,1) AND Lyap# <= ranges#(t,2) THEN
                                COLOR ranges#(t,0) : INCR counts(t)
                                EXIT LOOP
                        END IF
                        INCR t
                LOOP
        END IF

        xCor = XOrigin + Lyap# * xScale
        IF xCor < 0 THEN xCor = 1 : COLOR 15
        PSET (xCor, yCor)
LINE -STEP (10,0)

        r# = r# + rStep#
NEXT yCor

LOCATE 6,1
FOR lp = 0 TO 15 : PRINT lp, counts(lp) : NEXT lp

WHILE INKEY$ = "" : SLEEP : WEND
WINDOW CLOSE 1
SCREEN CLOSE 1

END
