inline double determinant(ublas::matrix_expression<matrix_T> const& mat_r)
 {
   double det = 1.0;
   matrix_T mLu(mat_r() );
   ublas::permutation_matrix<std::size_t> pivots(mat_r().size1() );
   int is_singular = lu_factorize(mLu, pivots);
   if (!is_singular) {
     for (std::size_t i=0; i < pivots.size(); ++i) {
       if (pivots(i) != i)
         det *= -1.0;
       det *= mLu(i,i);
     }
   } else {
     det = 0.0;
   }
   return det;
 }
Esempio n. 2
0
double determinant(boost::numeric::ublas::matrix_expression<MatrixT> const & mat_r)
{
  double det = 1.0;

  MatrixT mLu(mat_r());
  boost::numeric::ublas::permutation_matrix<vcl_size_t> pivots(mat_r().size1());

  int is_singular = static_cast<int>(lu_factorize(mLu, pivots));

  if (!is_singular)
  {
    for (vcl_size_t i=0; i < pivots.size(); ++i)
    {
      if (pivots(i) != i)
        det *= -1.0;

      det *= mLu(i,i);
    }
  }
  else
    det = 0.0;

  return det;
}