我需要为一个项目计算一些行列式:我使用 c++ 14 和 Eigen。
因此,MatrixXd A 是具有 X 行和 X 列的特征矩阵,并且包含双精度值。为了计算行列式,我使用 A.determinant()。让我们假设 A.determinant() 等于 d。然后,当我使用 QR 分解时出现问题,因为 R.determinant() 等于 -d,应该等于 d。这仅发生在大型矩阵(大小大于 5 - 我观察到这一点)。只有标志有问题,为什么?
我的代码:
#include <iostream>
#include <Eigen>
#include <fstream>
#include <chrono>
using namespace Eigen;
using namespace std;
using namespace std::chrono;
ifstream fin("input.txt");
int main()
{
double aux;
int n = 10;
MatrixXd A;
A.resize(n,n);
// Read A
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
fin>>aux;
A(i,j) = aux;
}
cout<<"Start!"<<endl;
cout<<A.determinant()<<endl;
//Use QR decomposition, get R matrix
HouseholderQR<MatrixXd> qr(A);
qr.compute(A);
MatrixXd R = qr.matrixQR().template triangularView<Upper>();
// R is a triangular matrix, det(A) should be equal to det(R)
cout<<R.determinant()<<endl;
return 0;
}
我该如何解决这个问题? 图像