J'essaie de calculer la matrice inverse en Java. Je suis la méthode adjointe (premier calcul de la matrice adjointe, puis transpose cette matrice et finalement la multiplie par l'inverse de la valeur du déterminant).Calcul de matrice inverse Java
Fonctionne lorsque la matrice n'est pas trop grande. J'ai vérifié que pour les matrices jusqu'à une taille de 12x12 le résultat est rapidement fourni. Cependant, lorsque la matrice est plus grande que 12x12, le temps nécessaire pour compléter le calcul augmente exponentiellement.
La matrice que j'ai besoin d'inverser est 19x19, et cela prend trop de temps. La méthode qui consomme le plus de temps est la méthode utilisée pour le calcul du déterminant.
Le code J'utilise est:
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;
}
Quelqu'un sait comment calculer le déterminant d'une grande matrice plus efficace? Sinon, est-ce que quelqu'un sait comment calculer l'inverse d'une grande matrice en utilisant un autre algorithme?
Merci
@duffymo: merci pour votre réponse. Vous avez raison, pas exponentiellement, ce que je veux dire, c'est que de la taille de la matrice 12x12 le temps nécessaire pour calculer le déterminant augmente de façon spectaculaire. J'ai essayé Jama, mais je n'arrive pas à le faire fonctionner (je suis assez nouveau en Java). Je vais aussi regarder dans la décomposition LU. Merci. – dedalo
Non, "exponentiellement" est correct, car votre algorithme est en effet exponentiel, mais duffymo est également correct en ce que l'inversion de la matrice ou le calcul des déterminants ne requièrent pas * le temps exponentiel. – JaakkoK
Merci à tous. J'ai regardé Jama et j'ai trouvé la méthode 'det' dans la classe Matrix qui la calcule rapidement.J'ai aussi trouvé des méthodes pour calculer la matrice L et U (A = L * U) puis det (A) = det (L) * det (U). – dedalo