void main() { float a[10][10]; int i,j,order; printf("\n\nEnter order of matrix :"); scanf("%d",&order); printf("\nEnter the square matrix :\n"); for(i=0;i<order;i++) for(j=0;j<order;j++) scanf("%f",&a[i][j]); printf("Determinent Value :%f\n",detrm(a,order)); }
double detrm( double a[DIM][DIM], double k ) { double s = 1, det = 0, b[DIM][DIM]; int i, j, m, n, c; if ( k == 1 ) { return ( a[ 0 ][ 0 ] ); } else { det = 0; for ( c = 0;c < k;c++ ) { m = 0; n = 0; for ( i = 0;i < k;i++ ) { for ( j = 0;j < k;j++ ) { b[ i ][ j ] = 0; if ( i != 0 && j != c ) { b[ m ][ n ] = a[ i ][ j ]; if ( n < k-2 ) n++; else { n = 0; m++; } } } } det = det + s * ( a[ 0 ][ c ] * detrm( b, k-1 ) ); s = -1 * s; } } return ( det ); }
//--------------------------------------------------------- void CGrid_IMCORR::kvert(std::vector<std::vector<float> >& V) { const int k = (int)V[0].size(); float b[25][25]; for ( int i = 0;i < k;i++ ) { for (int j = 0;j < k;j++ ) { b[ i ][ j ] = V[ i ][ j ]; } } float d = detrm( b, (float)k ); if ( d != 0 ) cofact( b, (float)k, V); return; }
//--------------------------------------------------------- float CGrid_IMCORR::detrm( float a[ 25 ][ 25 ], float k ) { float s = 1, det = 0, b[ 25 ][ 25 ]; int i, j, m, n, c; if ( k == 1 ) { return ( a[ 0 ][ 0 ] ); } else { det = 0; for ( c = 0;c < k;c++ ) { m = 0; n = 0; for ( i = 0;i < k;i++ ) { for ( j = 0;j < k;j++ ) { b[ i ][ j ] = 0; if ( i != 0 && j != c ) { b[ m ][ n ] = a[ i ][ j ]; if ( n < ( k-2 ) ) n++; else { n = 0; m++; } } } } det = det + s * ( a[ 0 ][ c ] * detrm( b, k-1 ) ); s = -1 * s; } } return ( det ); }
//--------------------------------------------------------- void CGrid_IMCORR::cofact( float num[ 25 ][ 25 ], float f, std::vector<std::vector<float> >& INV ) { float b[ 25 ][ 25 ], fac[ 25 ][ 25 ]; int p, q, m, n, i, j; for ( q = 0;q < f;q++ ) { for ( p = 0;p < f;p++ ) { m = 0; n = 0; for ( i = 0;i < f;i++ ) { for ( j = 0;j < f;j++ ) { b[ i ][ j ] = 0; if ( i != q && j != p ) { b[ m ][ n ] = num[ i ][ j ]; if ( n < ( f-2.0 ) ) n++; else { n = 0; m++; } } } } fac[ q ][ p ] = (float)(pow( -1.0, (q + p) ) * detrm( b, (f-1) )); } } trans( num, fac, f, INV ); return; }
//--------------------------------------------------------- void CGrid_IMCORR::trans( float num[ 25 ][ 25 ], float fac[ 25 ][ 25 ], float r , std::vector<std::vector<float> >& INV) { int i, j; float b[ 25 ][ 25 ], inv[ 25 ][ 25 ], d; for ( i = 0;i < r;i++ ) { for ( j = 0;j < r;j++ ) { b[ i ][ j ] = fac[ j ][ i ]; } } d = detrm( num, r ); inv[ i ][ j ] = 0; for ( i = 0;i < r;i++ ) { for ( j = 0;j < r;j++ ) { inv[ i ][ j ] = b[ i ][ j ] / d; } } INV.resize((int)r); for (int ii = 0; ii < r; ii++) { INV[ii].resize((int)r); } for ( i = 0;i < r;i++ ) { for ( j = 0;j < r;j++ ) { INV[ i ][ j ] = inv[ i ][ j ]; } } return; }
float detrm(float a[10][10],int n) { float b[10][10],sum=0; int i,j,k,x,u=1; if(n==1) return a[0][0]; for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { x=0; for(k=0;k<n-1;k++) { if(k==i) x++; b[j][k]=a[j+1][x+k]; } } sum+=u*a[0][i]*detrm(b,n-1); u*=-1; } return sum; }