Tôi đang cố gắng tính toán một yếu tố quyết định bằng cách sử dụng thư viện boost C++. Tôi tìm thấy mã cho hàm InvertMatrix() mà tôi đã sao chép bên dưới. Mỗi khi tôi tính toán nghịch đảo này, tôi cũng muốn định thức. Tôi có một ý tưởng tốt như thế nào để tính toán, bằng cách nhân xuống đường chéo của ma trận U từ sự phân hủy LU. Có một vấn đề, tôi có thể tính toán định thức đúng cách, ngoại trừ dấu hiệu. Tùy thuộc vào việc xoay vòng tôi nhận được dấu hiệu không chính xác một nửa thời gian. Có ai có một gợi ý về làm thế nào để có được những dấu hiệu đúng mỗi lần? Cảm ơn trước.Thư viện tăng cường, làm thế nào để có được yếu tố quyết định từ 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;
Đây là nơi tôi chèn ảnh tốt nhất của mình khi tính toán yếu tố quyết định.
T determinant = 1;
for(int i = 0; i < A.size1(); i++)
{
determinant *= A(i,i);
}
Kết thúc phần mã của tô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;
}