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=Generation of random numbers with Poisson law 
5
slib_parms=2\
6
  1,m\
7
  1,lambda
8
slib_author=S. Lemaire and Bernadette Perrin-Riou
9
slib_out=random  data of m numbers following the Poisson law \
10
of parameter lambda (positive number)
11
 
12
 
13
slib_comment= for any nonnegative integer,  P(X=i)=exp(-lambda)*(lambda^i)/i!
14
 
15
slib_example= 5,2.5
3265 bpr 16
slib_require=octave
20 reyssat 17
!exit
18
 
19
:proc
20
 
21
!distribute item $wims_read_parm into slib_data, slib_lambda
22
 
23
slib_out=$empty
24
!default slib_m=1
25
!default slib_lambda=1
26
 
27
!!slib_ex=$[exp(-$slib_lambda)]
28
!!slib_q=$slib_ex
29
!!
30
!!
31
!!slib_U=!random 0,1 repeat $slib_m
32
!!
33
!!!for slib_i=1 to $slib_m
34
!! slib_V=!item $slib_i of $slib_U
35
!! slib_q=$slib_ex
36
!! slib_p=$slib_ex
37
!! slib_j=0
38
!!
39
!!!while $slib_V >= $slib_q
40
!!  !advance slib_j
41
!!  slib_p=$[$slib_p*$slib_a/$slib_j]
42
!!  slib_q=$[$slib_q+$slib_p]
43
!!!endwhile
44
!!  
45
!!slib_out=!append item $slib_j to $slib_out
46
!!!next slib_i
47
 
48
 
49
slib_data=!declosing $slib_data
50
slib_cnt=!itemcnt slib_data
51
!if $slib_cnt=1
52
	slib_data=1,$slib_data
53
!endif	
54
slib_out=!exec octave poisson_rnd($slib_lambda,$slib_data)
55
 
56
slib_out=!words2items $slib_out
57
 
58
 
59
slib_out =!trim $slib_out
60