MoDeNa  1.0
Software framework facilitating sequential multi-scale modelling
determinant.h
Go to the documentation of this file.
1 
10 double determinant(double **in_matrix, int n);
11 
12 double determinant(double **in_matrix, int n)
13 {
14  int i, j, k;
15  double **matrix;
16  double det = 1;
17  matrix = new double *[n];
18 
19  for (i = 0; i < n; i++)
20  {
21  matrix[i] = new double[n];
22  }
23 
24  for (i = 0; i < n; i++)
25  {
26  for (j = 0; j < n; j++)
27  {
28  matrix[i][j] = in_matrix[i][j];
29  }
30  }
31 
32  for (k = 0; k < n; k++)
33  {
34  if (matrix[k][k] == 0)
35  {
36  bool ok = false;
37 
38  for (j = k; j < n; j++)
39  {
40  if (matrix[j][k] != 0)
41  {
42  ok = true;
43  }
44  }
45 
46  if (!ok) {return 0;}
47 
48  for (i = k; i < n; i++)
49  {
50  std::swap (matrix[i][j], matrix[i][k]);
51  }
52 
53  det = -det;
54  }
55 
56  det *= matrix[k][k];
57 
58  if (k+1 < n)
59  {
60  for (i = k+1; i < n; i++)
61  {
62  for (j = k+1; j < n; j++)
63  {
64  matrix[i][j] = matrix[i][j] - matrix[i][k]*matrix[k][j]/matrix[k][k];
65  }
66  }
67  }
68  }
69 
70  // for (i = 0; i < n; i++)
71  // delete [] matrix[i];
72 
73  // delete [] matrix;
74 
75  return det;
76 }
77 
double determinant(double **in_matrix, int n)
Definition: determinant.h:12