我正在尝试使用boost c++库计算行列式。我找到了函数InvertMatrix()的代码,如下所示。每次计算逆矩阵时,我都想得到行列式。我知道如何计算,通过从LU分解的U矩阵对角线向下相乘。但是有一个问题,我能够正确地计算行列式,除了符号。根据枢轴选取的不同,有一半的时间我会得到错误的符号。有人有建议如何每次都得到正确的符号吗?提前感谢。
template<class T>
bool InvertMatrix(const ublas::matrix<T>& input, ublas::matrix<T>& inverse)
{
using namespace boost::numeric::ublas;
typedef permutation_matrix<std::size_t> pmatrix;
// create a working copy of the input
matrix<T> A(input);
// create a permutation matrix for the LU-factorization
pmatrix pm(A.size1());
// perform LU-factorization
int res = lu_factorize(A,pm);
if( res != 0 ) return false;
这里是我尝试计算行列式的最佳方法。
T determinant = 1;
for(int i = 0; i < A.size1(); i++)
{
determinant *= A(i,i);
}
结束我的代码部分。
// create identity matrix of "inverse"
inverse.assign(ublas::identity_matrix<T>(A.size1()));
// backsubstitute to get the inverse
lu_substitute(A, pm, inverse);
return true;
}