Statistics/Normal distribution: Difference between revisions
Content added Content deleted
(GP) |
No edit summary |
||
Line 8: | Line 8: | ||
;Reference: |
;Reference: |
||
* You may refer to code in [[Statistics/Basic]] if available. |
* You may refer to code in [[Statistics/Basic]] if available. |
||
=={{header|Liberty BASIC}}== |
|||
Uses LB Statistics/Basic |
|||
<lang lb> |
|||
call sample 100000 |
|||
end |
|||
sub sample n |
|||
dim dat( n) |
|||
for i =1 to n |
|||
dat( i) =normalDist( 1, 0.2) |
|||
next i |
|||
'// show mean, standard deviation. Find max, min. |
|||
mx =-1000 |
|||
mn = 1000 |
|||
sum =0 |
|||
sSq =0 |
|||
for i =1 to n |
|||
d =dat( i) |
|||
mx =max( mx, d) |
|||
mn =min( mn, d) |
|||
sum =sum +d |
|||
sSq =sSq +d^2 |
|||
next i |
|||
print n; " data terms used." |
|||
mean =sum / n |
|||
print "Largest term was "; mx; " & smallest was "; mn |
|||
range =mx -mn |
|||
print "Mean ="; mean |
|||
print "Stddev ="; ( sSq /n -mean^2)^0.5 |
|||
'// show histogram |
|||
nBins =50 |
|||
dim bins( nBins) |
|||
for i =1 to n |
|||
z =int( ( dat( i) -mn) /range *nBins) |
|||
bins( z) =bins( z) +1 |
|||
next i |
|||
for b =0 to nBins -1 |
|||
for j =1 to int( nBins *bins( b)) /n *30) |
|||
print "#"; |
|||
next j |
|||
print |
|||
next b |
|||
print |
|||
end sub |
|||
function normalDist( m, s) ' Box Muller method |
|||
u =rnd( 1) |
|||
v =rnd( 1) |
|||
normalDist =( -2 *log( u))^0.5 *cos( 2 *3.14159265 *v) |
|||
end function |
|||
</lang> |
|||
100000 data terms used. |
|||
Largest term was 4.12950792 & smallest was -4.37934139 |
|||
Mean =-0.26785425e-2 |
|||
Stddev =1.00097669 |
|||
# |
|||
## |
|||
### |
|||
##### |
|||
######## |
|||
############ |
|||
################ |
|||
######################## |
|||
############################## |
|||
###################################### |
|||
############################################## |
|||
######################################################## |
|||
################################################################### |
|||
############################################################################## |
|||
####################################################################################### |
|||
################################################################################################ |
|||
#################################################################################################### |
|||
######################################################################################################## |
|||
##################################################################################################### |
|||
############################################################################################## |
|||
######################################################################################### |
|||
################################################################################## |
|||
######################################################################### |
|||
############################################################## |
|||
#################################################### |
|||
########################################## |
|||
################################# |
|||
########################## |
|||
################## |
|||
############# |
|||
######### |
|||
###### |
|||
#### |
|||
## |
|||
# |
|||
# |
|||
=={{header|PARI/GP}}== |
=={{header|PARI/GP}}== |
Revision as of 17:23, 7 October 2011
Statistics/Normal distribution is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Normal (or Gaussian) distribution is a freqently used distribution in statistics. While most programming languages provide a uniformly distributed random number generator, one can derive normally distributed random numbers from a uniform generator.
- The task
- Take a uniform random number generator and create a large (you decide how large) set of numbers that follow a normal (Gaussian) distribution. Calculate the dataset's mean and stddev, and show the histogram here.
- Mention any native language support for the generation of normally distributed random numbers.
- Reference
- You may refer to code in Statistics/Basic if available.
Liberty BASIC
Uses LB Statistics/Basic <lang lb> call sample 100000
end
sub sample n
dim dat( n) for i =1 to n dat( i) =normalDist( 1, 0.2) next i
'// show mean, standard deviation. Find max, min. mx =-1000 mn = 1000 sum =0 sSq =0 for i =1 to n d =dat( i) mx =max( mx, d) mn =min( mn, d) sum =sum +d sSq =sSq +d^2 next i print n; " data terms used."
mean =sum / n print "Largest term was "; mx; " & smallest was "; mn range =mx -mn print "Mean ="; mean
print "Stddev ="; ( sSq /n -mean^2)^0.5
'// show histogram nBins =50 dim bins( nBins) for i =1 to n z =int( ( dat( i) -mn) /range *nBins) bins( z) =bins( z) +1 next i for b =0 to nBins -1 for j =1 to int( nBins *bins( b)) /n *30) print "#"; next j print next b print
end sub
function normalDist( m, s) ' Box Muller method
u =rnd( 1) v =rnd( 1) normalDist =( -2 *log( u))^0.5 *cos( 2 *3.14159265 *v)
end function </lang>
100000 data terms used. Largest term was 4.12950792 & smallest was -4.37934139 Mean =-0.26785425e-2 Stddev =1.00097669
# ## ### ##### ######## ############ ################ ######################## ############################## ###################################### ############################################## ######################################################## ################################################################### ############################################################################## ####################################################################################### ################################################################################################ #################################################################################################### ######################################################################################################## ##################################################################################################### ############################################################################################## ######################################################################################### ################################################################################## ######################################################################### ############################################################## #################################################### ########################################## ################################# ########################## ################## ############# ######### ###### #### ## # #
PARI/GP
<lang parigp>rnormal()={ my(pr=32*ceil(default(realprecision)*log(10)/log(4294967296)),u1=random(2^pr)*1.>>pr,u2=random(2^pr)*1.>>pr); sqrt(-2*log(u1))*cos(2*Pi*u1) \\ Could easily be extended with a second normal at very little cost. }; mean(v)={
sum(i=1,#v,v[i])/#v
}; stdev(v,mu="")={
if(mu=="",mu=mean(v)); sqrt(sum(i=1,#v,(v[i]-mu)^2))/#v
}; histogram(v,bins=16,low=0,high=1)={
my(u=vector(bins),width=(high-low)/bins); for(i=1,#v,u[(v[i]-low)\width+1]++); u
}; show(n)={
my(v=vector(n,i,rnormal()),m=mean(v),s=stdev(v,m),h,sz=ceil(n/300)); h=histogram(v,,vecmin(v)-.1,vecmax(v)+.1); for(i=1,#h,for(j=1,h[i]\sz,print1("#"));print());
}; show(10^4)</lang>