public class MathTools { public static double[] GaussianElim(double[][] A, double[] b) { int n = b.length; // # variables double pivot, factor; int i, j, k; /* ----------------------------- Gaussian elimination method ----------------------------- */ for (i = 0; i < n; i++) { // Process row i /* --------------------- (A) Select pivot --------------------- */ pivot = A[i][i]; /* --------------------- (B) Normalize row i --------------------- */ for (j = 0; j < n; j++) A[i][j] = A[i][j]/pivot; b[i] = b[i]/pivot; /* --------------------- (C) Sweep using row i --------------------- */ for (k = 0; k < n; k++) { if ( k != i ) { factor = A[k][i]; for (j = 0; j < n; j++) A[k][j] = A[k][j] - factor*A[i][j]; b[k] = b[k] - factor*b[i]; } } } return(b); // The answer is in double[] b } }