我找到了计算 boost::ublas 矩阵行列式的函数:
这个函数在非整数类型下表现良好(float和double类型下正常工作)。但是,当我尝试传递相同的矩阵但类型为int时,我收到了编译错误:
“检查失败,位于c:\boost\boost_1_58_0\boost\numeric\ublas\lu.hpp的167行: singular != 0 || detail::expression_type_check (prod (triangular_adaptor (m), triangular_adaptor (m)), cm) 未知位置(0):"BaseTest"中的致命错误:std::logic_error: internal logic”
这是boost的bug还是我的函数有误? 有什么改动可以避免这个错误?
template<typename ValType>
ValType det_fast(const ublas::matrix<ValType>& matrix)
{
// create a working copy of the input
ublas::matrix<ValType> mLu(matrix);
ublas::permutation_matrix<std::size_t> pivots(matrix.size1());
auto isSingular = ublas::lu_factorize(mLu, pivots);
if (isSingular)
return static_cast<ValType>(0);
ValType det = static_cast<ValType>(1);
for (std::size_t i = 0; i < pivots.size(); ++i)
{
if (pivots(i) != i)
det *= static_cast<ValType>(-1);
det *= mLu(i, i);
}
return det;
}
这个函数在非整数类型下表现良好(float和double类型下正常工作)。但是,当我尝试传递相同的矩阵但类型为int时,我收到了编译错误:
“检查失败,位于c:\boost\boost_1_58_0\boost\numeric\ublas\lu.hpp的167行: singular != 0 || detail::expression_type_check (prod (triangular_adaptor (m), triangular_adaptor (m)), cm) 未知位置(0):"BaseTest"中的致命错误:std::logic_error: internal logic”
这是boost的bug还是我的函数有误? 有什么改动可以避免这个错误?