Simplexus  1.0
Création d'un pavage par des simplexes de dimension N et visualisation graphique en dimension 2.
mathutil.cpp
Go to the documentation of this file.
1 #include "mathutil.hpp"
2 
3 /*
4  * Calcul du déterminant à partir d'un vecteur de vecteur
5  * représentant une matrice carrée
6  */
7 double determinant(std::vector<std::vector<double>> det){
8  //Si le vecteur est vide, le déterminant est nulle
9  if (det.size()==0){
10  return 0;
11  }
12  //Si le vecteur contient une seule valeur x, le déterminant vaut x
13  if (det.size()==1){
14  double x10=det.at(0).at(0);
15  return x10;
16  }
17  //Si le vecteur est de la forme 2x2:
18  // |x1 y1|
19  // |x2 y2|,
20  //le déterminant vaut x1*y2 - x2*y1
21  if (det.size()==2){
22  if (det.at(0).size()!=2 || det.at(1).size()!=2){
23  std::cerr<<"Proubleme"<<std::endl;
24  abort();
25  }
26  double x10=det.at(0).at(0);
27  double x20=det.at(0).at(1);
28  double y10=det.at(1).at(0);
29  double y20=det.at(1).at(1);
30  return x10*y20-y10*x20;
31  }
32  //Si le vecteur est de la forme NxN:
33  // |x2,2 - x1,1 ... xn+1,1 - x1,1|
34  // |x2,2 - x1,2 ... xn+1,2 - x1,2|
35  // |... ... ... |
36  // |... ... ... |
37  // |x2,n - x1,n ... xn+1,n - x1,n|,
38  //
39  // le déterminant vaut la somme des (déterminants des sous-matrices de taille N-1xN-1 * coefficient a_i,j de ligne i,j
40  // qui a permis d'extraire la sous-matrice * (-1)^(i+j) (cf wikipédia, article déterminant pour plus de détails)
41  //
42  double detNum=0.;
43  for (unsigned int j=0;j<det.size();j++){
44  double epsilon=1.;
45  if ((j%2) != 0)
46  epsilon = -1.;
47  std::vector<std::vector<double>> subDet;
48  for (unsigned int k=1; k<det.size(); k++){
49  std::vector<double> subDetCurColumn;
50  for(unsigned int p=0; p<det.size(); p++){
51  if(p != j){
52  subDetCurColumn.push_back(det.at(k).at(p));
53  }
54  }
55  subDet.push_back(subDetCurColumn);
56  subDetCurColumn.clear();
57  }
58  detNum += epsilon * (double) det.at(0).at(j) * determinant(subDet);
59  subDet.clear();
60  }
61  return detNum;
62 }
double determinant(std::vector< std::vector< double >> det)
Calcul d'un déterminant.
Definition: mathutil.cpp:7
Fonction mathématiques de base.