Esempio n. 1
0
 inline T slowDet(const ConstMatrixBase<T, BaseClass>& l)
 {
    if (!l.isSquare() || (l.rows() <= 1))
    {
       MatrixException e("Invalid matrix for det()");
       GPSTK_THROW(e);
    }
       // go recursion!
    if (l.rows() == 2)
       return l(0,0)*l(1,1) - l(0,1)*l(1,0);
    else
    {
          // use v[0,0] * det(minor matrix(0,0)) + 
          //     v[0,1] * det(minor matrix(0,1)) + ...
       size_t i;
       int sign;
       T det = 0;
       for (i = 0; i < l.rows(); i++)
       {
          sign = (i % 2) ? -1 : 1;
          if (l(0,i) != 0)
             det += sign * l(0,i) * slowDet(minorMatrix(l,0,i));
       }
       return det;
    }
 }
Esempio n. 2
0
double matrixDeterminant(double **A, int n){

 int i;
 double det=0;
 double **B;

 B=allocateDoubleMatrix(n-1, n-1);
 
 if(n==2){
  det=(A[0][0]*A[1][1])-(A[0][1]*A[1][0]);
 }

 else{
  for(i=0;i<n;i++){        
    B=minorMatrix(A, n, i, 0);
    det += pow(-1,i)*A[0][i]*matrixDeterminant(B,n-1);   
   }
  }

 return(det);
}