You are on page 1of 4

Boost Random Number Examples

Mauricio Bedoya javierma36@gmail.com February 2014


Examples avoid any warning message, but does not assert any incorrect distribution parametrization. Enjoy and welcome to boost.

1.
1 #i n c l u d e #i n c l u d e 3 #i n c l u d e #i n c l u d e 5 #i n c l u d e

Normal Distribution Random Numbers


<i o s t r e a m > < b o o s t / random / m e r s e n n e t w i s t e r . hpp> < b o o s t / random . hpp> < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> < b o o s t / l e x i c a l c a s t . hpp>

7 t y p e d e f double Real ; u s i n g namespace s t d ; 9 i n t main ( ) 11 { t y p e d e f b o o s t : : mt19937 ENGINE ; 13 t y p e d e f b o o s t : : n o r m a l d i s t r i b u t i o n <d o u b l e > DISTRIBUTION ; t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 15 ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( t i m e ( 0 ) ) ) ; 17 c o n s t R e a l mean = 0 ; c o n s t R e a l s i gm a = 1 ; 19 DISTRIBUTION p d f ( mean , s ig m a ) ; GENERATOR g e n e r a t o r ( eng , p d f ) ; 21 f o r ( i n t i = 0 ; i < 1 0 ; i ++) 23 s t d : : c o u t << g e n e r a t o r ( ) << s t d : : e n d l ; 25 } return 0;

Alternative (only change line 17);

#i n c l u d e < i o s t r e a m > 2 #i n c l u d e < b o o s t / random / m e r s e n n e t w i s t e r . hpp> #i n c l u d e < b o o s t / random . hpp> 4 #i n c l u d e < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> #i n c l u d e < b o o s t / l e x i c a l c a s t . hpp> 6 t y p e d e f double Real ; 8 u s i n g namespace s t d ; 10 12 i n t main ( ) { typedef typedef 14 typedef 16 18 20 22 24 return 26 } 0;

b o o s t : : mt19937 ENGINE ; b o o s t : : n o r m a l d i s t r i b u t i o n <d o u b l e > DISTRIBUTION ; b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR;

ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; c o n s t R e a l mean = 0 ; c o n s t R e a l s ig m a = 1 ; DISTRIBUTION p d f ( mean , s i gm a ) ; GENERATOR g e n e r a t o r ( eng , p d f ) ; for ( i n t i = 0 ; i < 1 0 ; i ++) s t d : : c o u t << g e n e r a t o r ( ) << s t d : : e n d l ;

2.
#i n c l u d e 2 #i n c l u d e #i n c l u d e 4 #i n c l u d e #i n c l u d e 6 #i n c l u d e

Template Function Normal Random Numbers


<i o s t r e a m > < b o o s t / random / m e r s e n n e t w i s t e r . hpp> < b o o s t / random . hpp> < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> < b o o s t / l e x i c a l c a s t . hpp> < b o o s t / f o r e a c h . hpp>

Similar to Matlab function (only returns a vector).

8 t y p e d e f double Real ; u s i n g namespace s t d ; 10 t e m p l a t e <typename Real > 12 v e c t o r <Real > randn ( c o n s t i n t& n , c o n s t R e a l& mean , c o n s t R e a l& v a r i a n c e ) { 14 t y p e d e f b o o s t : : mt19937 ENGINE ; typedef boost : : normal distribution < > DISTRIBUTION ; 16 t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 18 20 22 24 26 } 28 30 32 i n t main ( ) { R e a l mean = 0 ; R e a l si g m a = 1 ; 34 v e c t o r <Real > v a l u e s = randn <Real > (100 , mean , s i gm a ) ; BOOST FOREACH( R e a l x , v a l u e s ) 36 { c o u t << x << e n d l ; } } ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; DISTRIBUTION p d f ( mean , v a r i a n c e ) ; GENERATOR g e n e r a t e ( e n g i n e , p d f ) ; v e c t o r <Real > random numbers ; f o r ( i n t i =0; i !=n ; ++i ) { random numbers . p u s h b a c k ( g e n e r a t e ( ) ) ; } r e t u r n random numbers ;

Now I will expose the template function for other 3 distributions. Only change the distributions with the corresponding parameters. For more information visit: Boost Distributions

3.

Template Function Uniform Random Numbers

Similar to Matlab function (only returns a vector). Assume that a<b. You have other uniform distributions constructor in boost.
1 #i n c l u d e #i n c l u d e 3 #i n c l u d e #i n c l u d e 5 #i n c l u d e <i o s t r e a m > < b o o s t / random / m e r s e n n e t w i s t e r . hpp> < b o o s t / random . hpp> < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> < b o o s t / l e x i c a l c a s t . hpp>

