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