PROGRAM random_walk ! simulation of a random walk in one dimension DIM xcum(64),x2cum(64) CALL initial(p,N,xcum(),x2cum(),ntrial) FOR itrial = 1 to ntrial CALL walk(p,N,xcum(),x2cum()) NEXT itrial CALL output(N,xcum(),x2cum(),ntrial) END SUB initial(p,N,xcum(),x2cum(),ntrial) RANDOMIZE INPUT prompt "maximum number of steps N = ": N LET p = 0.5 LET ntrial = 1000 ! number of trials FOR istep = 1 to N LET xcum(istep) = 0 ! not necessary in True BASIC LET x2cum(istep) = 0 NEXT istep END SUB SUB walk(p,N,xcum(),x2cum()) LET x = 0 ! initial position of walker for each trial FOR istep = 1 to N IF rnd <= p then LET x = x + 1 ELSE LET x = x - 1 END IF ! collect data after every step CALL data(x,xcum(),x2cum(),istep) NEXT istep END SUB SUB data(x,xcum(),x2cum(),istep) LET xcum(istep) = xcum(istep) + x LET x2cum(istep) = x2cum(istep) + x*x END SUB SUB output(N,xcum(),x2cum(),ntrial) PRINT "# steps","",""," - ^2" PRINT FOR istep = 1 to N LET xbar = xcum(istep)/ntrial LET x2bar = x2cum(istep)/ntrial LET variance = x2bar - xbar*xbar PRINT istep,xbar,x2bar,variance NEXT istep END SUB