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; }