.PS # random.m4 gen_init NeedDpicTools sinclude(tst.dim) s_init(random) ################################################################ # hscale(right length,nlabels, # minlabel,maxlabel,[T][N]) # arg5=T: top axis, N: nolabels define(`hscale',`[ define(`hs_nl',`ifelse(`$2',,5,`$2')') A: line `$1' ; Start: A.start; End: A.end td = 1/(hs_nl-1)*A.len/5 define(`hs_ud',`ifinstr(`$5',T,down,up)') # Major tics for i=1 to hs_nl-2 do { line hs_ud graphsize/20 thick 0.4 \ from i/(hs_nl-1) between A.start and A.end } # Minor tics for i=0 to hs_nl-2 do { Ts: i/(hs_nl-1) between A.start and A.end for j=1 to 4 do { line thick 0.4 hs_ud graphsize/20/2 from Ts+(j*td,0) } } # Labels ifinstr(`$5',N,,`for_(0,eval(hs_nl-1),1, `Ts: m4x/(hs_nl-1) between A.start and A.end s_box("\small %g",`$3'+m4x/(hs_nl-1)*(`$4'-(`$3'))) \ at Ts ifelse(`$5',T,above,below)') ') ]') # vscale(up length,nlabels, # minlabel,maxlabel,[R][N] ) # arg5=R: right axis, N: nolabels define(`vscale',`[ define(`vs_nl',`ifelse(`$2',,5,`$2')') A: line `$1' ; Start: A.start; End: A.end td = 1/(vs_nl-1)*A.len/5 define(`vs_lr',`ifinstr(`$5',R,left,right)') # Major tics for i=1 to vs_nl-2 do { line vs_lr graphsize/20 thick 0.4 \ from i/(vs_nl-1) between A.start and A.end } # Minor tics for i=0 to vs_nl-2 do { Ts: i/(vs_nl-1) between A.start and A.end for j=1 to 4 do { line thick 0.4 vs_lr graphsize/20/2 from Ts+(0,j*td) } } # Labels ifinstr(`$5',N,,`for_(0,eval(vs_nl-1),1, `Ts: m4x/(vs_nl-1) between A.start and A.end s_box("\small %g",`$3'+m4x/(vs_nl-1)*(`$4'-(`$3'))) \ at Ts ifelse(`$5',R,ljust,rjust)')') ]') # f_gauss(x,mean,stddev) define f_gauss`{ std_gauss(($1-($2))/($3))/($3) }' define std_gauss`{ expe(-($1)^2/2)/sqrt(twopi_) }' ################################################################ [ n = 2000 # number of samples stddev = 0.25 graphsize = 2 B: box wid graphsize ht graphsize # Gemerate n Gaussian random numbers randn(z,n,0,stddev) m = 0 for i=1 to n-1 by 2 do { m +=1; x[m] = z[i]; y[m] = z[i+1] dot(at B+(x[m],y[m])) } hscale(right B.wid,5,-1,1) with .Start at B.sw hscale(right B.wid,5,-1,1,TN) with .Start at B.nw vscale(up B.ht,5,-1,1) with .Start at B.sw vscale(up B.ht,5,-1,1,RN) with .Start at B.se N: box invis wid B.wid ht B.ht with .sw at B.nw+(0,graphsize/10) nb = 20 binmax = n/5*0.5 dx = N.wid/nb histbins(x,m,-1,1,nb,hbin) for i=0 to nb-1 do { line up hbin[i]/binmax * N.ht \ from N.sw+((0.5+i)*dx,0) thick dx/(1bp__) outlined "gray" } box wid N.wid ht N.ht at N # vscale(up N.ht,5,0,1) with .Start at N.sw E: box invis wid B.wid ht B.ht with .sw at B.se+(graphsize/10,0) nb = 20 binmax = n/5*0.5 dy = E.ht/nb histbins(y,m,-1,1,nb,vbin) for i=0 to nb-1 do { line right vbin[i]/binmax * E.wid \ from E.sw+(0,(0.5+i)*dy) thick dy/(1bp__) outlined "gray" } box wid E.wid ht E.ht at E # hscale(right E.wid,5,0,1) with .Start at E.sw ng = 16 for i=0 to ng do { x = i/ng*N.wid U: x,(f_gauss(x,N.wid/2,stddev)*m*dx)/binmax*N.ht X[i]: N.sw+U Y[i]: E.nw+(U.y,-U.x) } fitcurve(X,ng) fitcurve(Y,ng) ] #showbox_ .PE