// Determine the reduce of the Matrix public Matrix reduce() { Matrix reduced = new Matrix(this); int lead = 0; for (int row = 0; row < reduced.getH(); row++) { if (reduced.getW() <= lead) break; int i = row; while (reduced[lead, i] == 0) { i++; if (i == reduced.getH()) { i = row; lead++; if (lead == reduced.getW()) return reduced; } } reduced.SwapRows(i, row); float divFactor = reduced[lead, row]; for (int k = 0; k < reduced.getW(); k++) { reduced[k, row] = reduced[k, row] / divFactor; } for (int j = 0; j < reduced.getH(); j++) { if (j == row) continue; float factor = reduced[lead, j]; for (int k = 0; k < reduced.getW(); k++) { reduced[k, j] = reduced[k, j] - reduced[k, row] * factor; } } } return reduced; }