a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
gslpp_matrix_complex.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  *
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 reset();
83  void assign(const size_t& i, const size_t& j, const complex& z);
84  void assign(const size_t& i, const size_t& j, const double& a);
85  void assign(const size_t& i, const size_t& j, const matrix<complex>& z);
86  void assign(const size_t& i, const size_t& j, const matrix<double>& a);
87  void assignre(const size_t& i, const size_t& j,const double& a);
88  void assignim(const size_t& i, const size_t& j,const double& a);
90  size_t size_i() const;
91  size_t size_j() const;
92  size_t size() const;
94  static matrix<complex> Id(size_t size);
96  matrix<complex> transpose() const;
98  matrix<complex> hconjugate() const;
99  matrix<complex> inverse() const;
101  bool isSingular();
103  matrix<double> real() const;
105  matrix<double> imag() const;
111  void eigensystem(matrix<complex> &U, vector<double> &S) const;
118  void singularvalue(matrix<complex> &U, matrix<complex> &V, vector<double> &S) const;
120  gsl_matrix_complex* as_gsl_type_ptr() const;
121  gsl_matrix_complex& as_gsl_type();
122  const gsl_matrix_complex& as_gsl_type() const;
124  //bool is_equal(const matrix<complex>& m1, const matrix<complex>& m2);
126  matrix<complex> operator-() const;
128  matrix<complex> operator+(const matrix<complex>& m) const;
130  matrix<complex> operator-(const matrix<complex>& m) const;
132  matrix<complex> operator*(const matrix<complex>& m) const;
134  matrix<complex> operator+(const matrix<double>& m) const;
136  matrix<complex> operator-(const matrix<double>& m) const;
138  matrix<complex> operator*(const matrix<double>& m) const;
140  vector<complex> operator*(const vector<complex>& v) const;
141  vector<complex> operator*(const vector<double>& v) const;
143  matrix<complex>& operator+=(const matrix<complex>& m);
145  matrix<complex>& operator-=(const matrix<complex>& m);
147  matrix<complex>& operator*=(const matrix<complex>& m);
149  matrix<complex> operator+(const complex& z) const;
151  matrix<complex> operator-(const complex& z) const;
153  matrix<complex> operator*(const complex& z) const;
155  matrix<complex> operator/(const complex& z) const;
157  matrix<complex>& operator+=(const complex& z);
159  matrix<complex>& operator-=(const complex& z);
161  matrix<complex>& operator*=(const complex& z);
163  matrix<complex>& operator/=(const complex& z);
165  matrix<complex> operator+(const double& a) const;
167  matrix<complex> operator-(const double& a) const;
169  matrix<complex> operator*(const double& a) const;
171  matrix<complex> operator/(const double& a) const;
173  matrix<complex>& operator+=(const double& a);
175  matrix<complex>& operator-=(const double& a);
177  matrix<complex>& operator*=(const double& a);
179  matrix<complex>& operator/=(const double& a);
181  bool operator==(const matrix<complex>& a) const;
182  bool operator!=(const matrix<complex>& a) const
183  {
184  return(!(*this == a));
185  }
186 
188  friend std::ostream& operator<<(std::ostream& output, const matrix<complex>& v);
189 
200 
211 
221  friend matrix<complex> operator+(const complex& z, const matrix<complex> m);
222 
229  friend matrix<complex> operator-(const complex& z, const matrix<complex> m);
230 
237  friend matrix<complex> operator*(const complex& z, const matrix<complex> m);
238 
245  friend vector<complex> operator*(const vector<complex>& v, const matrix<complex> m);
246 
253  friend vector<complex> operator*(const vector<double>& v, const matrix<complex> m);
254 
261  friend matrix<complex> operator+(const double& a, const matrix<complex> m);
262 
269  friend matrix<complex> operator-(const double& a, const matrix<complex> m);
270 
277  friend matrix<complex> operator*(const double& a, const matrix<complex> m);
280  };
281 }
282 
283 #endif
gslpp::vector< complex >
A class for constructing and defining operations on complex vectors.
Definition: gslpp_vector_complex.h:33
gslpp::matrix< double >
A class for constructing and defining operations on real matrices.
Definition: gslpp_matrix_double.h:48
gslpp::matrix< complex >::_matrix
gsl_matrix_complex * _matrix
Definition: gslpp_matrix_complex.h:47
gslpp::complex
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
gslpp::matrix
A base class for defining operations on matrices, both real and complex.
Definition: gslpp_matrix_base.h:21
gslpp::operator+
complex operator+(const double &x1, const complex &z2)
Definition: gslpp_complex.cpp:302
gslpp_matrix_double.h
gslpp::matrix< complex >::operator!=
bool operator!=(const matrix< complex > &a) const
Definition: gslpp_matrix_complex.h:182
gslpp_vector_complex.h
gslpp::vector< double >
A class for constructing and defining operations on real vectors.
Definition: gslpp_vector_double.h:33
S
A class for the form factor in .
Definition: MVllObservables.h:1436
gslpp::operator/
complex operator/(const double &x1, const complex &z2)
Definition: gslpp_complex.cpp:320
gslpp::operator<<
std::ostream & operator<<(std::ostream &output, const complex &z)
Definition: gslpp_complex.cpp:143
gslpp_matrix_base.h
gslpp_complex.h
gslpp::operator*
complex operator*(const double &x1, const complex &z2)
Definition: gslpp_complex.cpp:314
gslpp_vector_base.h
gslpp
Complex number, vector and matrix manipulation using GSL.
Definition: gslpp_complex.cpp:16
gslpp_vector_double.h
gslpp::matrix< complex >
A class for constructing and defining operations on complex matrices.
Definition: gslpp_matrix_complex.h:45
gslpp::operator-
complex operator-(const double &x1, const complex &z2)
Definition: gslpp_complex.cpp:308