public static void Gauss(double[][] a, double[] b) {
        for (int i = 0; i < a.length; i++) {
            int rowMaxElem = rowMaxElem(a, i);
            if (rowMaxElem == -1) {
                System.out.println("Error!");
                System.exit(1);
            }
            if (rowMaxElem != i)
                exchange(a, b, i, rowMaxElem);		//Находим maxElem столбца и ставим его на главную диагоняль

            double mainElem = a[i][i];			//Опорный элемент

            for (int j = i; j < a[i].length; j++) {
                a[i][j] /= mainElem;		//Пересчитали коэффициенты строки
            }
            b[i] /= mainElem;		//Пересчитали свободный член строки

            for (int z = i + 1; z < a.length; z++) {
                double k = a[z][i];
                for (int x = i; x < a[z].length; x++) {
                    a[z][x] += a[i][x] * (-k);		//Пересчитали коэфициенты до конца строки
                }
                //Пересчитали свободный член
                b[z] += b[i] * (-k);
            }
        }
    }