IT++ Logo

specmat.h

Go to the documentation of this file.
00001 
00031 #ifndef SPECMAT_H
00032 #define SPECMAT_H
00033 
00034 #include <itpp/base/vec.h>
00035 #include <itpp/base/mat.h>
00036 
00037 
00038 namespace itpp
00039 {
00040 
00045 ivec find(const bvec &invector);
00046 
00051 
00052 
00053 
00055 vec ones(int size);
00057 bvec ones_b(int size);
00059 ivec ones_i(int size);
00061 cvec ones_c(int size);
00062 
00064 mat ones(int rows, int cols);
00066 bmat ones_b(int rows, int cols);
00068 imat ones_i(int rows, int cols);
00070 cmat ones_c(int rows, int cols);
00071 
00073 vec zeros(int size);
00075 bvec zeros_b(int size);
00077 ivec zeros_i(int size);
00079 cvec zeros_c(int size);
00080 
00082 mat zeros(int rows, int cols);
00084 bmat zeros_b(int rows, int cols);
00086 imat zeros_i(int rows, int cols);
00088 cmat zeros_c(int rows, int cols);
00089 
00091 mat eye(int size);
00093 bmat eye_b(int size);
00095 imat eye_i(int size);
00097 cmat eye_c(int size);
00099 template <class T>
00100 void eye(int size, Mat<T> &m);
00101 
00103 vec impulse(int size);
00105 vec linspace(double from, double to, int length = 100);
00134 vec zigzag_space(double t0, double t1, int K = 5);
00135 
00142 imat hadamard(int size);
00143 
00160 imat jacobsthal(int p);
00161 
00175 imat conference(int n);
00176 
00200 template <typename Num_T>
00201 const Mat<Num_T> toeplitz(const Vec<Num_T> &c, const Vec<Num_T> &r)
00202 {
00203   int n_rows = c.size();
00204   int n_cols = r.size();
00205   Mat<Num_T> output(n_rows, n_cols);
00206   for (int i = 0; i < n_rows; ++i) {
00207     int j_limit = std::min(n_cols, n_rows - i);
00208     for (int j = 0; j < j_limit; ++j) {
00209       output(i + j, j) = c(i);
00210     }
00211   }
00212   for (int j = 1; j < n_cols; ++j) {
00213     int i_limit = std::min(n_rows, n_cols - j);
00214     for (int i = 0; i < i_limit; ++i) {
00215       output(i, i + j) = r(j);
00216     }
00217   }
00218   return output;
00219 }
00220 
00222 template <typename Num_T>
00223 const Mat<Num_T> toeplitz(const Vec<Num_T> &c)
00224 {
00225   int s = c.size();
00226   Mat<Num_T> output(s, s);
00227   for (int i = 0; i < s; ++i) {
00228     for (int j = 0; j < s - i; ++j) {
00229       output(i + j, j) = c(i);
00230     }
00231   }
00232   for (int j = 1; j < s; ++j) {
00233     for (int i = 0; i < s - j; ++i) {
00234       output(i, i + j) = c(j);
00235     }
00236   }
00237   return output;
00238 }
00239 
00241 template <>
00242 const cmat toeplitz(const cvec &c);
00243 
00245 
00246 
00251 mat rotation_matrix(int dim, int plane1, int plane2, double angle);
00252 
00257 void house(const vec &x, vec &v, double &beta);
00258 
00263 void givens(double a, double b, double &c, double &s);
00264 
00269 void givens(double a, double b, mat &m);
00270 
00275 mat givens(double a, double b);
00276 
00281 void givens_t(double a, double b, mat &m);
00282 
00287 mat givens_t(double a, double b);
00288 
00293 template <class T>
00294 Vec<T> vec_1(T v0)
00295 {
00296   Vec<T> v(1);
00297   v(0) = v0;
00298   return v;
00299 }
00300 
00305 template <class T>
00306 Vec<T> vec_2(T v0, T v1)
00307 {
00308   Vec<T> v(2);
00309   v(0) = v0;
00310   v(1) = v1;
00311   return v;
00312 }
00313 
00318 template <class T>
00319 Vec<T> vec_3(T v0, T v1, T v2)
00320 {
00321   Vec<T> v(3);
00322   v(0) = v0;
00323   v(1) = v1;
00324   v(2) = v2;
00325   return v;
00326 }
00327 
00332 template <class T>
00333 Mat<T> mat_1x1(T m00)
00334 {
00335   Mat<T> m(1, 1);
00336   m(0, 0) = m00;
00337   return m;
00338 }
00339 
00344 template <class T>
00345 Mat<T> mat_1x2(T m00, T m01)
00346 {
00347   Mat<T> m(1, 2);
00348   m(0, 0) = m00;
00349   m(0, 1) = m01;
00350   return m;
00351 }
00352 
00357 template <class T>
00358 Mat<T> mat_2x1(T m00,
00359                T m10)
00360 {
00361   Mat<T> m(2, 1);
00362   m(0, 0) = m00;
00363   m(1, 0) = m10;
00364   return m;
00365 }
00366 
00371 template <class T>
00372 Mat<T> mat_2x2(T m00, T m01,
00373                T m10, T m11)
00374 {
00375   Mat<T> m(2, 2);
00376   m(0, 0) = m00;
00377   m(0, 1) = m01;
00378   m(1, 0) = m10;
00379   m(1, 1) = m11;
00380   return m;
00381 }
00382 
00387 template <class T>
00388 Mat<T> mat_1x3(T m00, T m01, T m02)
00389 {
00390   Mat<T> m(1, 3);
00391   m(0, 0) = m00;
00392   m(0, 1) = m01;
00393   m(0, 2) = m02;
00394   return m;
00395 }
00396 
00401 template <class T>
00402 Mat<T> mat_3x1(T m00,
00403                T m10,
00404                T m20)
00405 {
00406   Mat<T> m(3, 1);
00407   m(0, 0) = m00;
00408   m(1, 0) = m10;
00409   m(2, 0) = m20;
00410   return m;
00411 }
00412 
00417 template <class T>
00418 Mat<T> mat_2x3(T m00, T m01, T m02,
00419                T m10, T m11, T m12)
00420 {
00421   Mat<T> m(2, 3);
00422   m(0, 0) = m00;
00423   m(0, 1) = m01;
00424   m(0, 2) = m02;
00425   m(1, 0) = m10;
00426   m(1, 1) = m11;
00427   m(1, 2) = m12;
00428   return m;
00429 }
00430 
00435 template <class T>
00436 Mat<T> mat_3x2(T m00, T m01,
00437                T m10, T m11,
00438                T m20, T m21)
00439 {
00440   Mat<T> m(3, 2);
00441   m(0, 0) = m00;
00442   m(0, 1) = m01;
00443   m(1, 0) = m10;
00444   m(1, 1) = m11;
00445   m(2, 0) = m20;
00446   m(2, 1) = m21;
00447   return m;
00448 }
00449 
00454 template <class T>
00455 Mat<T> mat_3x3(T m00, T m01, T m02,
00456                T m10, T m11, T m12,
00457                T m20, T m21, T m22)
00458 {
00459   Mat<T> m(3, 3);
00460   m(0, 0) = m00;
00461   m(0, 1) = m01;
00462   m(0, 2) = m02;
00463   m(1, 0) = m10;
00464   m(1, 1) = m11;
00465   m(1, 2) = m12;
00466   m(2, 0) = m20;
00467   m(2, 1) = m21;
00468   m(2, 2) = m22;
00469   return m;
00470 }
00471 
00472 } //namespace itpp
00473 
00474 #endif // #ifndef SPECMAT_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Tue Feb 2 09:33:29 2010 for IT++ by Doxygen 1.6.2