C++ 如何用lapack++;(2.5+;)

C++ 如何用lapack++;(2.5+;),c++,lapack++,C++,Lapack++,使用库计算(非对称,平方)矩阵行列式的最佳(最快)方法是什么?我不知道lapack++的情况,但我确信标准lapack中没有。据我所知,lapack++本身并不实现矩阵运算,而是使用其他运算,实际上您可以在其中的几个运算之间进行切换(atlas、mkl(英特尔数学内核库)等等)。因此,我的假设是,在lapack++中也存在任何行列式运算 计算行列式的一种方法是使用LU分解: LaVectorLongInt pivots(A.cols()); LUFactorizeIP(A, pivot

使用库计算(非对称,平方)矩阵行列式的最佳(最快)方法是什么?

我不知道lapack++的情况,但我确信标准lapack中没有。据我所知,lapack++本身并不实现矩阵运算,而是使用其他运算,实际上您可以在其中的几个运算之间进行切换(atlas、mkl(英特尔数学内核库)等等)。因此,我的假设是,在lapack++中也存在任何行列式运算

计算行列式的一种方法是使用LU分解:

  LaVectorLongInt pivots(A.cols());

  LUFactorizeIP(A, pivots);

  double detA = 1;
  for (int i = 0; i < A.cols(); ++i)
    detA *= A(i, i);
lavectornigentpivots(A.cols());
lufactorzeip(A,支点);
双detA=1;
for(int i=0;i

警告,A将更改,因此可能建议进行复制。

Lapack++包含所有BLAS操作。BLAS中没有行列式函数,但可能还有其他方法可以用来获得行列式。对不起,我误解了你的问题。我罪有应得:-)。我现在接受了这个答案,因为没有其他选择。如果有人添加了另一个(好的,可接受的)解决方案,我会接受这个答案。我认为如果你有奇数个排列(轴的大小是奇数),你也需要一个负号。另请参见:分解为
A=PLU
。这里L在对角线上有一个,所以
det(L)=1
。现在
det(A)=det(P)*det(L)*det(U)=det(P)*1*det(U)
。在上面的代码中,不处理置换矩阵的符号
P
(表示为枢轴数组)。