Pour inverser une matrice!

Contenu du snippet

c est tout simplement le code pour inverser une matrice (carrée mais est ce la peine de le preciser?) avec le formule théorique, qui à dit qu'elle ne servait à rien?
utile pour ceux qui ont des programmes un tantinet (lol) mathématiques à développer.

Source / Exemple :


/*
 j espere que vous vous rappelez de la formule...
 calcul de l'inverse de M via la formule théorique

  • /
void transp_mat(float ma[max][max],float mb[max][max]) { int i,j; for (i=0;i<max;i++) { for (j=0;j<max;j++) { mb[j][i]=ma[i][j]; } } } void det_aux(float ma[max][max],float mb[max][max],int l,int c) /*calcul du mineur*/ { int i,j,d,e=0; for(i=0;i<max;i++) { d=0; if(i!=l) { for(j=0;j<max;j++) if(j!=c) { mb[e][d]=ma[i][j]; d++; } e++; } } } float expo(int n) /*fonction signe*/ { if(!(n%2)) { return (1); } return (-1); } float determinant(float m[max][max],int l) { int i; float m2[max][max],x=0; if(l==1) { return m[0][0]; } for(i=0;i<l;i++) { det_aux(m,m2,i,0); x=x+(expo(i)*m[i][0]*determinant(m2,(l-1))); } return x; } void multi_R(float a,float ma[max][max],float mb[max][max]) { int i,j; for(i=0;i<max;i++) { for(j=0;j<max;j++) { mb[i][j]=ma[i][j]*a; } } } void coffacteur(float ma[max][max],float mb[max][max],int l) { int i,j; float m2[max][max]; if (l==1) { mb[0][0]=1; } else { for (i=0;i<l;i++) { for (j=0;j<l;j++) { det_aux(ma,m2,i,j); mb[i][j]=expo(i+j)*determinant(m2,(l - 1)); } } } } void inverse(float ma[max][max],float mb[max][max],int l) { float m1[max][max],m2[max][max],d; d=(1/determinant(ma,l)); coffacteur(ma,m1,l); transp_mat(m1,m2); multi_R(d,m2,mb); }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.