Я пытаюсь вычислить обратную матрицу в Java.
Я следую сопряженному методу (первый расчет сопряженной матрицы, затем транспонирую эту матрицу и, наконец, умножьте ее на обратное значение детерминанта).
Это работает, когда матрица не слишком велика. Я проверил, что для матриц размером до 12x12 результат быстро предоставляется. Однако, когда матрица больше 12 × 12, время, необходимое для завершения вычисления, увеличивается экспоненциально.
Матрица, которую мне нужно инвертировать, равна 19x19, и это занимает слишком много времени. Метод, который требует больше времени, - это метод, используемый для вычисления детерминанта.
Используемый мной код:
public static double determinant(double[][] input) {
  int rows = nRows(input);        //number of rows in the matrix
  int columns = nColumns(input); //number of columns in the matrix
  double determinant = 0;
  if ((rows== 1) && (columns == 1)) return input[0][0];
  int sign = 1;     
  for (int column = 0; column < columns; column++) {
    double[][] submatrix = getSubmatrix(input, rows, columns,column);
    determinant = determinant + sign*input[0][column]*determinant(submatrix);
    sign*=-1;
  }
  return determinant;
}   
Кто-нибудь знает, как более эффективно вычислить детерминант большой матрицы? Если нет, то кто-нибудь знает, как вычислить обратную сторону большой матрицы, используя другой алгоритм?
Спасибо