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
Generated on Thu Apr 23 20:06:46 2009 for IT++ by Doxygen 1.5.8