home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / CHAOSEXE.ZIP / XTENT.TRU < prev   
Text File  |  1980-01-01  |  6KB  |  189 lines

  1. DECLARE DEF TENT
  2. !PROGRAM "XTENT"
  3. LIBRARY "SGLIB.TRC"
  4. DIM CELL(1000),PROB(1000),G(1),H(1)
  5. CLEAR
  6. PRINT"                COMPREHENSIVE TENT MAP PROGRAM"
  7. PRINT
  8. PRINT"CHOOSE ONE OF THE FOLLOWING OPTIONS FOR THE TENT MAP:"
  9. PRINT" 1)RETURN MAP"
  10. PRINT" 2)BIFURCATION DIAGRAM"
  11. PRINT" 3)ENTROPY DIAGRAM"
  12. PRINT" 4)LYAPUNOV EXPONENT DIAGRAM"
  13. INPUT PROMPT" CHOOSE 1,2,3, OR 4: ":CHOICE
  14. CLEAR
  15. !
  16. CALL LINPUTS(CHOICE,XINT,LAMBDA,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM,ORDER,NUMCELLS,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
  17. !
  18. !GRAPHING SET-UP PROCEDURE
  19. CALL SETXSCALE(XMIN,XMAX)
  20. CALL SETYSCALE(YMIN,YMAX)
  21. CALL SETAXES(0)
  22. CALL SETTEXT(TITLE1$,HLABEL$,VLABEL$)
  23. CALL RESERVELEGEND
  24. DATA 0,0
  25. CALL DATAGRAPH(G,H,0,0,"WHITE")
  26. CALL GOTOCANVAS
  27. !
  28. IF CHOICE=1 THEN CALL CALCULATION1(LAMBDA,XINT,INITNUM,FINNUM,ORDER)
  29. IF CHOICE=2 THEN CALL CALCULATION2(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM)
  30. IF CHOICE=3 THEN CALL CALCULATION3(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM,NUMCELLS)
  31. IF CHOICE=4 THEN CALL CALCULATION4(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM)
  32. !
  33. SUB LINPUTS(CHOICE,XINT,LAMBDA,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM,ORDER,NUMCELLS,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
  34.     INPUT PROMPT"INPUT INITIAL X VALUE:":XINT
  35.     IF CHOICE=1 THEN INPUT PROMPT"INPUT LAMBDA, [0,1]:":LAMBDA
  36.     INPUT PROMPT"INPUT NUMBER OF INITIAL THROWAWAY ITERATIONS:":INITNUM
  37.     INPUT PROMPT"INPUT TOTAL NUMBER OF ITERATIONS:":FINNUM
  38.     IF CHOICE>1 THEN
  39.        INPUT PROMPT"INPUT LOWEST LAMBDA VALUE:":INITLAMBDA
  40.        INPUT PROMPT"INPUT HIGHEST LAMBDA VALUE:":FINLAMBDA
  41.     END IF
  42.     IF CHOICE=1 THEN INPUT PROMPT"INPUT ORDER OF MAP:":ORDER
  43.     IF CHOICE=3 THEN INPUT PROMPT"INPUT # OF CELLS:":NUMCELLS
  44.     IF CHOICE=1 THEN LET ORDER$=STR$(ORDER)
  45.     IF CHOICE=1 THEN
  46.        LET XMIN=0
  47.        LET XMAX=1
  48.        LET YMIN=0
  49.        LET YMAX=1
  50.        LET TITLE1$="TENT MAP"
  51.        LET TITLE2$="X(N+"&ORDER$&")  VERSUS X(N)"
  52.        LET VLABEL$="N+"&ORDER$&"  X VALUE"
  53.        LET HLABEL$="N  X VALUE"
  54.     END IF
  55.     IF CHOICE>1 THEN
  56.        LET XMIN=INITLAMBDA
  57.        LET XMAX=FINLAMBDA
  58.        LET STEPLAMBDA=(XMAX-XMIN)/740
  59.     END IF
  60.     IF CHOICE=2 THEN
  61.        LET YMIN=0
  62.        LET YMAX=1
  63.        LET TITLE1$="TENT MAP BIFURCATION DIAGRAM"
  64.        LET TITLE2$="LAMBDA="&STR$(XMIN)&" TO LAMBDA="&STR$(XMAX)
  65.        LET VLABEL$="X"
  66.        LET HLABEL$="LAMBDA"
  67.     END IF
  68.     IF CHOICE=3 THEN
  69.        LET YMIN=INT(LOG(1/NUMCELLS))
  70.        LET YMAX=1
  71.        LET TITLE1$="TENT MAP ENTROPY"
  72.        LET TITLE2$="LAMBDA="&STR$(INITLAMBDA)&" TO LAMBDA="&STR$(FINLAMBDA)&":   #CELLS="&STR$(NUMCELLS)&":    RANDOM ENTROPY="&STR$(-LOG(NUMCELLS))
  73.        LET VLABEL$="X"
  74.        LET HLABEL$="LAMBDA"
  75.     END IF
  76.     IF CHOICE=4 THEN
  77.        LET YMIN=-3
  78.        LET YMAX=1
  79.        LET TITLE1$="TENT MAP LYAPUNOV EXPONENTS"
  80.        LET TITLE2$="LAMBDA="&STR$(INITLAMBDA)&" TO LAMBDA="&STR$(FINLAMBDA)
  81.        LET VLABEL$="LYAP EXP"
  82.        LET HLABEL$="LAMBDA"
  83.     END IF
  84. END SUB
  85.  
  86. !
  87. SUB CALCULATION1(LAMBDA,XINT,INITITERATION,ITERATIONNUM,ORDER)
  88.     PLOT LINES: 0,0;1,1           !PLOTS X(N+1)=X(N) LINE
  89.     FOR I=0 TO 1 STEP .001        !PLOTS CURVE OF Y=TENT 
  90.         LET J=I
  91.         FOR ORD=1 TO ORDER
  92.             IF J<.5 THEN
  93.                LET Z=2*LAMBDA*J
  94.             ELSE
  95.                LET Z=2*LAMBDA*(1-J)
  96.             END IF
  97.             LET J=Z
  98.         NEXT ORD
  99.         PLOT I,Z
  100.     NEXT I
  101.     LET X=XINT                    !PLOTS RETURN MAP
  102.     LET Y=0
  103.     IF INITITERATION= 0 THEN
  104.        PLOT X,0;
  105.     END IF
  106.     FOR I=1 TO ITERATIONNUM
  107.         LET J=X
  108.         FOR ORD= 1 TO ORDER
  109.             LET Y=TENT(J,LAMBDA)
  110.             LET J=Y
  111.         NEXT ORD
  112.         IF I>=INITITERATION THEN
  113.            PLOT X,Y;
  114.            PLOT Y,Y;
  115.         END IF
  116.         LET X=Y
  117.     NEXT I
  118. END SUB
  119. !
  120. SUB CALCULATION2(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM)
  121.     FOR LAMBDA=INITLAMBDA TO FINLAMBDA STEP STEPLAMBDA
  122.         LET X=XINT
  123.         FOR I=1 TO FINNUM
  124.             LET Y=TENT(X,LAMBDA)
  125.             IF I>INITNUM THEN
  126.                PLOT LAMBDA,Y
  127.             END IF
  128.             LET X=Y
  129.         NEXT I
  130.     NEXT LAMBDA
  131. END SUB
  132. !
  133. SUB CALCULATION3(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM,NUMCELLS)
  134.     FOR LAMBDA=INITLAMBDA TO FINLAMBDA STEP STEPLAMBDA
  135.         LET ENTROPY=0
  136.         FOR L=1 TO NUMCELLS
  137.             LET CELL(L)=0
  138.         NEXT L
  139.         LET X=XINT
  140.         FOR I=1 TO FINNUM
  141.             LET Y=TENT(X,LAMBDA)
  142.             IF I>INITNUM THEN
  143.                LET L=INT(NUMCELLS*Y)+1
  144.                LET CELL(L)=CELL(L)+1
  145.             END IF
  146.             LET X=Y
  147.         NEXT I
  148.         FOR L=1 TO NUMCELLS
  149.             LET PROB(L)=CELL(L)/(FINNUM-INITNUM)
  150.             IF PROB(L)>0 THEN
  151.                LET ENTROPY=ENTROPY+PROB(L)*LOG(PROB(L))
  152.             END IF
  153.         NEXT L
  154.         PLOT LAMBDA,ENTROPY;
  155.     NEXT LAMBDA
  156. END SUB
  157. !
  158. SUB CALCULATION4(XINT,INITLAMBDA,FINLAMBDA,STEPLAMBDA,INITNUM,FINNUM)
  159.     FOR LAMBDA=INITLAMBDA TO FINLAMBDA STEP STEPLAMBDA
  160.         LET LYAP=0
  161.         LET X=XINT
  162.         FOR I = 1 TO FINNUM
  163.             LET Y=TENT(X,LAMBDA)
  164.             IF I>INITNUM THEN
  165.                LET LYAP=LYAP+LOG(ABS(LAMBDA*2))  !SUM LOG DERIVATIVES
  166.             END IF
  167.             LET X=Y
  168.         NEXT I
  169.         LET LYAP=LYAP/(FINNUM-INITNUM)
  170.         IF LYAP<-3 THEN LET LYAP=-3
  171.         PLOT LAMBDA,LYAP;
  172.     NEXT LAMBDA
  173. END SUB
  174.  
  175.  
  176.  
  177. DEF TENT(X,LAMBDA)
  178.     IF X<.5 THEN
  179.        LET TENT=2*LAMBDA*X
  180.     ELSE
  181.        LET TENT=2*LAMBDA*(1-X)
  182.     END IF
  183. END DEF
  184. CALL ADDLEGEND(TITLE2$,0,1,"WHITE")
  185. CALL DRAWLEGEND
  186. GET KEY VARIABLE
  187. CLEAR
  188. END
  189.