public Matrix _inverseSide() {
		/**
		 * If the matrix has been augmented, solve so that the unaugmented
		 * portion is an identity matrix. Currently appears to be unable to
		 * handle zero entries - quite a problem if you ask me!
		 */
		if (augmented != null && rows == cols) {
			Matrix matrix = duplicate();
			for (int i = 0; i < cols; i++) {
				matrix.print();
				// Find largest value in column, then move that value to the top
				// row.
				int largest = 0;
				float largestVal = -1;
				for (int j = i; j < rows; j++) {
					float val = Math.abs(matrix.get(j, i));
					if (val > largest) {
						largestVal = val;
						largest = j;
					}
				}
				if (largestVal == 0) {
					return null; // Quit if col is all zeros.
				}
				if (largest != 0) {
					matrix.flipRowsAug(i, largest);
				}
				scaleRowAug(i, 1 / get(i, i));
				for (int j = 0; j < rows; j++) {
					if (j != i) {
						float scaleVal = matrix.get(j, i);
						// Use i because matrix is square.
						// Scale row, add to next row, then scale back. This can
						// definitely be done faster.
						matrix.scaleRowAug(i, -scaleVal);
						matrix.addRowsAug(j, i);
						matrix.scaleRowAug(i, -1 / scaleVal);
					}
				}
				// Matrix is now upper triangle. Use backwards substitution to
				// solve the rest.

			}
			return matrix;
		} else {
			return null;
		}
	}