Professional Documents
Culture Documents
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
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;
#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;
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
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.
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
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.