'Program FIG14.BAS shows an example of intermittency
'by J. C. Sprott
'Compile with the PowerBASIC Console Compiler
DEFEXT a-z 'do all calculations in extended (80-bit) precision
FUNCTION PBMAIN()
n&=3 'number of nonlinear odes
h=0.02 'stepsize of integration
tmax=4e3 'time to spend at each initial condition
s=100## 'scale factor on graph
pi=4#*ATN(1##)
CONSOLE NAME "Fig 14"
CONSOLE SET LOC 648,0
GRAPHIC WINDOW "Fig 14", 0, 0, 640, 480 TO hWin1&
GRAPHIC ATTACH hWin1&, 0
GRAPHIC WIDTH 1
GRAPHIC COLOR RGB(0,0,0), RGB(255,255,255)
GRAPHIC CLEAR
GRAPHIC ATTACH hWin1&, 0, REDRAW
GRAPHIC BOX(0,0)-(640,480)
GRAPHIC LINE(0,240)-(639,240)
DIM x(n&), dxdt(n&)
RANDOMIZE 13
x(1)=0.1*RND: x(2)=0.1*RND: x(3)=0.1*RND
PRINT x(1),x(2),x(3): WAITKEY$
FOR t=0 TO tmax
FOR i&=1 TO 1/h
CALL rk4(x(),dxdt(),n&,h,x())
xp&=640*t/tmax
yp&=240-240*x(1)/s
GRAPHIC SET PIXEL(xp&,yp&)
NEXT i&
GRAPHIC REDRAW
NEXT t
GRAPHIC SAVE"fig14.bmp"
BEEP
WAITKEY$
END FUNCTION
SUB DERIVS (x(), dxdt(), n&)
'Returns the time derivatives dxdt(i&) of x(i&)
FOR i&=1 TO n&
i1&=1+i& MOD n&
dxdt(i&)=SIN(x(i1&))
NEXT i&
END SUB
SUB RK4 (X(), DXDT(), N&, H, XNEW())
'Fourth-order Runge-Kutta integrator
DIM XT(N&), DXT(N&), DXM(N&)
HH = H * .5##
H6 = H / 6##
CALL DERIVS(X(), DXDT(), N&)
FOR I& = 1 TO N&
XT(I&) = X(I&) + HH * DXDT(I&)
NEXT I&
CALL DERIVS(XT(), DXT(), N&)
FOR I& = 1 TO N&
XT(I&) = X(I&) + HH * DXT(I&)
NEXT I&
CALL DERIVS(XT(), DXM(), N&)
FOR I& = 1 TO N&
XT(I&) = X(I&) + H * DXM(I&)
DXM(I&) = DXT(I&) + DXM(I&)
NEXT I&
CALL DERIVS(XT(), DXT(), N&)
FOR I& = 1 TO N&
XNEW(I&) = X(I&) + H6 * (DXDT(I&) + DXT(I&) + 2## * DXM(I&))
NEXT I&
ERASE DXM, DXT, XT
END SUB