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; }
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; }