2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -0,0 +1,35 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
)
|
||||
|
||||
var (
|
||||
pList = []float64{.1, .3, .5, .7, .9}
|
||||
nList = []int{1e2, 1e3, 1e4, 1e5}
|
||||
t = 100
|
||||
)
|
||||
|
||||
func main() {
|
||||
for _, p := range pList {
|
||||
theory := p * (1 - p)
|
||||
fmt.Printf("\np: %.4f theory: %.4f t: %d\n", p, theory, t)
|
||||
fmt.Println(" n sim sim-theory")
|
||||
for _, n := range nList {
|
||||
sum := 0
|
||||
for i := 0; i < t; i++ {
|
||||
run := false
|
||||
for j := 0; j < n; j++ {
|
||||
one := rand.Float64() < p
|
||||
if one && !run {
|
||||
sum++
|
||||
}
|
||||
run = one
|
||||
}
|
||||
}
|
||||
K := float64(sum) / float64(t) / float64(n)
|
||||
fmt.Printf("%9d %15.4f %9.6f\n", n, K, K-theory)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
NB. translation of python
|
||||
|
||||
NB. 'N P T' =: 100 0.5 500 NB. silliness
|
||||
NB. 'N P T' =: 100 0.5 500 NB. hypothetical example values, to aid comprehension...
|
||||
|
||||
newv =: (> ?@(#&0))~ NB. generate a random binary vector. Use: N newv P
|
||||
runs =: {: + [: +/ 1 0&E. NB. add the tail to the sum of 1 0 occurrences Use: runs V
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
meanRunDensity[p_, len_, trials_] :=
|
||||
Mean[Length[Cases[Split@#, {1, ___}]] & /@
|
||||
Unitize[Chop[RandomReal[1, {trials, len}], 1 - p]]]/len
|
||||
|
||||
Column@Table[
|
||||
Grid[Join[{{p, n, K, diff}},
|
||||
Table[{q, n, x = meanRunDensity[q, n, 100] // N,
|
||||
q (1 - q) - x}, {n, {100, 1000, 10000, 100000}}], {}],
|
||||
Alignment -> Left], {q, {.1, .3, .5, .7, .9}}]
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
{$MODE objFPC}//for using result,parameter runs becomes for variable..
|
||||
uses
|
||||
sysutils;//Format
|
||||
const
|
||||
MaxN = 100*1000;
|
||||
|
||||
function run_test(p:double;len,runs: NativeInt):double;
|
||||
var
|
||||
x, y, i,cnt : NativeInt;
|
||||
Begin
|
||||
result := 1/ (runs * len);
|
||||
cnt := 0;
|
||||
for runs := runs-1 downto 0 do
|
||||
Begin
|
||||
x := 0;
|
||||
y := 0;
|
||||
for i := len-1 downto 0 do
|
||||
begin
|
||||
x := y;
|
||||
y := Ord(Random() < p);
|
||||
cnt := cnt+ord(x < y);
|
||||
end;
|
||||
end;
|
||||
result := result *cnt;
|
||||
end;
|
||||
|
||||
//main
|
||||
var
|
||||
p, p1p, K : double;
|
||||
ip, n : nativeInt;
|
||||
Begin
|
||||
randomize;
|
||||
writeln( 'running 1000 tests each:'#13#10,
|
||||
' p n K p(1-p) diff'#13#10,
|
||||
'-----------------------------------------------');
|
||||
ip:= 1;
|
||||
while ip < 10 do
|
||||
Begin
|
||||
p := ip / 10;
|
||||
p1p := p * (1 - p);
|
||||
n := 100;
|
||||
While n <= MaxN do
|
||||
Begin
|
||||
K := run_test(p, n, 1000);
|
||||
writeln(Format('%4.1f %6d %6.4f %6.4f %7.4f (%5.2f %%)',
|
||||
[p, n, K, p1p, K - p1p, (K - p1p) / p1p * 100]));
|
||||
n := n*10;
|
||||
end;
|
||||
writeln;
|
||||
ip := ip+2;
|
||||
end;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue