Home | Develop | Download | Contact
CMatrix.hpp
1 /*
2  * CMatrix.hpp
3  *
4  * Copyright 2018 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  */
22 
32 #ifndef __PDS_CMATRIX_HPP__
33 #define __PDS_CMATRIX_HPP__
34 
35 #include <string>
36 #include <Pds/Ra>
37 #include <Pds/Size>
38 #include <Pds/Complex>
39 
49 namespace Pds{
50 
51 class CVector;
52 
62 class CMatrix
63 {
64 
65 private:
66  // Parte real de una matriz compleja
67  Pds::Matrix Real;
68  // Parte imaginaria de una matriz compleja
69  Pds::Matrix Imag;
70 
71  friend class CVector;
72 
73 public:
74 
85  CMatrix(void);
86 
93  CMatrix(unsigned int Nlin,unsigned int Ncol);
94 
95 
103  CMatrix(unsigned int Nlin,unsigned int Ncol, double val);
104 
113  CMatrix(unsigned int Nlin,unsigned int Ncol, double valr, double vali);
114 
122  CMatrix(unsigned int Nlin,unsigned int Ncol, const Pds::Complex &C);
123 
130  CMatrix(const Pds::Matrix &Real,const Pds::Matrix &Imag);
131 
132 
140 
141 
150  CMatrix(Pds::Complex func(const Pds::Complex &a,const Pds::Complex &b),const Pds::CMatrix &A,const Pds::CMatrix &B);
151 
153 
158 public:
170  Pds::Complex operator[](const unsigned int &id) const
171  {
172  return Pds::Complex(this->Real.Get(id),this->Imag.Get(id));
173  }
174 
183  Pds::Complex GetRaw(unsigned int lin,unsigned int col) const
184  {
185  return Pds::Complex(this->Real.GetRaw(lin,col),this->Imag.GetRaw(lin,col));
186  }
187 
196  void SetRaw(unsigned int lin,unsigned int col,const Pds::Complex &val)
197  {
198  this->Real.SetRaw(lin,col,val.Real);
199  this->Imag.SetRaw(lin,col,val.Imag);
200  }
201 
202 
207 public:
221  bool SetRowVector(unsigned int lin,const Pds::CVector &X);
222 
228 public:
239  bool Copy(const Pds::CMatrix &A);
240 
241 
248  bool Copy(const Pds::Matrix &A);
249 
272 
273 
295  Pds::CMatrix& operator = (const Pds::Matrix &B);
296 
297 
304  void MakeEmpty(void);
305 
313  bool Reshape(unsigned int Nlin,unsigned int Ncol);
314 
319 public:
332  bool Rect(const Pds::Matrix &Real,const Pds::Matrix &Imag);
333 
341  bool Polar(const Pds::Matrix &Module,const Pds::Matrix &Angle);
342 
347 public:
348 
361 
368  Pds::CMatrix Plus (void) const;
369 
377 
384  Pds::CMatrix Minus (void) const;
389 public:
403 
411  Pds::CMatrix operator + (double b) const;
412 
421 
429  Pds::CMatrix Add(const Pds::CMatrix &B) const;
430 
438  Pds::CMatrix Add(double b) const;
439 
447  Pds::CMatrix Add(const Pds::Complex &c) const;
448 
457 
465  Pds::CMatrix Sub(const Pds::CMatrix &B) const;
466 
474  Pds::CMatrix operator - (double b) const;
475 
484 
492  Pds::CMatrix Sub(double b) const;
493 
501  Pds::CMatrix Sub(const Pds::Complex &c) const;
502 
511 
519  Pds::CMatrix Mul(const Pds::CMatrix &B) const;
520 
528  Pds::CMatrix operator * (double b) const;
529 
538 
546  Pds::CMatrix Mul(double b) const;
547 
555  Pds::CMatrix Mul(const Pds::Complex &c) const;
556 
565 
574 
582  Pds::CMatrix Div(const Pds::CMatrix &B) const;
583 
584 
592  Pds::CMatrix operator / (const Pds::Matrix &B) const;
593 
601  Pds::CMatrix Div(const Pds::Matrix &B) const;
602 
603 
611  Pds::CMatrix operator / (double b) const;
612 
613 
622 
623 
631  Pds::CMatrix Div(double b) const;
632 
640  Pds::CMatrix Div(const Pds::Complex &c) const;
641 
642 
650  Pds::CMatrix Pow(const Pds::CMatrix &B) const;
651 
659  Pds::CMatrix Pow(double b) const;
665 public:
677  Pds::CMatrix Conj(void) const;
678 
685  Pds::Matrix Module(void) const;
686 
687 
694  Pds::Matrix Module2(void) const;
695 
696 
706  Pds::Matrix Angle(void) const;
707 
713 public:
723  Pds::Size Size(void) const;
724 
730  unsigned int Nlin(void) const;
731 
737  unsigned int Ncol(void) const;
738 
744  unsigned int Nel(void) const;
749 public:
750 
761  bool IsEmpty(void) const;
762 
768  bool IsNotSimilarTo(const Pds::CMatrix &B) const;
769 
776  bool HasNan(void) const;
781 public:
792  void Print(std::string str="") const;
793 
797 }; // Class CMatrix
798 
799 } // namespace Pds
800 
801 
811 
821 
831 
841 
851 
861 
871 
872 
882 
887 #endif
888 
La clase tipo Pds::CMatrix . Esta clase genera un objeto con dos parametros Nlin y Ncol....
Definition: CMatrix.hpp:63
Pds::Matrix Imag
Definition: CMatrix.hpp:69
Pds::Matrix Real
Definition: CMatrix.hpp:67
La clase tipo Pds::CVector . Esta clase genera una matriz de Nlin lineas y 1 columna....
Definition: CVector.hpp:81
La clase tipo Pds::Complex . Esta clase genera un objeto con dos parametros Nlin y Ncol....
Definition: Complex.hpp:59
double Real
Definition: Complex.hpp:63
double Imag
Definition: Complex.hpp:65
bool Reshape(unsigned int Nlin, unsigned int Ncol)
Remodela los datos internos de la array y la convierte en una array de tamaño diferente,...
Pds::CMatrix operator+(void) const
Retorna un numero complejo igual a si mismo (A).
Pds::CMatrix Add(const Pds::CMatrix &B) const
[Elemento a elemento] Suma con sigo mismo (A) una matriz compleja B.
CMatrix(Pds::Complex func(const Pds::Complex &a, const Pds::Complex &b), const Pds::CMatrix &A, const Pds::CMatrix &B)
Crea un objeto de tipo Pds::CMatrix operando datos desde otras.
bool IsNotSimilarTo(const Pds::CMatrix &B) const
Verifica si la matriz no es simliar a B.
Pds::Size Size(void) const
Retorna el tamaño de si mismo (A).
Pds::CMatrix Sub(const Pds::CMatrix &B) const
[Elemento a elemento] Resta con sigo mismo (A) una matriz compleja B.
unsigned int Nel(void) const
Retorna el número de elementos de si mismo (A).
Pds::Complex operator[](const unsigned int &id) const
Retorna el valor en cada posicion de la matriz (solo lectura). Hace una verificación si el indice exi...
Definition: CMatrix.hpp:170
Pds::CMatrix Mul(const Pds::Complex &c) const
[Elemento a elemento] Multiplica con sigo mismo (A) un número complejo c.
bool SetRowVector(unsigned int lin, const Pds::CVector &X)
Copia un vector en una linea de la matriz.
Pds::CMatrix Sub(const Pds::Complex &c) const
[Elemento a elemento] Resta con sigo mismo (A) un número real c.
unsigned int Ncol(void) const
Retorna el número de columnas de si mismo (A).
Pds::CMatrix Pow(const Pds::CMatrix &B) const
[Elemento a elemento] Eleva con sigo mismo (A) un exponente matriz compleja B.
void SetRaw(unsigned int lin, unsigned int col, const Pds::Complex &val)
Establece una variable Datum en la posición (lin,col) de la matriz.
Definition: CMatrix.hpp:196
Pds::Matrix Module2(void) const
Retorna el modulo al cuadrado de si mismo (A).
Pds::CMatrix operator-(void) const
Retorna un numero complejo igual al negativo de si mismo (A).
CMatrix(unsigned int Nlin, unsigned int Ncol, double valr, double vali)
Crea un objeto matriz de tipo Pds::CMatrix.
CMatrix(unsigned int Nlin, unsigned int Ncol, double val)
Crea un objeto matriz de tipo Pds::CMatrix.
Pds::CMatrix operator*(double a, const Pds::CMatrix &B)
Multiplica con a una matriz compleja B.
Pds::CMatrix Div(double b) const
[Elemento a elemento] Divide con sigo mismo (A) un número real b.
Pds::CMatrix Add(double b) const
[Elemento a elemento] Suma con sigo mismo (A) un número real b.
bool IsEmpty(void) const
Verifica si la matriz está vacia.
Pds::CMatrix Div(const Pds::CMatrix &B) const
[Elemento a elemento] Divide con sigo mismo (A) una matriz compleja B.
unsigned int Nlin(void) const
Retorna el número de lineas si mismo (A).
Pds::CMatrix Add(const Pds::Complex &c) const
[Elemento a elemento] Suma con sigo mismo (A) un número real c.
bool Polar(const Pds::Matrix &Module, const Pds::Matrix &Angle)
Carga el matriz compleja indicando el módulo y el ángulo.
bool Rect(const Pds::Matrix &Real, const Pds::Matrix &Imag)
Carga el matriz compleja indicando la parte real e imaginaria.
bool Copy(const Pds::CMatrix &A)
Copia los datos de la matriz.
CMatrix(unsigned int Nlin, unsigned int Ncol)
Crea un objeto matriz de tipo Pds::CMatrix.
Pds::CMatrix Div(const Pds::Matrix &B) const
[Elemento a elemento] Divide con sigo mismo (A) una matriz real B.
Pds::Matrix Angle(void) const
Retorna el ángulo (fase o argumento) de si mismo (A).
bool Copy(const Pds::Matrix &A)
Copia los datos de la matriz.
CMatrix(const Pds::CMatrix &B)
Crea un objeto de tipo Pds::CMatrix copiando datos desde otra.
void Print(std::string str="") const
Muestra en pantalla el contenido de Pds::CMatrix, elementos separados por tabulador.
void MakeEmpty(void)
libera los datos internos de la matriz y la convierte en una matriz nula. es decir con lineas y colum...
bool HasNan(void) const
Verifica si el número complexo tiene algun valor NAN (Not A Number).
Pds::Complex GetRaw(unsigned int lin, unsigned int col) const
Retorna una variable Datum en la posición (lin,col) de la matriz.
Definition: CMatrix.hpp:183
Pds::CMatrix & operator=(const Pds::CMatrix &B)
Copia en si mismo (A), una matriz B. Este operador es similar al método Copy(). No importa el tamaño ...
CMatrix(unsigned int Nlin, unsigned int Ncol, const Pds::Complex &C)
Crea un objeto matriz de tipo Pds::CMatrix.
Pds::CMatrix Conj(void) const
Retorna el conjugado de si mismo (A).
Pds::CMatrix Mul(const Pds::CMatrix &B) const
Multiplica con sigo mismo (A) una matriz compleja B.
Pds::CMatrix operator-(double a, const Pds::CMatrix &B)
Resta con a una matriz compleja B.
Pds::CMatrix operator/(const Pds::CMatrix &B) const
[Elemento a elemento] Divide con sigo mismo (A) una matriz compleja B.
Pds::CMatrix Mul(double b) const
[Elemento a elemento] Multiplica con sigo mismo (A) un número real b.
Pds::CMatrix operator/(double a, const Pds::CMatrix &B)
Divide con a una matriz compleja B.
CMatrix(void)
Crea un objeto matriz de tipo Pds::CMatrix Una matriz compleja vacia.
Pds::CMatrix operator+(double a, const Pds::CMatrix &B)
Suma con a una matriz compleja B.
Pds::CMatrix Pow(double b) const
[Elemento a elemento] Eleva con sigo mismo (A) un exponente real b.
CMatrix(const Pds::Matrix &Real, const Pds::Matrix &Imag)
Crea un objeto matriz de tipo Pds::CMatrix.
Pds::CMatrix Plus(void) const
Retorna un numero complejo igual a si mismo (A).
Pds::CMatrix operator*(const Pds::CMatrix &B) const
Multiplica con sigo mismo (A) una matriz compleja B.
Pds::CMatrix Minus(void) const
Retorna un numero complejo igual al negativo de si mismo (A).
Pds::Matrix Module(void) const
Retorna el modulo de si mismo (A).
Pds::CMatrix Div(const Pds::Complex &c) const
[Elemento a elemento] Divide con sigo mismo (A) un número real c.
Pds::CMatrix Sub(double b) const
[Elemento a elemento] Resta con sigo mismo (A) un número real b.
Pds::CMatrix Product(const Pds::CMatrix &B) const
[Elemento a elemento] Multiplica con sigo mismo (A) elemento a elemento una matriz compleja B.
Nombre de espacion para PDS (Procesamiento Digital de Senales)
Definition: Fft.hpp:49

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed