49 lines
1.3 KiB
Plaintext
49 lines
1.3 KiB
Plaintext
* agauss test in ngspice
|
|
* generate a sequence of gaussian distributed random numbers.
|
|
* test the distribution by sorting the numbers into
|
|
* a histogram (buckets)
|
|
* chapt. 17.8.6
|
|
.control
|
|
define agauss(nom, avar, sig) (nom + avar/sig * sgauss(0))
|
|
let mc_runs = 200
|
|
let run = 0
|
|
let no_buck = 8 $ number of buckets
|
|
let bucket = unitvec(no_buck) $ each element contains 1
|
|
let delta = 3e-11 $ width of each bucket, depends
|
|
$ on avar and sig
|
|
let lolimit = 1e-09 - 3*delta
|
|
let hilimit = 1e-09 + 3*delta
|
|
|
|
dowhile run < mc_runs
|
|
let val = agauss(1e-09, 1e-10, 3) $ get the random number
|
|
if (val < lolimit)
|
|
let bucket[0] = bucket[0] + 1 $ 'lowest' bucket
|
|
end
|
|
let part = 1
|
|
dowhile part < (no_buck - 1)
|
|
if ((val < (lolimit + part*delta)) &
|
|
+ (val > (lolimit + (part-1)*delta)))
|
|
let bucket[part] = bucket[part] + 1
|
|
break
|
|
end
|
|
let part = part + 1
|
|
end
|
|
if (val > hilimit)
|
|
* 'highest' bucket
|
|
let bucket[no_buck - 1] = bucket[no_buck - 1] + 1
|
|
end
|
|
let run = run + 1
|
|
end
|
|
|
|
let part = 0
|
|
dowhile part < no_buck
|
|
let value = bucket[part] - 1
|
|
set value = "$&value"
|
|
* print the buckets' contents
|
|
echo $value
|
|
let part = part + 1
|
|
end
|
|
|
|
.endc
|
|
.end
|