template double determinant(ublas::matrix_expression const& mat_r) { double det = 1.0; matrix_T mLu(mat_r() ); ublas::permutation_matrix 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; }