IT++ Logo
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 #include <itpp/base/converters.h>
36 #include <itpp/itexports.h>
37 
38 namespace itpp
39 {
40 
45 ITPP_EXPORT ivec find(const bvec &invector);
46 
51 
52 
53 
55 ITPP_EXPORT vec ones(int size);
57 ITPP_EXPORT bvec ones_b(int size);
59 ITPP_EXPORT ivec ones_i(int size);
61 ITPP_EXPORT cvec ones_c(int size);
62 
64 ITPP_EXPORT mat ones(int rows, int cols);
66 ITPP_EXPORT bmat ones_b(int rows, int cols);
68 ITPP_EXPORT imat ones_i(int rows, int cols);
70 ITPP_EXPORT cmat ones_c(int rows, int cols);
71 
73 ITPP_EXPORT vec zeros(int size);
75 ITPP_EXPORT bvec zeros_b(int size);
77 ITPP_EXPORT ivec zeros_i(int size);
79 ITPP_EXPORT cvec zeros_c(int size);
80 
82 ITPP_EXPORT mat zeros(int rows, int cols);
84 ITPP_EXPORT bmat zeros_b(int rows, int cols);
86 ITPP_EXPORT imat zeros_i(int rows, int cols);
88 ITPP_EXPORT cmat zeros_c(int rows, int cols);
89 
91 ITPP_EXPORT mat eye(int size);
93 ITPP_EXPORT bmat eye_b(int size);
95 ITPP_EXPORT imat eye_i(int size);
97 ITPP_EXPORT cmat eye_c(int size);
99 template <class T>
100 void eye(int size, Mat<T> &m)
101 {
102  m.set_size(size, size, false);
103  m = T(0);
104  for (int i = size - 1; i >= 0; i--)
105  m(i, i) = T(1);
106 }
107 
109 ITPP_EXPORT vec impulse(int size);
110 
112 ITPP_EXPORT vec linspace(double from, double to, int length = 100);
113 
115 template<class T>
116 Vec<T> linspace_fixed_step(T from, T to, T step = 1)
117 {
118  int points = 0;
119  if (0 != step) {
120  points = itpp::floor_i(double(to-from)/step)+1;
121  }
122  if (0 >= points) {
123  return Vec<T>(0);
124  }
125 
126  Vec<T> output(points);
127  output(0) = from;
128  for (int n = 1; n < points; ++n) {
129  output(n) = output(n-1)+step;
130  }
131  return output;
132 }
133 
162 ITPP_EXPORT vec zigzag_space(double t0, double t1, int K = 5);
163 
170 ITPP_EXPORT imat hadamard(int size);
171 
188 ITPP_EXPORT imat jacobsthal(int p);
189 
203 ITPP_EXPORT imat conference(int n);
204 
228 template <typename Num_T>
229 const Mat<Num_T> toeplitz(const Vec<Num_T> &c, const Vec<Num_T> &r)
230 {
231  int n_rows = c.size();
232  int n_cols = r.size();
233  Mat<Num_T> output(n_rows, n_cols);
234  for (int i = 0; i < n_rows; ++i) {
235  int j_limit = std::min(n_cols, n_rows - i);
236  for (int j = 0; j < j_limit; ++j) {
237  output(i + j, j) = c(i);
238  }
239  }
240  for (int j = 1; j < n_cols; ++j) {
241  int i_limit = std::min(n_rows, n_cols - j);
242  for (int i = 0; i < i_limit; ++i) {
243  output(i, i + j) = r(j);
244  }
245  }
246  return output;
247 }
248 
250 template <typename Num_T>
252 {
253  int s = c.size();
254  Mat<Num_T> output(s, s);
255  for (int i = 0; i < s; ++i) {
256  for (int j = 0; j < s - i; ++j) {
257  output(i + j, j) = c(i);
258  }
259  }
260  for (int j = 1; j < s; ++j) {
261  for (int i = 0; i < s - j; ++i) {
262  output(i, i + j) = c(j);
263  }
264  }
265  return output;
266 }
267 
269 ITPP_EXPORT const cmat toeplitz(const cvec &c);
270 
271 
273 
274 
279 ITPP_EXPORT mat rotation_matrix(int dim, int plane1, int plane2, double angle);
280 
285 ITPP_EXPORT void house(const vec &x, vec &v, double &beta);
286 
291 ITPP_EXPORT void givens(double a, double b, double &c, double &s);
292 
297 ITPP_EXPORT void givens(double a, double b, mat &m);
298 
303 ITPP_EXPORT mat givens(double a, double b);
304 
309 ITPP_EXPORT void givens_t(double a, double b, mat &m);
310 
315 ITPP_EXPORT mat givens_t(double a, double b);
316 
321 template <class T>
322 Vec<T> vec_1(T v0)
323 {
324  Vec<T> v(1);
325  v(0) = v0;
326  return v;
327 }
328 
333 template <class T>
334 Vec<T> vec_2(T v0, T v1)
335 {
336  Vec<T> v(2);
337  v(0) = v0;
338  v(1) = v1;
339  return v;
340 }
341 
346 template <class T>
347 Vec<T> vec_3(T v0, T v1, T v2)
348 {
349  Vec<T> v(3);
350  v(0) = v0;
351  v(1) = v1;
352  v(2) = v2;
353  return v;
354 }
355 
360 template <class T>
361 Mat<T> mat_1x1(T m00)
362 {
363  Mat<T> m(1, 1);
364  m(0, 0) = m00;
365  return m;
366 }
367 
372 template <class T>
373 Mat<T> mat_1x2(T m00, T m01)
374 {
375  Mat<T> m(1, 2);
376  m(0, 0) = m00;
377  m(0, 1) = m01;
378  return m;
379 }
380 
385 template <class T>
386 Mat<T> mat_2x1(T m00,
387  T m10)
388 {
389  Mat<T> m(2, 1);
390  m(0, 0) = m00;
391  m(1, 0) = m10;
392  return m;
393 }
394 
399 template <class T>
400 Mat<T> mat_2x2(T m00, T m01,
401  T m10, T m11)
402 {
403  Mat<T> m(2, 2);
404  m(0, 0) = m00;
405  m(0, 1) = m01;
406  m(1, 0) = m10;
407  m(1, 1) = m11;
408  return m;
409 }
410 
415 template <class T>
416 Mat<T> mat_1x3(T m00, T m01, T m02)
417 {
418  Mat<T> m(1, 3);
419  m(0, 0) = m00;
420  m(0, 1) = m01;
421  m(0, 2) = m02;
422  return m;
423 }
424 
429 template <class T>
430 Mat<T> mat_3x1(T m00,
431  T m10,
432  T m20)
433 {
434  Mat<T> m(3, 1);
435  m(0, 0) = m00;
436  m(1, 0) = m10;
437  m(2, 0) = m20;
438  return m;
439 }
440 
445 template <class T>
446 Mat<T> mat_2x3(T m00, T m01, T m02,
447  T m10, T m11, T m12)
448 {
449  Mat<T> m(2, 3);
450  m(0, 0) = m00;
451  m(0, 1) = m01;
452  m(0, 2) = m02;
453  m(1, 0) = m10;
454  m(1, 1) = m11;
455  m(1, 2) = m12;
456  return m;
457 }
458 
463 template <class T>
464 Mat<T> mat_3x2(T m00, T m01,
465  T m10, T m11,
466  T m20, T m21)
467 {
468  Mat<T> m(3, 2);
469  m(0, 0) = m00;
470  m(0, 1) = m01;
471  m(1, 0) = m10;
472  m(1, 1) = m11;
473  m(2, 0) = m20;
474  m(2, 1) = m21;
475  return m;
476 }
477 
482 template <class T>
483 Mat<T> mat_3x3(T m00, T m01, T m02,
484  T m10, T m11, T m12,
485  T m20, T m21, T m22)
486 {
487  Mat<T> m(3, 3);
488  m(0, 0) = m00;
489  m(0, 1) = m01;
490  m(0, 2) = m02;
491  m(1, 0) = m10;
492  m(1, 1) = m11;
493  m(1, 2) = m12;
494  m(2, 0) = m20;
495  m(2, 1) = m21;
496  m(2, 2) = m22;
497  return m;
498 }
499 
500 } //namespace itpp
501 
502 #endif // #ifndef SPECMAT_H
SourceForge Logo

Generated on Sat Jul 6 2013 10:54:21 for IT++ by Doxygen 1.8.2