' ' ***************************************************************** ' ' 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 10: HEAT.BAS ' ' REM ****** Setting up graphics ****** CLS : SCREEN 9: PAINT (1, 1), 1 xm = 1: ym = .5: tm = .2 VIEW (20, 30)-(575, 240), 0, 11 WINDOW (0, 0)-(xm, ym) LOCATE 18, 74: PRINT xm LOCATE 2, 2: PRINT ym LOCATE 23, 1: PRINT "y(middle)=" LOCATE 23, 30: PRINT "t=" REM ****** Finite-difference grid parameters ****** LOCATE 19, 1: INPUT "m"; m DIM y(m), ynew(m) h = xm / m LOCATE 19, 10: PRINT "h"; h LOCATE 20, 1: PRINT "kcrit="; .5 * h ^ 2 LOCATE 21, 1: INPUT "k < kcrit"; k REM ****** Initial conditions ****** DEF fnf (x) = .5 * EXP(-100 * (x - .5) ^ 2) FOR i = 1 TO m - 1 y(i) = fnf(i * h) NEXT y(0) = 0: y(m) = 0 REM ****** Step-by-step method ****** t = 0 DO CLS LINE (0, 0)-(h, y(1)), 9 FOR i = 1 TO m - 1 LINE (i * h, y(i))-((i + 1) * h, y(i + 1)), 9 diff2 = y(i + 1) - 2 * y(i) + y(i - 1) ynew(i) = y(i) + k * (diff2 / h ^ 2) NEXT ynew(0) = 0: ynew(m) = 0 FOR i = 0 TO m y(i) = ynew(i) NEXT t = t + k LOCATE 23, 11: PRINT INT(y(m / 2) * 1000) / 1000 LOCATE 23, 32: PRINT INT(t * 1000) / 1000 LOOP UNTIL ABS(t - tm) < k / 2 OR INKEY$ = "q"