Я пытаюсь вычислить обратную матрицу в 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;
}
Кто-нибудь знает, как более эффективно вычислить детерминант большой матрицы? Если нет, то кто-нибудь знает, как вычислить обратную сторону большой матрицы, используя другой алгоритм?
Спасибо