gslpp_matrix_complex.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #ifndef GSLPP_MATRIX_COMPLEX_H
9 #define GSLPP_MATRIX_COMPLEX_H
10 #include <iostream>
11 #ifndef __GSL_MATRIX_COMPLEX_DOUBLE_H__
12 #include <gsl/gsl_matrix_complex_double.h>
13 #endif
14 #ifndef GSLPP_COMPLEX_H
15 #include "gslpp_complex.h"
16 #endif
17 #ifndef GSLPP_VECTOR_BASE_H
18 #include "gslpp_vector_base.h"
19 #endif
20 #ifndef GSLPP_VECTOR_DOUBLE_H
21 #include "gslpp_vector_double.h"
22 #endif
23 #ifndef GSLPP_VECTOR_COMPLEX_H
24 #include "gslpp_vector_complex.h"
25 #endif
26 #ifndef GSLPP_MATRIX_BASE_H
27 #include "gslpp_matrix_base.h"
28 #endif
29 #ifndef GSLPP_MATRIX_DOUBLE_H
30 #include "gslpp_matrix_double.h"
31 #endif
32 
33 namespace gslpp
34 {
44  template <>
45  class matrix<complex>
46  {
47  gsl_matrix_complex *_matrix;
48 
49  public:
56  matrix(const size_t& size_i, const size_t& size_j, const complex& z);
57  matrix(const size_t& size_i, const complex& z);
64  matrix(const size_t& size_i, const size_t& size_j, const double& a);
65  matrix(const size_t& size_i, const double& a);
67  matrix(const matrix<complex>& m);
68  matrix(const matrix<double>& m);
69  matrix(const vector<complex>& v);
70  matrix(const vector<double>& v);
71  matrix(const gsl_matrix_complex& m);
72  matrix(const gsl_matrix_complex* m);
74  ~matrix();
76  const complex operator()(const size_t& i, const size_t& j) const;
78 // complex& operator()(const size_t& i, const size_t& j);
80  matrix<complex>& operator=(const matrix<complex>& m);
82  void assign(const size_t& i, const size_t& j, const complex& z);
83  void assign(const size_t& i, const size_t& j, const double& a);
84  void assign(const size_t& i, const size_t& j, const matrix<complex>& z);
85  void assign(const size_t& i, const size_t& j, const matrix<double>& a);
86  void assignre(const size_t& i, const size_t& j,const double& a);
87  void assignim(const size_t& i, const size_t& j,const double& a);
89  size_t size_i() const;
90  size_t size_j() const;
92  static matrix<complex> Id(size_t size);
94  matrix<complex> transpose() const;
96  matrix<complex> hconjugate() const;
97  matrix<complex> inverse() const;
99  matrix<double> real() const;
101  matrix<double> imag() const;
107  void eigensystem(matrix<complex> &U, vector<double> &S) const;
114  void singularvalue(matrix<complex> &U, matrix<complex> &V, vector<double> &S) const;
116  gsl_matrix_complex* as_gsl_type_ptr() const;
117  gsl_matrix_complex& as_gsl_type();
118  const gsl_matrix_complex& as_gsl_type() const;
120  //bool is_equal(const matrix<complex>& m1, const matrix<complex>& m2);
122  matrix<complex> operator-() const;
124  matrix<complex> operator+(const matrix<complex>& m) const;
126  matrix<complex> operator-(const matrix<complex>& m) const;
128  matrix<complex> operator*(const matrix<complex>& m) const;
130  matrix<complex> operator+(const matrix<double>& m) const;
132  matrix<complex> operator-(const matrix<double>& m) const;
134  matrix<complex> operator*(const matrix<double>& m) const;
136  vector<complex> operator*(const vector<complex>& v) const;
137  vector<complex> operator*(const vector<double>& v) const;
139  matrix<complex>& operator+=(const matrix<complex>& m);
141  matrix<complex>& operator-=(const matrix<complex>& m);
143  matrix<complex>& operator*=(const matrix<complex>& m);
145  matrix<complex> operator+(const complex& z) const;
147  matrix<complex> operator-(const complex& z) const;
149  matrix<complex> operator*(const complex& z) const;
151  matrix<complex> operator/(const complex& z) const;
153  matrix<complex>& operator+=(const complex& z);
155  matrix<complex>& operator-=(const complex& z);
157  matrix<complex>& operator*=(const complex& z);
159  matrix<complex>& operator/=(const complex& z);
161  matrix<complex> operator+(const double& a) const;
163  matrix<complex> operator-(const double& a) const;
165  matrix<complex> operator*(const double& a) const;
167  matrix<complex> operator/(const double& a) const;
169  matrix<complex>& operator+=(const double& a);
171  matrix<complex>& operator-=(const double& a);
173  matrix<complex>& operator*=(const double& a);
175  matrix<complex>& operator/=(const double& a);
176 
178  friend std::ostream& operator<<(std::ostream& output, const matrix<complex>& v);
179 
190 
201 
211  friend matrix<complex> operator+(const complex& z, const matrix<complex> m);
212 
219  friend matrix<complex> operator-(const complex& z, const matrix<complex> m);
220 
227  friend matrix<complex> operator*(const complex& z, const matrix<complex> m);
228 
235  friend vector<complex> operator*(const vector<complex>& v, const matrix<complex> m);
236 
243  friend vector<complex> operator*(const vector<double>& v, const matrix<complex> m);
244 
251  friend matrix<complex> operator+(const double& a, const matrix<complex> m);
252 
259  friend matrix<complex> operator-(const double& a, const matrix<complex> m);
260 
267  friend matrix<complex> operator*(const double& a, const matrix<complex> m);
270  };
271 }
272 
273 #endif
complex operator*(const double &x1, const complex &z2)
A class for the form factor in .
A class for constructing and defining operations on real matrices.
A base class for defining operations on matrices, both real and complex.
gsl_matrix_complex * _matrix
A class for constructing and defining operations on complex vectors.
A class for constructing and defining operations on complex matrices.
complex operator/(const double &x1, const complex &z2)
A class for constructing and defining operations on real vectors.
complex operator+(const double &x1, const complex &z2)
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
complex operator-(const double &x1, const complex &z2)
Complex number, vector and matrix manipulation using GSL.