L'inverse d'une matrice en langage C

Fermé
mpiaya Messages postés 3 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 10 juillet 2013 - 5 juil. 2013 à 19:47
mpiaya Messages postés 3 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 10 juillet 2013 - 8 juil. 2013 à 18:19
Bonjour les amis, SVP y'a il quelqu'un qui peut me traduire cette fonction en C car je cherche la fonction qui calcul l'inverse d'une matrice en C mais je l'ai trouvé en Matlab alors que moi je ne métrise pas ce dernier, merci beaucoup d'avance.

*************************************************************************
determinant=0;

if size(M,1)==1
determinant = M;
else
for p=1:size(M,1)
Mm=M;
Mm(:,1)=[];
Mm(p,:)=[];
determinant = determinant + (-1)^(p+1)*M(p,1)*calcul_determinant(Mm);
end
end

***************************************************************************

function inverse = calcul_inverse(M)

inverse=zeros(size(M,1));

for p=1:size(M,1)
for q=1:size(M,1)
Mm=M;
Mm(p,:)=[];
Mm(:,q)=[];
inverse(p,q) = (-1)^(p+q)*calcul_determinant(Mm);
end
end

inverse = inverse.'/calcul_determinant(M);

****************************************************************************

2 réponses

js95 Messages postés 773 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 29 juillet 2014 353
6 juil. 2013 à 20:17
Matlab travaille directement avec des variables matrices, ce qu'il faut implémenter à la main avec des pointeurs. C'est long à faire, en revanche t'expliquer ce que fait le code Matlab est plus rapide :
function inverse = calcul_inverse(M) //  M est la matrice passée en paramètre
// et c'est la variable inverse qui est renvoyée par la fonction Matlab à la fin de la fonction

inverse=zeros(size(M,1));
// size(M,1) renvoie le nombre de lignes de la matrice M
//  size(M,2) renverrait  le nombre de colonnes de la matrice M
// zeros(N) renvoie la matrice nulle carrée NxN

for p=1:size(M,1) // p va de 1 au nombre de lignes de M
     for q=1:size(M,1) // p va de 1 au nombre de lignes de M
// attention ce code ne marche que pour une matrice carrée sinon on ferait  for q=1:size(M,2)
          Mm=M; // copie de la matrice M (toute une procédure en C)
          Mm(p,:)=[]; // suppression de la p-ième ligne de la matrice Mm
          Mm(:,q)=[]; // suppression de la q-ième colonne de la matrice Mm
          inverse(p,q) = (-1)^(p+q)*calcul_determinant(Mm);
          // dans la case à la p-ième ligne et la q-ième colonne on calcule et on range le coefficient
     end
end

inverse = inverse.'/calcul_determinant(M);


Explication de la sélection des cases des matrices :
Mm(_,_)
avant la virgule on sélectionne les lignes, après la virgule on sélectionne les colonnes
exemple:
2:4 -> de la 2e à la 4e (ligne ou colonne selon si c'est à gauche ou à droite de la virgule)
: -> toutes (les lignes ou les colonnes selon si c'est à gauche ou à droite de la virgule)

Le code situé avant la fonction inverse dans ton post présente le calcul de déterminant
1