/* invert.c basic Gausian elimination version */ #include #include #include #define abs(a) ((a)<0?(-(a)):(a)) void invert(int n, double AA[]) { int *ROW, *COL; double *TEMP; int HOLD , I_pivot , J_pivot; double pivot, abs_pivot; int i, j, k; ROW = (int *)calloc(n, sizeof(int)); COL = (int *)calloc(n, sizeof(int)); TEMP = (double *)calloc(n, sizeof(double)); /* set up row and column interchange vectors */ for (k=0; k abs_pivot ) { I_pivot = i ; J_pivot = j ; pivot = AA[ROW[i]*n+COL[j]] ; } } } if(abs(pivot) < 1.0E-65) { free(ROW); free(COL); free(TEMP); printf("MATRIX is SINGULAR !!! \n"); return; } HOLD = ROW[k]; ROW[k]= ROW[I_pivot]; ROW[I_pivot] = HOLD ; HOLD = COL[k]; COL[k]= COL[J_pivot]; COL[J_pivot] = HOLD ; /* reduce about pivot */ AA[ROW[k]*n+COL[k]] = 1.0 / pivot ; for (j=0; j