Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
|
|
@ -0,0 +1,82 @@
|
|||
Rebol [
|
||||
title: "Rosetta code: Statistics/Normal_distribution"
|
||||
file: %Statistics-Normal_distribution.r3
|
||||
url: https://rosettacode.org/wiki/Statistics/Normal_distribution
|
||||
author: @ldci
|
||||
needs: 3.19.0
|
||||
]
|
||||
|
||||
random/seed 1
|
||||
randMax: 2147483647 ;; max integer value
|
||||
nMax: 500000 ;; number of random values, can be modified
|
||||
|
||||
;; Normal random numbers generator using Marsaglia algorithm.
|
||||
;; Generates 2 independent series of random values in the range [-1.0, 1.0].
|
||||
generate: function [
|
||||
n [integer!] ;; number of pairs to generate
|
||||
][
|
||||
m: n * 2
|
||||
values: make vector! [f64! :m] ;; vector to hold generated values
|
||||
for i 1 m 2 [
|
||||
rsq: 0.0
|
||||
;; Repeat while radius squared is outside the unit circle or zero
|
||||
while [any [(rsq >= 1.0) (rsq == 0.0)]] [
|
||||
x: (2.0 * random randMax) / randMax - 1.0
|
||||
y: (2.0 * random randMax) / randMax - 1.0
|
||||
rsq: (x * x) + (y * y)
|
||||
]
|
||||
f: sqrt ((-2.0 * log-e rsq) / rsq)
|
||||
values/(i): x * f
|
||||
values/(i + 1): y * f
|
||||
]
|
||||
values
|
||||
]
|
||||
|
||||
;; Show histogram of the values vector
|
||||
printHistogram: function [
|
||||
values [vector!]
|
||||
][
|
||||
width: 50.0 ;; width of histogram bars
|
||||
low: -3.0 ;; lower bound of histogram
|
||||
high: 3.0 ;; upper bound of histogram
|
||||
delta: 0.1 ;; bin width
|
||||
n: values/length ;; length of data
|
||||
nbins: to integer! ((high - low) / delta) ;; number of bins (60)
|
||||
bins: make vector! [i32! :nbins] ;; initialize bins vector
|
||||
repeat i n [
|
||||
j: to integer! ((values/:i - low) / delta)
|
||||
if all [(j >= 1) (j <= nbins)] [
|
||||
bins/:j: bins/:j + 1 ;; increment bin counter
|
||||
]
|
||||
]
|
||||
maxi: bins/maximum ;; max count in any bin
|
||||
repeat j nbins [
|
||||
lbin: round/to (low + j * delta - high + 0.25) 0.01 ;; low limit for bin
|
||||
hbin: round/to (low + j + 1 * delta - high + 0.25) 0.01 ;; high limit for bin
|
||||
s: ajoin ["[" lbin " " hbin "] "] ;; bin label string
|
||||
pad s -15 ;; pad string left for alignment
|
||||
k: width * bins/:j / maxi ;; number of block characters to print
|
||||
while [k > 0] [
|
||||
append s to-char 9609 ;; append block character (unicode 9609)
|
||||
k: k - 1
|
||||
]
|
||||
append s ajoin [" " round/to (bins/:j * 100 / n) 0.01 "%"] ;; append percentage
|
||||
print s
|
||||
]
|
||||
]
|
||||
|
||||
;;********************** Main ***********************
|
||||
|
||||
print "Be patient! Generating Data and Gaussian Histogram..."
|
||||
print-horizontal-line
|
||||
|
||||
time: dt [
|
||||
values: generate nMax ;; generate nMax pairs of random values
|
||||
printHistogram values ;; print histogram of generated values
|
||||
]
|
||||
|
||||
print-horizontal-line
|
||||
print [nMax * 2 "Values processed in:" round/to third time 0.01 "sec"]
|
||||
print ["Mean: " values/mean]
|
||||
print ["STD : " values/sample-deviation]
|
||||
print-horizontal-line
|
||||
Loading…
Add table
Add a link
Reference in a new issue