Sto provando a calcolare un determinante usando le librerie boost C++. Ho trovato il codice per la funzione InvertMatrix() che ho copiato di seguito. Ogni volta che calcolo questo inverso, voglio anche il determinante. Ho una buona idea di come calcolare, moltiplicando la diagonale della matrice U dalla scomposizione LU. C'è un problema, sono in grado di calcolare correttamente il determinante, ad eccezione del segno. A seconda del pivoting, il segno è sbagliato per metà del tempo. Qualcuno ha un suggerimento su come ottenere il segno giusto ogni volta? Grazie in anticipo.Boost Library, come ottenere il determinante da 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;
Qui è dove ho inserito il mio colpo migliore per calcolare il determinante.
T determinant = 1;
for(int i = 0; i < A.size1(); i++)
{
determinant *= A(i,i);
}
Terminare la mia parte del codice.
// 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;
}