1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| #ifndef _MATRIX_
#define _MATRIX_
#include <vector>
#include <cassert>
#include <iostream>
template <class T> class matrix{
protected:
std::vector<std::vector<T> > data;
std::size_t NBLignes;
std::size_t NBColonnes;
public:
//Constructeur par defaut
matrix(){}
//Alloue en memoire une matrice
//param nb_lig Nombre de ligne
//param nb_col Nombre de colonne
matrix(std::size_t nb_lig,std::size_t nb_col){
NBLignes = nb_lig;
NBColonnes = nb_col;
for(std::size_t lig=0;lig<nb_lig;++lig){
std::vector<T> tmp(nb_col,T());
data.push_back(tmp);
}
}
//brief Destructeur
~matrix(){}
//return Le nombre de ligne
inline std::size_t nbLignes() const{
return data.size();
}
//return Le nombre de colonne
inline std::size_t nbCols() const{
if (data.size()==0) return 0;
return data[0].size();
}
//Accesseur vers un element de la matrice
//param lig son numero de ligne
//param col son numero de colonne
//return la valeur stockee
inline T get(std::size_t lig,std::size_t col) const{
assert(lig<NBLignes);
assert(col<NBColonnes);
return data[lig][col];
}
//brief Accesseur vers un element de la matrice
//param lig son numero de ligne
//param col son numero de colonne
//param val la valeur a stocker
inline void set(std::size_t lig,std::size_t col,T val){
assert(lig<NBLignes);
assert(col<NBColonnes);
data[lig][col]=val;
}
inline matrix<T> cholesky(){
int i,j,k;
double sum;
matrix<T> CholMat(NBLignes,NBLignes);
for (i=0;i<NBLignes;i++) {
for (j=i;j<NBLignes;j++) {
for (sum=data[i][j],k=i-1;k>=0;k--) sum -= CholMat.get(i,k)*CholMat.get(j,k);
if (i == j)
CholMat.set(i,i,sqrt(sum));
else CholMat.set(j,i,sum/CholMat.get(i,i));
}
}
return CholMat;
};
};
#endif |
Partager