32 lines
537 B
C++
32 lines
537 B
C++
#include "ABACUS.h"
|
|
using namespace std;
|
|
|
|
complex<DP> ABACUS::lndet_LU_CX_dstry (SQMat_CX& a)
|
|
{
|
|
// Returns the ln of determinant of matrix a, through LU decomposition
|
|
// Does not preserve a, unlike lndet_LU_CX
|
|
|
|
Vect_INT indx(a.size());
|
|
|
|
DP d;
|
|
|
|
complex<DP> logdet = 0.0;
|
|
|
|
try {
|
|
|
|
ABACUS::ludcmp_CX (a, indx, d);
|
|
|
|
logdet = log(complex<DP>(d));
|
|
|
|
for (int j = 0; j < a.size(); j++) {
|
|
logdet += log(a[j][j]);
|
|
}
|
|
}
|
|
|
|
catch (Divide_by_zero) {
|
|
logdet = log(-1.0); // reset to nan
|
|
}
|
|
|
|
return(logdet);
|
|
}
|