IT++ Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
specmat.h
Go to the documentation of this file.
1 
30 #ifndef SPECMAT_H
31 #define SPECMAT_H
32 
33 #include <itpp/base/vec.h>
34 #include <itpp/base/mat.h>
35 
36 
37 namespace itpp
38 {
39 
44 ivec find(const bvec &invector);
45 
50 
51 
52 
54 vec ones(int size);
56 bvec ones_b(int size);
58 ivec ones_i(int size);
60 cvec ones_c(int size);
61 
63 mat ones(int rows, int cols);
65 bmat ones_b(int rows, int cols);
67 imat ones_i(int rows, int cols);
69 cmat ones_c(int rows, int cols);
70 
72 vec zeros(int size);
74 bvec zeros_b(int size);
76 ivec zeros_i(int size);
78 cvec zeros_c(int size);
79 
81 mat zeros(int rows, int cols);
83 bmat zeros_b(int rows, int cols);
85 imat zeros_i(int rows, int cols);
87 cmat zeros_c(int rows, int cols);
88 
90 mat eye(int size);
92 bmat eye_b(int size);
94 imat eye_i(int size);
96 cmat eye_c(int size);
98 template <class T>
99 void eye(int size, Mat<T> &m);
100 
102 vec impulse(int size);
104 vec linspace(double from, double to, int length = 100);
133 vec zigzag_space(double t0, double t1, int K = 5);
134 
141 imat hadamard(int size);
142 
159 imat jacobsthal(int p);
160 
174 imat conference(int n);
175 
199 template <typename Num_T>
200 const Mat<Num_T> toeplitz(const Vec<Num_T> &c, const Vec<Num_T> &r)
201 {
202  int n_rows = c.size();
203  int n_cols = r.size();
204  Mat<Num_T> output(n_rows, n_cols);
205  for (int i = 0; i < n_rows; ++i) {
206  int j_limit = std::min(n_cols, n_rows - i);
207  for (int j = 0; j < j_limit; ++j) {
208  output(i + j, j) = c(i);
209  }
210  }
211  for (int j = 1; j < n_cols; ++j) {
212  int i_limit = std::min(n_rows, n_cols - j);
213  for (int i = 0; i < i_limit; ++i) {
214  output(i, i + j) = r(j);
215  }
216  }
217  return output;
218 }
219 
221 template <typename Num_T>
223 {
224  int s = c.size();
225  Mat<Num_T> output(s, s);
226  for (int i = 0; i < s; ++i) {
227  for (int j = 0; j < s - i; ++j) {
228  output(i + j, j) = c(i);
229  }
230  }
231  for (int j = 1; j < s; ++j) {
232  for (int i = 0; i < s - j; ++i) {
233  output(i, i + j) = c(j);
234  }
235  }
236  return output;
237 }
238 
240 template <>
241 const cmat toeplitz(const cvec &c);
242 
244 
245 
250 mat rotation_matrix(int dim, int plane1, int plane2, double angle);
251 
256 void house(const vec &x, vec &v, double &beta);
257 
262 void givens(double a, double b, double &c, double &s);
263 
268 void givens(double a, double b, mat &m);
269 
274 mat givens(double a, double b);
275 
280 void givens_t(double a, double b, mat &m);
281 
286 mat givens_t(double a, double b);
287 
292 template <class T>
293 Vec<T> vec_1(T v0)
294 {
295  Vec<T> v(1);
296  v(0) = v0;
297  return v;
298 }
299 
304 template <class T>
305 Vec<T> vec_2(T v0, T v1)
306 {
307  Vec<T> v(2);
308  v(0) = v0;
309  v(1) = v1;
310  return v;
311 }
312 
317 template <class T>
318 Vec<T> vec_3(T v0, T v1, T v2)
319 {
320  Vec<T> v(3);
321  v(0) = v0;
322  v(1) = v1;
323  v(2) = v2;
324  return v;
325 }
326 
331 template <class T>
332 Mat<T> mat_1x1(T m00)
333 {
334  Mat<T> m(1, 1);
335  m(0, 0) = m00;
336  return m;
337 }
338 
343 template <class T>
344 Mat<T> mat_1x2(T m00, T m01)
345 {
346  Mat<T> m(1, 2);
347  m(0, 0) = m00;
348  m(0, 1) = m01;
349  return m;
350 }
351 
356 template <class T>
357 Mat<T> mat_2x1(T m00,
358  T m10)
359 {
360  Mat<T> m(2, 1);
361  m(0, 0) = m00;
362  m(1, 0) = m10;
363  return m;
364 }
365 
370 template <class T>
371 Mat<T> mat_2x2(T m00, T m01,
372  T m10, T m11)
373 {
374  Mat<T> m(2, 2);
375  m(0, 0) = m00;
376  m(0, 1) = m01;
377  m(1, 0) = m10;
378  m(1, 1) = m11;
379  return m;
380 }
381 
386 template <class T>
387 Mat<T> mat_1x3(T m00, T m01, T m02)
388 {
389  Mat<T> m(1, 3);
390  m(0, 0) = m00;
391  m(0, 1) = m01;
392  m(0, 2) = m02;
393  return m;
394 }
395 
400 template <class T>
401 Mat<T> mat_3x1(T m00,
402  T m10,
403  T m20)
404 {
405  Mat<T> m(3, 1);
406  m(0, 0) = m00;
407  m(1, 0) = m10;
408  m(2, 0) = m20;
409  return m;
410 }
411 
416 template <class T>
417 Mat<T> mat_2x3(T m00, T m01, T m02,
418  T m10, T m11, T m12)
419 {
420  Mat<T> m(2, 3);
421  m(0, 0) = m00;
422  m(0, 1) = m01;
423  m(0, 2) = m02;
424  m(1, 0) = m10;
425  m(1, 1) = m11;
426  m(1, 2) = m12;
427  return m;
428 }
429 
434 template <class T>
435 Mat<T> mat_3x2(T m00, T m01,
436  T m10, T m11,
437  T m20, T m21)
438 {
439  Mat<T> m(3, 2);
440  m(0, 0) = m00;
441  m(0, 1) = m01;
442  m(1, 0) = m10;
443  m(1, 1) = m11;
444  m(2, 0) = m20;
445  m(2, 1) = m21;
446  return m;
447 }
448 
453 template <class T>
454 Mat<T> mat_3x3(T m00, T m01, T m02,
455  T m10, T m11, T m12,
456  T m20, T m21, T m22)
457 {
458  Mat<T> m(3, 3);
459  m(0, 0) = m00;
460  m(0, 1) = m01;
461  m(0, 2) = m02;
462  m(1, 0) = m10;
463  m(1, 1) = m11;
464  m(1, 2) = m12;
465  m(2, 0) = m20;
466  m(2, 1) = m21;
467  m(2, 2) = m22;
468  return m;
469 }
470 
471 } //namespace itpp
472 
473 #endif // #ifndef SPECMAT_H
SourceForge Logo

Generated on Fri Mar 21 2014 17:14:13 for IT++ by Doxygen 1.8.1.2