7 t y p e d e f double Real ; u s i n g namespace s t d ; 9 t e m p l a t e <typename Real > 11 v e c t o r <Real > rand ( c o n s t i n t& n , c o n s t R e a l& a , c o n s t R e a l& b ) { 13 t y p e d e f b o o s t : : mt19937 ENGINE ; typedef boost : : uniform int < > DISTRIBUTION ; 15 t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 17 19 21 23 25 } 27 t e m p l a t e <typename Real > 29 v e c t o r <Real > r a n d 1 ( c o n s t i n t& n ) { 31 t y p e d e f b o o s t : : mt19937 ENGINE ; typedef boost : : uniform 01< > DISTRIBUTION ; 33 t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 35 37 39 41 43 } 45 47 49 i n t main ( ) { Real a = 1 ; Real b = 6 ; 51 v e c t o r <Real > v a l u e s f r o m 1 t o 6 = rand <Real > (100 , a , b ) ; v e c t o r <Real > U n i f o r m 0 1 = rand1 <Real > (100) ; 53 } ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; DISTRIBUTION p d f ; GENERATOR g e n e r a t e ( e n g i n e , p d f ) ; v e c t o r <Real > random numbers ; f o r ( i n t i =0; i !=n ; ++i ) { random numbers . p u s h b a c k ( g e n e r a t e ( ) ) ; } r e t u r n random numbers ; ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; DISTRIBUTION p d f ( a , b ) ; GENERATOR g e n e r a t e ( e n g i n e , p d f ) ; v e c t o r <Real > random numbers ; f o r ( i n t i =0; i !=n ; ++i ) { random numbers . p u s h b a c k ( g e n e r a t e ( ) ) ; } r e t u r n random numbers ;

4.
1 #i n c l u d e #i n c l u d e 3 #i n c l u d e #i n c l u d e 5 #i n c l u d e

Template Function Poisson Random Numbers


<i o s t r e a m > < b o o s t / random / m e r s e n n e t w i s t e r . hpp> < b o o s t / random . hpp> < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> < b o o s t / l e x i c a l c a s t . hpp>

Similar to Matlab function (only returns a vector).

7 t y p e d e f double Real ; u s i n g namespace s t d ; 9 t e m p l a t e <typename Real > 11 v e c t o r <Real > p o i s s r n d ( c o n s t i n t& n , c o n s t R e a l& lambda ) { 13 t y p e d e f b o o s t : : mt19937 ENGINE ; typedef boost : : p o i s s o n d i s t r i b u t i o n < > DISTRIBUTION ; 15 t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 17 19 21 23 25 } 27 i n t main ( ) 29 { R e a l lambda = 1 ; 31 v e c t o r <Real > v a l u e s = p o i s s r n d <Real > (100 , lambda ) ; } ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; DISTRIBUTION p d f ( lambda ) ; GENERATOR g e n e r a t e ( e n g i n e , p d f ) ; v e c t o r <Real > random numbers ; f o r ( i n t i =0; i !=n ; ++i ) { random numbers . p u s h b a c k ( g e n e r a t e ( ) ) ; } r e t u r n random numbers ;

5.

Template Function Chi2 Random Numbers

Similar to Matlab function (only returns a vector).


#i n c l u d e < i o s t r e a m > 2 #i n c l u d e < b o o s t / random / m e r s e n n e t w i s t e r . hpp> #i n c l u d e < b o o s t / random . hpp> 4 #i n c l u d e < b o o s t / random / v a r i a t e g e n e r a t o r . hpp> #i n c l u d e < b o o s t / l e x i c a l c a s t . hpp> 6 t y p e d e f double Real ; 8 u s i n g namespace s t d ; 10 t e m p l a t e <typename Real > v e c t o r <Real > c h i 2 r n d ( c o n s t i n t& n , c o n s t R e a l& V) 12 { t y p e d e f b o o s t : : mt19937 ENGINE ; 14 t y p e d e f b o o s t : : random : : c h i s q u a r e d d i s t r i b u t i o n < > DISTRIBUTION ; t y p e d e f b o o s t : : v a r i a t e g e n e r a t o r <ENGINE, DISTRIBUTION> GENERATOR; 16 ENGINE e n g i n e ( b o o s t : : n u m e r i c c a s t <i n t >( c l o c k ( ) ) ) ; 18 DISTRIBUTION p d f (V) ; GENERATOR g e n e r a t e ( e n g i n e , p d f ) ; 20 v e c t o r <Real > random numbers ; 22 f o r ( i n t i =0; i !=n ; ++i ) { random numbers . p u s h b a c k ( g e n e r a t e ( ) ) ; } 24 r e t u r n random numbers ; 26 } 28 30 i n t main ( ) { Real V = 6 ; v e c t o r <Real > v a l u e s = c h i 2 r n d <Real > (100 ,V) ; 32 }

You might also like