' ' ***************************************************************** ' ' FROM CALCULUS TO CHAOS ' ' An Introduction to Dynamics ' ' ' by ' ' David Acheson ' ' ****************************************************************** ' ' The program which follows is part of the above book, ' published in 1997 by Oxford University Press. ' ISBN 0-19-850077-7 (paperback) ' ' ' Copyright ¸ David Acheson 1997 ' ' ' ' ' Program 8: PENDOUBL.BAS ' ' DEFDBL A-H, K-M, O-Z: DEFINT I-J, N n = 5: OPTION BASE 1 DIM x(n), xc(n), f(n), c1(n), c2(n), c3(n), c4(n) REM ****** Setting up graphics ****** CLS : SCREEN 9 PAINT (1, 1), 9 VIEW (180, 17)-(595, 330), 0, 14 WINDOW (-2.4, -2.4)-(2.4, 2.4) LOCATE 21, 2: PRINT "Time" REM ****** Step-by-step method ****** DO k = .1#: m = .1# LOCATE 12, 2: INPUT "a,w"; a, w t = 0#: xc(2) = 0#: xc(4) = 0#: xc(5) = 0# LOCATE 14, 2: INPUT "ang1,ang2"; xc(1), xc(3) h = .05# DO CLS LINE (0, -a)-(0, a), 8 ph = -a * COS(w * x(5)) CIRCLE (0, ph), .025, 12: PAINT (0, ph), 12 X1 = SIN(xc(1)): X2 = -COS(xc(1)) + ph X3 = SIN(xc(1)) + SIN(xc(3)) X4 = -COS(xc(1)) - COS(xc(3)) + ph LINE (0, ph)-(X1, X2), 12 CIRCLE (X1, X2), .05, 9: PAINT (X1, X2), 9 LINE (X1, X2)-(X3, X4), 12 CIRCLE (X3, X4), .05, 9: PAINT (X3, X4), 9 GOSUB Runge t = t + h LOCATE 21, 6: PRINT CSNG(t) LOOP UNTIL INKEY$ = "q" LOOP REM ****** Subroutines ****** Equations: Q = x(3) - x(1): c = COS(Q): s = SIN(Q): P = c * s D = 1# - m * c ^ 2# g = (1# + a * w ^ 2# * COS(w * x(5))) g1 = g * SIN(x(1)) g3 = g * SIN(x(3)) x22 = x(2) ^ 2#: x42 = x(4) ^ 2# f(1) = x(2) f(2) = -k * x(2) + (m * (x42 * s + x22 * P + g3 * c) - g1) / D f(3) = x(4) f(4) = -k * x(4) + (-x22 * s - m * x42 * P - g3 + g1 * c) / D f(5) = 1# RETURN Runge: FOR i = 1 TO n: x(i) = xc(i): NEXT GOSUB Equations FOR i = 1 TO n: c1(i) = h * f(i): NEXT FOR i = 1 TO n: x(i) = xc(i) + c1(i) / 2#: NEXT GOSUB Equations FOR i = 1 TO n: c2(i) = h * f(i): NEXT FOR i = 1 TO n: x(i) = xc(i) + c2(i) / 2#: NEXT GOSUB Equations FOR i = 1 TO n: c3(i) = h * f(i): NEXT FOR i = 1 TO n: x(i) = xc(i) + c3(i): NEXT GOSUB Equations FOR i = 1 TO n: c4(i) = h * f(i): NEXT FOR i = 1 TO n xc(i) = xc(i) + (c1(i) + 2# * c2(i) + 2# * c3(i) + c4(i)) / 6# NEXT RETURN