-
- /*
- 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);
- }
/*
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);
}