Initial release of Maemo 5 port of gnuplot
[gnuplot] / demo / random.dem
diff --git a/demo/random.dem b/demo/random.dem
new file mode 100644 (file)
index 0000000..379ffa5
--- /dev/null
@@ -0,0 +1,209 @@
+#
+# $Id: random.dem,v 1.12.2.2 2008/09/23 23:11:31 sfeam Exp $
+#
+# random.dem
+#
+# Lattice test for random numbers;
+# If you can see any patterns in this plot, the random number generator
+# is not very good.
+#
+# Copyright (c) 1991, Jos van der Woude, jvdwoude@hut.nl
+
+# History:
+#      -  6. 6. 2006 ds: added univariate and multivariate normal example
+#      - 10. 5. 2006 ds: added univariate and multivariate normal example
+#      -  ?. ?  1991 jvdw: 1st version
+
+unset key
+set xrange [0: 1]
+set yrange [0: 1]
+set zrange [0: 1]
+set title "Lattice test for random numbers"
+set xlabel "rand(n) ->"
+set ylabel "rand(n + 1) ->"
+set zlabel "rand(n + 2) ->"
+set format x "%3.2f"
+set format y "%3.2f"
+set format z "%3.2f"
+set tics
+set sample 1000
+set style function dots
+set parametric
+plot rand(0), rand(0)
+pause -1 "Hit return to continue"
+print "3D plot ahead, one moment please ..."
+set sample 50
+splot rand(0), rand(0), rand(0)
+pause -1 "Hit return to continue"
+
+print ""
+print "Multivariate normal distribution"
+print ""
+print "The surface plot shows a two variable multivariate probability"
+print "density function.  On the x-y plane are some samples of the random"
+print "vector and a contour plot illustrating the correlation, which in"
+print "this case is zero, i.e. a circle.  (Easier to view in map mode.)"
+print ""
+nsamp = 50
+unset xlabel
+unset ylabel
+unset zlabel
+set parametric
+# A somewhat inelegant way of generating N random data points.  A future
+# non-pressing plot-command feature addition may address this issue.
+set samples nsamp
+set format "%8.5g"
+set table "random.tmp"
+plot invnorm(rand(0)),invnorm(rand(0))
+unset table
+unset format
+#
+tstring(n) = sprintf("%d random samples from a 2D Gaussian PDF with\nunit variance, zero mean and no dependence", n)
+set title tstring(nsamp)
+unset key
+set hidden3d
+set contour
+set view 68, 28, 1, 1
+set cntrparam levels discrete 0.1
+unset clabel
+set xrange [-3:3]
+set yrange [-3:3]
+set zrange [-0.2:0.2]
+set ztics 0,0.05
+set urange [-3:3]
+set vrange [-3:3]
+set ticslevel 0
+set isosamples 30
+splot u,v,( 1/(2*pi) * exp(-0.5 * (u**2 + v**2)) ) with line lc rgb "black", \
+   "random.tmp" using 1:2:(-0.2) with points pointtype 7 lc rgb "black"
+pause -1 "Hit return to continue"
+unset contour
+
+load "stat.inc"
+
+print ""
+print "Simple Monte Carlo simulation"
+print ""
+print "The first curve is a histogram where the binned frequency of occurence"
+print "of a pseudo random variable distributed according to the normal"
+print "(Gaussian) law is scaled such that the histogram converges to the"
+print "normal probability density function with increasing number of samples"
+print "used in the Monte Carlo simulation.  The second curve is the normal"
+print "probability density function with unit variance and zero mean."
+print ""
+nsamp = 5000
+binwidth = 20
+xlow = -3.0
+xhigh = 3.0
+scale = (binwidth/(xhigh-xlow))
+# A somewhat inelegant way of generating N random data points.  A future
+# non-pressing plot-command feature addition may address this issue.
+set parametric
+set samples nsamp
+set format "%8.5g"
+set table "random.tmp"
+plot invnorm(rand(0)),(1.0*scale/nsamp)
+unset table
+unset format
+#
+unset parametric
+set samples 200
+tstring(n) = sprintf("Histogram of %d random samples from a univariate\nGaussian PDF with unit variance and zero mean", n)
+set title tstring(nsamp)
+set key
+set grid
+set xrange [-3:3]
+set yrange [0:0.45]
+bin(x) = (1.0/scale)*floor(x*scale)
+plot "random.tmp" using (bin($1)):2 smooth frequency with steps \
+                title "scaled bin frequency", \
+                normal(x,0,1) with lines title "Gaussian p.d.f."
+pause -1 "Hit return to continue"
+
+print ""
+print "Another Monte Carlo simulation"
+print ""
+print "This is similar to the previous simulation but uses multivariate"
+print "zero mean, unit variance normal data by computing the distance "
+print "each point is from the origin.  That distribution is known to fit"
+print "the Maxwell probability law, as shown."
+print ""
+reset
+# A somewhat inelegant way of generating N random data points.  A future
+# non-pressing plot-command feature addition may address this issue.
+nsamp = 3000
+set parametric
+set samples nsamp
+set isosamples 2,2 # Smallest possible
+set format "%8.5g"
+set table "random.tmp"
+splot invnorm(rand(0)),invnorm(rand(0)),invnorm(rand(0))
+unset table
+unset format
+#
+oneplot = 1
+#
+if (oneplot) set multiplot layout 1,2
+#
+unset key
+rlow = -4.0
+rhigh = 4.0
+set xrange [rlow:rhigh]; set yrange [rlow:rhigh]; set zrange [rlow:rhigh]
+set xtics axis nomirror; set ytics axis nomirror; set ztics axis nomirror;
+set border 0
+set xyplane at 0
+set xzeroaxis lt -1
+set yzeroaxis lt -1
+set zzeroaxis lt -1
+set view 68, 28, 1.4, 0.9
+tstring(n) = sprintf("Gaussian 3D cloud of %d random samples\n", n)
+set title tstring(nsamp) offset graph 0.15, graph -0.33
+splot "random.tmp" every :::::0 with dots
+if (!oneplot) pause -1 "Hit return to continue"
+
+unset parametric
+unset xzeroaxis; unset yzeroaxis;
+set border
+set grid
+set samples 200
+set size 0.47,0.72
+set origin 0.44,0.18
+tstring(n) = sprintf("Histogram of distance from origin of\n%d multivariate unit variance samples", n)
+set title tstring(nsamp) offset graph 0, graph 0.15
+set key bmargin right vertical
+xlow = 0.0
+xhigh = 4.5
+binwidth = 20
+scale = (binwidth/(xhigh-xlow))
+set xrange [0:xhigh]
+set yrange [0:0.65]
+bin(x) = (1.0/scale)*floor(x*scale)
+plot "random.tmp" using (bin(sqrt($1**2+$2**2+$3**2))):(1.0*scale/nsamp) every :::::0 smooth frequency with steps \
+                title "scaled bin frequency", \
+                maxwell(x, 1/sqrt(2)) with lines title "Maxwell p.d.f."
+#
+if (oneplot) unset multiplot
+#
+pause -1 "Hit return to continue"
+
+unset key
+unset grid
+set xrange [-8:8]
+set yrange [-8:8]
+set size ratio 1.0
+set zeroaxis
+set border 3
+set tics out scale 0.5
+set xtics 1.0 border rangelimited nomirror
+set ytics 1.0 border rangelimited nomirror
+set tics scale 0.5
+set format xy "%.0f"
+
+set title 'Example of range-limited axes and tics'
+
+A = pi/9.
+plot 'random.tmp' using (1.5 + $1*cos(A)-2.*$2*sin(A)):(1.0 + $1*sin(A)+2.*$2*cos(A)) with dots
+
+pause -1 "Hit return to continue"
+
+