Xmipp  v3.23.11-Nereus
Matrix.h
Go to the documentation of this file.
1 /*
2 
3 CONDOR 1.06 - COnstrained, Non-linear, Direct, parallel Optimization
4  using trust Region method for high-computing load,
5  noisy functions
6 Copyright (C) 2004 Frank Vanden Berghen
7 
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation version 2
11 of the License.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 
22 If you want to include this tools in any commercial product,
23 you can contact the author at fvandenb@iridia.ulb.ac.be
24 
25 */
26 
27 #ifndef _INCLUDE_MATRIX_H
28 #define _INCLUDE_MATRIX_H
29 
30 #include "Vector.h"
31 #include "VectorInt.h"
32 #include <iosfwd>
33 
34 #ifndef NOMATRIXTRIANGLE
35 #include "MatrixTriangle.h"
36 #endif
37 
38 class Matrix
39 {
40  protected:
41  typedef struct MatrixDataTag
42  {
43  char **columnNames;
45  int ref_count;
46  double **p;
47  } MatrixData;
49 
50  void init(int _nLine, int _nColumn, int _extLine, int _extColumn, MatrixData* d=NULL);
51  void setExtSize(int _extLine, int _extColumn);
52  void destroyCurrentBuffer();
53 
54  public:
55 
56 // creation & management of Matrix:
57  Matrix(int _ligne=0,int _nColumn=0);
58  Matrix(int _ligne,int _nColumn, int _extLine,int _extColumn);
59  Matrix(const char *filename, char ascii=0);
60  Matrix(Vector a, Vector b); // a * b^T
61  Matrix(Vector a);
62  void save(char *filename,char ascii);
63  void save(FILE *f,char ascii);
64  void updateSave(char *saveFileName); // only binary
65  void extendLine();
66  void setNLine(int _nLine);
67  void extendColumn();
68  void setNColumn(int _nColumn);
69  void setSize(int _nLine,int _nColumn);
70  void exactshape();
71  void print();
72  void setColNames(char **c, int nc=0);
73 
74 // allow shallow copy:
75  ~Matrix();
76  Matrix(const Matrix &A);
77  Matrix& operator=( const Matrix& A );
78  Matrix clone();
79  void copyFrom(Matrix a);
80 
81 // accessor method
82  inline bool operator==( const Matrix& A ) { return (A.d==d);}
83  inline int nLine() { return d->nLine; };
84  inline int nColumn() { return d->nColumn; };
85  inline char **getColumnNames() { return d->columnNames; }
86  inline double *operator [](int i) { return d->p[i]; };
87  inline operator double**() const { return d->p; };
88  Vector getLine(int i, int n=0, int startCol=0);
89  void getLine(int i, Vector r, int n=0, int startCol=0);
90  Vector getColumn(int i, int n=0);
91  void getColumn(int i, Vector r, int n=0);
92  void getSubMatrix(Matrix R, int startL, int StartC, int nl=0, int nc=0);
93  void setLine(int i, Vector v, int n=0);
94  void setLines(int indexDest, Matrix Source, int indexSource=0, int number=0);
95  void swapLines(int i, int j);
96  int lineIndex(Vector r, int nn=0);
97  void merge(Matrix m, int eliminateDoubles=1);
98  void append(Vector tmp);
99 
100 // simple math tools:
101  void zero();
102  void diagonal(double d);
104  void multiplyInPlace(double d);
105  void multiply(Vector R, Vector v); // result in R
106  void transposeAndMultiply(Vector R, Vector a);// result in R
107  void multiply(Matrix R, Matrix a); // result in R
108  void transposeAndMultiply(Matrix R, Matrix a);// result in R
109  void multiplyByTranspose(Matrix R, Matrix a); // result in R
112  void addInPlace(Matrix B);
113  void addMultiplyInPlace(double d, Matrix B);
114  void addUnityInPlace(double d);
115  void transposeInPlace();
116  Matrix transpose();
117  void transpose(Matrix trans);
118  double scalarProduct(int nl, Vector v);
119 
120 #ifndef NOMATRIXTRIANGLE
121  Matrix(MatrixTriangle A, char bTranspose=0);
122  bool cholesky(MatrixTriangle matL, double lambda=0, double *lambdaCorrection=NULL);
126 #endif
127 
128  double frobeniusNorm();
129  double LnftyNorm();
130  double euclidianNorm(int i);
132 
133 // default return matrix in case of problem in a function
135 };
136 
137 #endif
void zero()
Definition: Matrix.cpp:553
double LnftyNorm()
Definition: Matrix.cpp:1058
double scalarProduct(int nl, Vector v)
Definition: Matrix.cpp:695
void setColNames(char **c, int nc=0)
Definition: Matrix.cpp:1180
void merge(Matrix m, int eliminateDoubles=1)
Definition: Matrix.cpp:1203
doublereal * c
void transposeInPlace()
Definition: Matrix.cpp:500
void QR(Matrix Q=Matrix::emptyMatrix, MatrixTriangle R=MatrixTriangle::emptyMatrixTriangle, VectorInt permutation=VectorInt::emptyVectorInt)
Definition: Matrix.cpp:820
Matrix multiply(Matrix B)
Definition: Matrix.cpp:633
Definition: Vector.h:37
void swapLines(int i, int j)
Definition: Matrix.cpp:1155
MatrixData * d
Definition: Matrix.h:48
void addInPlace(Matrix B)
Definition: Matrix.cpp:703
void exactshape()
Definition: Matrix.cpp:379
void copyFrom(Matrix a)
Definition: Matrix.cpp:478
Matrix & operator=(const Matrix &A)
Definition: Matrix.cpp:451
void setSize(int _nLine, int _nColumn)
Definition: Matrix.cpp:205
void append(Vector tmp)
Definition: Matrix.cpp:1227
int nColumn()
Definition: Matrix.h:84
#define i
void extendLine()
Definition: Matrix.cpp:181
struct Matrix::MatrixDataTag MatrixData
char ** columnNames
Definition: Matrix.h:43
void print()
Definition: Matrix.cpp:418
int nLine()
Definition: Matrix.h:83
int lineIndex(Vector r, int nn=0)
Definition: Matrix.cpp:1168
doublereal * b
void setNColumn(int _nColumn)
Definition: Matrix.cpp:199
void getSubMatrix(Matrix R, int startL, int StartC, int nl=0, int nc=0)
Definition: Matrix.cpp:1145
bool cholesky(MatrixTriangle matL, double lambda=0, double *lambdaCorrection=NULL)
Definition: Matrix.cpp:763
double * lambda
double * f
void extendColumn()
Definition: Matrix.cpp:193
double frobeniusNorm()
Definition: Matrix.cpp:1045
bool operator==(const Matrix &A)
Definition: Matrix.h:82
void multiplyInPlace(double d)
Definition: Matrix.cpp:640
double euclidianNorm(int i)
Definition: Matrix.cpp:1140
static MatrixTriangle emptyMatrixTriangle
Vector getMaxColumn()
Definition: Matrix.cpp:1073
Vector getColumn(int i, int n=0)
Definition: Matrix.cpp:1108
Definition: Matrix.h:38
double * operator[](int i)
Definition: Matrix.h:86
Matrix(int _ligne=0, int _nColumn=0)
Definition: Matrix.cpp:60
#define j
int m
void setExtSize(int _extLine, int _extColumn)
Definition: Matrix.cpp:212
void setLines(int indexDest, Matrix Source, int indexSource=0, int number=0)
Definition: Matrix.cpp:1131
void init(int _nLine, int _nColumn, int _extLine, int _extColumn, MatrixData *d=NULL)
Definition: Matrix.cpp:37
void save(char *filename, char ascii)
Definition: Matrix.cpp:282
Vector getLine(int i, int n=0, int startCol=0)
Definition: Matrix.cpp:1094
char ** getColumnNames()
Definition: Matrix.h:85
Matrix transpose()
Definition: Matrix.cpp:539
void addUnityInPlace(double d)
Definition: Matrix.cpp:1038
void setLine(int i, Vector v, int n=0)
Definition: Matrix.cpp:1125
static VectorInt emptyVectorInt
Definition: VectorInt.h:70
Matrix clone()
Definition: Matrix.cpp:470
void multiplyByTranspose(Matrix R, Matrix a)
Definition: Matrix.cpp:613
void transposeAndMultiply(Vector R, Vector a)
Definition: Matrix.cpp:669
void setNLine(int _nLine)
Definition: Matrix.cpp:187
static Matrix emptyMatrix
Definition: Matrix.h:134
void addMultiplyInPlace(double d, Matrix B)
Definition: Matrix.cpp:720
int * n
doublereal * a
void choleskySolveInPlace(Vector b)
Definition: Matrix.cpp:808
void destroyCurrentBuffer()
Definition: Matrix.cpp:439
void diagonal(double d)
Definition: Matrix.cpp:65
void updateSave(char *saveFileName)
Definition: Matrix.cpp:349
void multiplyByDiagonalMatrix(Vector v)
Definition: Matrix.cpp:558
~Matrix()
Definition: Matrix.cpp:434