#!/bin/sh /usr/local/bin/XGraph
*ARGUMENTS* -bb -tk -stats -progress -noerr -detach -T distr

*EXTRATEXT*
  Shows the difference between a abnormal and a uniform distribution,
  both with average MEM/2 and standard deviation floor[MEM/7]
  (with MEM=256)

*PARAM_NOW* SETMXY[1,8]
# MXY[0,4] points per set, ranging over the length of the MEM array
*PARAM_RANGE* 1,sub[MEM,1],MXY[0,4,10000]
*PARAM_NOW* randomise

*PARAM_NOW* comment[MXY[0,0,div[MEM,2]], MXY[0,1,floor[div[MEM,8]]], MXY[0,2,div[MEM,4]]]
*PARAM_NOW* verbose[MXY[0,0,div[MEM,2]], MXY[0,1,floor[div[MEM,8]]], MXY[0,2,div[MEM,4]],SS_Add[-1]]

# # show a normal set, and the histogram of this set
# # the set is translated upwards for clarity (64)
*LEGEND* normal[av,stdv]:#x0a   distribution
*PARAM_NOW* MEM[-1,0]
*PARAM_BEFORE* MXY[0,3,clip[normal[MXY[0,0],MXY[0,1]],1,sub[MEM,1]]],MEM[MXY[0,3],add[MEM[MXY[0,3]],1]]
# *PARAM_BEFORE* MEM[0,clip[div[normal[mul[self,MXY[0,0]],mul[self,MXY[0,1]]],self],1,sub[MEM,1]]],MEM[MXY[0,3],add[MEM[MXY[0,3]],1]]
*PARAM_AFTER* SS_Add[0,self,MXY[0,3]],SS_Add[1,MXY[0,3]],MXY[0,3,0]
*PARAM_FUNCTIONS* self,add[MXY[0,3],MXY[0,2]],elapsed[1]

*PARAM_NOW* comment[verbose[MXY[0,5,div[MXY[0,4],mul[pow[pi[2],0.5],SS_Stdev[1]]]],\n
	MXY[0,7,mul[2,pow[SS_Stdev[1],2]]],\n
	MXY[0,6,SS_Mean[1]]\n
]]

*LEGEND* normal[av,stdv]:\n
      the histogram
*PARAM_BEFORE*
*PARAM_FUNCTIONS* self,MEM[self],elapsed[1]

*LEGEND* normal[av,stdv]:#x0a   found
*PARAM_BEFORE*
*PARAM_AFTER*
*PARAM_FUNCTIONS*self,mul[MXY[0,5],exp[div[mul[-1,pow[sub[self,MXY[0,6]],2]],MXY[0,7]]]],elapsed[0]

*LEGEND* normal[av,stdv]:#x0a   predicted
*PARAM_NOW* comment[MEM[-1,0],\n
	MEM[0,div[MXY[0,4],mul[pow[pi[2],0.5],MXY[0,1]]]],\n
	MEM[1,mul[2,pow[MXY[0,1],2]]]]
*PARAM_BEFORE*
*PARAM_AFTER*MEM[3,add[MEM[3],MEM[2]]]
*PARAM_FUNCTIONS* self,mul[MEM[0],exp[div[mul[-1,pow[sub[self,MXY[0,0]],2]],MEM[1]]]],elapsed[0]
# *PARAM_FUNCTIONS* self,MEM[2,add[\n
#     mul[MEM[0],exp[div[mul[-1,pow[sub[self,mul[1.5,MXY[0,0]]],2]],MEM[1]]]],\n
#     mul[MEM[0],exp[div[mul[-1,pow[sub[self,mul[0.50,MXY[0,0]]],2]],MEM[1]]]]\n
#   ]],elapsed[0]

*PARAM_NOW*comment[div[MEM[3],add[MXY[0,4],1]]]

# *PARAM_AFTER* MEM[0,0]
# # show a uniform set, and the histogram of this set
# # the set is translated downwards (64)
# *LEGEND* uniform[av,stdv]:#x0a   distribution
# *PARAM_NOW* MEM[-1,0]
# *PARAM_BEFORE* MEM[0,uniform[MXY[0,0],MXY[0,1]]],MEM[MEM[0],add[MEM[MEM[0]],1]]
# *PARAM_FUNCTIONS* self,sub[MEM[0],MXY[0,2]],elapsed[1]
# 
# *LEGEND* uniform[av,stdv]:#x0a   the histogram
# *PARAM_BEFORE*
# *PARAM_FUNCTIONS* self,MEM[self],elapsed[1]

# # show an abnormal set, and the histogram of this set
# # the set is translated upwards for clarity (64)
# *LEGEND* abnormal[av,stdv]:#x0a   distribution
# *PARAM_NOW* MEM[-1,0]
# *PARAM_BEFORE* MEM[0,abnormal[MXY[0,0],MXY[0,1]]],MEM[MEM[0],add[MEM[MEM[0]],1]]
# *PARAM_FUNCTIONS* self,sub[MEM[0],MXY[0,2]],elapsed[1]
# 
# *LEGEND* abnormal[av,stdv]:#x0a   the histogram
# *PARAM_BEFORE*
# *PARAM_FUNCTIONS* self,MEM[self],elapsed[1]

# *LEGEND* Some other transform
# *PARAM_BEFORE* MEM[0,ran[-0.5,0.5]], MEM[1,\n
#   add[mul[#x0a  MXY[0,1], mul[ifelse[>=[MEM[0],0],8.569665,-8.569665],erf[mul[1,MEM[0],MEM[0]]]]\n
#  ], MXY[0,0]]]
# *PARAM_FUNCTIONS* mul[add[0.5,MEM[0]],MEM],MEM[1],elapsed[1]
# 
# *LEGEND* software abnormal[av,stdv] using erf[]
# *PARAM_NOW* MEM[-1,0]
# *PARAM_AFTER* MEM[MEM[1],add[MEM[MEM[1]],1]]
# *PARAM_FUNCTIONS* self,MEM[1],elapsed[1]
# 
# *LEGEND* its histogram
# *PARAM_AFTER*
# *PARAM_FUNCTIONS* self,MEM[self],elapsed[1]
# 
# *LEGEND* The abnormal transform
# *PARAM_BEFORE* MEM[0,ran[-0.5,0.5]], MEM[1,\n
#   add[mul[#x0a  ifelse[>=[MEM[0],0],17.87,-17.87], MXY[0,1], sub[ exp[mul[0.5,pow[MEM[0],2]]],1]\n
#  ], MXY[0,0]]]
# *PARAM_FUNCTIONS* mul[add[0.5,MEM[0]],MEM],MEM[1],elapsed[1]
# 
# *LEGEND* software abnormal[av,stdv] using exp[]
# *PARAM_NOW* MEM[-1,0]
# *PARAM_AFTER* MEM[MEM[1],add[MEM[MEM[1]],1]]
# *PARAM_FUNCTIONS* self,MEM[1],elapsed[1]
# 
# *LEGEND* its histogram
# *PARAM_AFTER*
# *PARAM_FUNCTIONS* self,MEM[self],elapsed[1]

# # The algorithm used by normal_rand
# *LEGEND* software normal distribution
# *PARAM_AFTER*
# *PARAM_BEFORE* dowhile[\n
#       MEM[0,ran[-1.0,1.0]],MEM[1,ran[-1.0,1.0]],return[MEM[2,pow[add[pow[MEM[0],2],pow[MEM[1],2]],0.5]]],\n
#       >=[MEM[2],1]\n
#  ],\n
#       MEM[3,pow[mul[-2.0,log[MEM[2]],div[1,MEM[2]]],0.5]]
# *PARAM_FUNCTIONS* self,mul[MEM[0],MEM[3]],elapsed[1]

