00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 #include <itpp/itbase.h>
00013 
00014 #ifndef ITEX_H
00015 #define ITEX_H
00016 
00017 using std::cout;
00018 using std::endl;
00019 
00020 namespace itpp {
00021         Array<int> to_Arr ( const ivec &indices );
00022         ivec linspace ( int from, int to );
00023 
00024         vec get_vec(const vec &v, const ivec &indexlist);
00025         
00026         bvec operator& ( const bvec &a, const bvec &b );
00027         bvec operator| ( const bvec &a, const bvec &b );
00028         
00029         bvec operator>(const vec &t1, const vec &t2); 
00030 
00031         bvec operator<(const vec &t1, const vec &t2); 
00032 
00033         
00034 
00035 
00036         void set_subvector ( vec &ov, const ivec &iv, const vec &v );
00037 
00038         template<class Num_T> inline
00039         void set_col_part(mat &M, int c, const Vec<Num_T> &v)
00040         {
00041                 copy_vector(v.size(), v._data(), M._data() + c*M.rows());
00042         }
00043 
00044         const double inf =std::numeric_limits<double>::infinity();
00045         
00046 
00051         class Gamma_RNG {
00052                 public:
00054                         Gamma_RNG ( double a=1.0, double b=1.0 );
00056                         void setup ( double a0, double b0 ) { alpha=a0; beta=b0;}
00058                         double get_setup() const;
00060                         double operator() () { return sample(); }
00062                         vec operator() ( int n );
00064                         mat operator() ( int h, int w );
00065                 protected:
00066                 private:
00068                         double sample();
00070                         double alpha;
00072                         double beta;
00074                         Random_Generator RNG;
00075                         Normal_RNG NRNG;
00077                         inline double exp_rand() {return -std::log ( RNG.random_01() );}
00078                         inline double unif_rand() {return RNG.random_01();}
00079                         inline double norm_rand() {return NRNG.sample();}
00080 
00081         };
00082         bool qr ( const mat &A, mat &R );
00083 
00085         std::string num2str(double d);
00086 
00088         std::string num2str(int i);
00089 
00091         double psi(double);
00092 }
00093 
00094 
00095 #endif //ITEX_H