Estoy tratando de calcular un determinante usando las bibliotecas boost C++. Encontré el código para la función InvertMatrix() que he copiado a continuación. Cada vez que calculo esto inverso, también quiero el determinante. Tengo una buena idea de cómo calcular, multiplicando la diagonal de la matriz U desde la descomposición LU. Hay un problema, puedo calcular el determinante correctamente, excepto por el signo. Dependiendo del pivote, el signo es incorrecto la mitad del tiempo. ¿Alguien tiene alguna sugerencia sobre cómo obtener el letrero correcto todo el tiempo? Gracias por adelantado.Boost Library, cómo obtener un determinante de lu_factorize()?
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;
Aquí es donde inserté mi mejor oportunidad para calcular el determinante.
T determinant = 1;
for(int i = 0; i < A.size1(); i++)
{
determinant *= A(i,i);
}
Fin de mi parte del código.
// 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;
}