Я пытаюсь вычислить обратную матрицу в Java.
Я использую сопряженный метод (сначала вычисляю сопряженную матрицу, затем транспонирую эту матрицу и, наконец, умножаю ее на значение, обратное значению определителя).
Это работает, когда матрица не слишком большая. Проверил, что для матриц размером до 12х12 результат выдается быстро. Однако, когда матрица больше 12x12, время, необходимое для завершения вычисления, увеличивается экспоненциально.
Матрица, которую мне нужно инвертировать, 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;
}
Кто-нибудь знает, как более эффективно вычислить определитель большой матрицы? Если нет, кто-нибудь знает, как вычислить обратную большую матрицу, используя другой алгоритм?
Спасибо