/*---------------------------------------------------------------------------* * IT++ * *---------------------------------------------------------------------------* * Copyright (c) 1995-2004 by Tony Ottosson, Thomas Eriksson, Pål Frenger, * * Tobias Ringström, and Jonas Samuelsson. * * * * Permission to use, copy, modify, and distribute this software and its * * documentation under the terms of the GNU General Public License is hereby * * granted. No representations are made about the suitability of this * * software for any purpose. It is provided "as is" without expressed or * * implied warranty. See the GNU General Public License for more details. * *---------------------------------------------------------------------------*/ /*! \file \brief Implementation of determinant calculations \author Tony Ottosson 1.8 2004/06/23 07:43:42 */ #include "base/vec.h" #include "base/itassert.h" #include "base/lu.h" namespace itpp { #ifndef NO_LAPACK /* Determinant of square matrix. Calculate determinant of inmatrix (Uses LU-factorisation) (See Theorem 3.2.1 p. 97 in Golub & van Loan, "Matrix Computations"). det(X) = det(P')*det(L)*det(U) = det(P')*1*prod(diag(U)) */ double det(const mat &X) { it_assert1(X.rows()==X.cols(),"det : Only square matrices"); mat L, U; ivec p; double s=1.0; int i; lu(X,L,U,p); // calculate LU-factorisation double temp=U(0,0); for (i=1;i det(const cmat &X) { it_assert1(X.rows()==X.cols(),"det : Only square matrices"); int i; cmat L, U; ivec p; double s=1.0; lu(X,L,U,p); // calculate LU-factorisation complex temp=U(0,0); for (i=1;i