Subversion Repositories wimsdev

Rev

Rev 20 | Rev 4161 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
2
!goto proc
3
!endif
4
slib_title=cumulative distribution function of hypergeometric law  
5
slib_parms=4\
6
,[data]\
7
,N\
8
,K\
9
,n
10
 
11
slib_author=Bernadette PERRIN-RIOU
12
slib_out=Values on data
13
slib_comment=data can be a list of reals
14
P(X=i)=binomial(K,i)*binomial(N-K,n-i)/binomial(N,n)
15
slib_example=[2,4,7],10,5,7
3265 bpr 16
slib_require=pari
20 reyssat 17
!exit
18
 
19
:proc
20
 
21
slib_out=$empty
22
!distribute  item $wims_read_parm into slib_data,slib_N,slib_K,slib_n
23
 
24
slib_b= $[binomial($slib_N,$slib_n)^(-1)]
25
slib_min= $[max(0,$slib_n+$slib_K-$slib_N)]
26
slib_max= $[min($slib_n,$slib_N)]
27
!if $slib_max<$slib_min
28
	slib_out=0
29
	!exit
30
!endif
31
 
32
slib_data=!declosing $slib_data
33
 
34
slib_cnt=!itemcnt $slib_data
35
slib_minmax=!sort numeric item $slib_data
36
slib_mind=!item 1 of $slib_minmax
37
slib_maxd= !item -1 of $slib_minmax
38
 
39
!if $slib_maxd <$slib_min
40
	slib_out=!values 0 for x=1 to $slib_cnt
41
	!exit
42
!endif
43
!if $slib_mind >=$slib_max
44
	slib_out=!values 1 for x=1 to $slib_cnt
45
	!exit
46
!endif
47
 
48
slib_valeur=!exec pari vector(ceil($slib_maxd)-$slib_min+1,x,1.*binomial($slib_K,x+$slib_min-1)*binomial($slib_N-$slib_K,$slib_n-x-$slib_min+1)*$slib_b) 
49
 
50
 
51
!for slib_x in $slib_data
52
	!if $slib_x<$slib_min
53
		slib_out=!append item 0 to $slib_out
54
	!endif
55
 
56
	!if $slib_x>$slib_max
57
		slib_out=!append item 1 to $slib_out
58
	!endif
59
	!if $slib_x<=$slib_max and $slib_x>=$slib_min
60
		slib_outx=!item 1 to $[$slib_x-$slib_min+1] of $slib_valeur
61
		slib_outx=!replace internal , by + in $slib_outx
62
		slib_out=!append item $[$slib_outx] to $slib_out
63
	!endif
64
!next slib_x
65
 
66
 
67
slib_out=!trim $slib_out