Exemple #1
0
void cramer3(double *px,double *py,double *pz, 
                    double a11,double a12,double a13, 
                    double a21,double a22,double a23, 
                    double a31,double a32,double a33,
                    double b1, double b2, double b3 )
{ double det;

  *px = sarrus(b1 ,a12,a13, b2 ,a22,a23, b3 ,a32,a33);
  *py = sarrus(a11,b1 ,a13, a21,b2 ,a23, a31,b3 ,a33);
  *pz = sarrus(a11,a12,b1 , a21,a22,b2 , a31,a32,b3 );
  det = sarrus(a11,a12,a13, a21,a22,a23, a31,a32,a33);
  if(det != 0.0){ *px/=det;*py/=det;*pz/=det;}
}
/* This function calculates the determinant of a matrix using
 * the Laplace expansion
 * returns -1 if the matrix isn't square                        */
double determinant_laplace(struct matrix m)
{
    if(m.rows!=m.columns)
    {
        printf("Can't calculate determinant\n");
        printf("Input matrix isn't square\n");
        return -1;
    }
    if(m.rows==2||m.rows==3)
        return sarrus(m);

    unsigned int i;
    double det=0;
    for (i = 0; i < m.columns; i++)
    {
        if(m.mat[0][i]!=0)
            if(i%2==0)
                det+=m.mat[0][i]*determinant_laplace(minor_matrix(m,0,i));
            else
                det-=m.mat[0][i]*determinant_laplace(minor_matrix(m,0,i));
    }
    return det;
}