Resolution système linéaire => matrice inv

Fermé
Rvouille Messages postés 1 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 13 décembre 2004 - 13 déc. 2004 à 15:33
 doudou - 9 avril 2010 à 15:13
Bonjour,
Je suis actuellement en galère sur un programme et je demande donc aux bonnes âmes de me donner un petit coup de pouce si c'est dans le moyen bien sur (ne vous tuez pas à la tache pour moi quand meme!!) !!! En effet je ssouhaite réaliser un programme permettant d'inverser une matrice 3x3 ceci dans le but de résoudre un système linéaire. Si quelqu'un peut m'aider ce serai vraiment sympa

Merci d'avance.

Have a RideStyle

4 réponses

khjgif
4
salut à tous, voici un programme crée par mes soins pour une résolution de système linéaire, avec matrice carrée de dimension n*n, voila, c un programme langage C....
il vous faudra juste créer un fichier mat.txt et vect.txt pour rentrer vos valeurs de matrice voilà
peut etre que ca aidera quelqun

#include<stdio.h>
#define max 500

main()
{
int i,j, k, g, dim;
float inten[max];
float pivot, det, somme, somme_gauss, intenstot, Requiv;
float init_mat[max][max], gauss_mat[max][max], vecteur[max], vect_gauss[max];

//----------initialisation matrice----------------------

FILE *mat, *vect;
mat=fopen("mat.txt", "r");
vect=fopen("vect.txt", "r");

printf("\ndimension de la matrice: ");
scanf("%d", &dim);


for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{
fscanf(mat, "%f", &init_mat[i][j]);
}fscanf(vect, "%f", &vecteur[i]);
}

printf("\n------ matrice initiale ---------\n\n");
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
if (j==dim) {init_mat[i][j]=vecteur[i];printf("|\t%.3f\n", init_mat[i][j]);}
else printf("%.3f\t", init_mat[i][j]);

}
//printf("|\t%.2f\n", vecteur[i]);
}
//----------initialisation matrice transformee ----------------------
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
gauss_mat[i][j]=init_mat[i][j];
if (j==dim) gauss_mat[i][j]=vecteur[i];
}//vect_gauss[i]=vecteur[i];
}
//------------- elimination de gauss --------------------
printf("\n");
for (k=1; k<dim; k++)
{ gauss_mat[k-1][k-1]=init_mat[k-1][k-1];
if (gauss_mat[k-1][k-1]==0)
{
for(i=k; i<dim; i++)
{ if (gauss_mat[k-1][k-1]==0)
{
if (init_mat[i][k-1]!=gauss_mat[k-1][k-1])
{
for(j=0; j<=dim; j++)
{
gauss_mat[k-1][j]=init_mat[i][j];
gauss_mat[i][j]=init_mat[k-1][j];
init_mat[i][j]=gauss_mat[i][j];
init_mat[k-1][j]=gauss_mat[k-1][j];
}
}
}
}
}
if (gauss_mat[k-1][k-1]!=0)
{
for(i=k;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
pivot=-init_mat[i][k-1]/init_mat[k-1][k-1];
gauss_mat[i][j]=((pivot)*init_mat[k-1][j])+init_mat[i][j];

//if (j==dim) vect_gauss[i]=(pivot*vecteur[i-1])+vecteur[i];
}
}
if (k<dim-1)
{
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
init_mat[i][j]=gauss_mat[i][j];
}
}//vecteur[i]=vect_gauss[i];
}
}
}
printf("\n------ matrice transformee ---------\n\n");
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
if (j==dim) printf("|\t%.3f\n", gauss_mat[i][j]);
else printf("%.3f\t", gauss_mat[i][j]);

}

}

//----------- Resolution systeme d'équation ----------------------

for (i=dim-1; i>=0; i--)
{somme=0.0;
for (j=i; j<dim; j++)
{
if (i<dim-1)
{
if (j==i) somme=somme;
else
{
somme_gauss=(gauss_mat[i][j]*inten[j])+somme;
somme=somme_gauss;
}
}
}
if (i==dim-1) inten[i]=gauss_mat[i][dim]/gauss_mat[i][i];
inten[i]=(gauss_mat[i][dim]-somme)/gauss_mat[i][i];

}
for (i=0; i<dim; i++)
{
printf("\nX%d: %.3f", i+1, inten[i]);
}


getchar();
getchar();
}
0
salut à tous, voici un programme crée par mes soins pour une résolution de système linéaire, avec matrice carrée de dimension n*n, voila, c un programme langage C....
il vous faudra juste créer un fichier mat.txt et vect.txt pour rentrer vos valeurs de matrice voilà
peut etre que ca aidera quelqun

#include<stdio.h>
#define max 500

main()
{
int i,j, k, g, dim;
float inten[max];
float pivot, det, somme, somme_gauss, intenstot, Requiv;
float init_mat[max][max], gauss_mat[max][max], vecteur[max], vect_gauss[max];

//----------initialisation matrice----------------------

FILE *mat, *vect;
mat=fopen("mat.txt", "r");
vect=fopen("vect.txt", "r");

printf("\ndimension de la matrice: ");
scanf("%d", &dim);


for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{
fscanf(mat, "%f", &init_mat[i][j]);
}fscanf(vect, "%f", &vecteur[i]);
}

printf("\n------ matrice initiale ---------\n\n");
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
if (j==dim) {init_mat[i][j]=vecteur[i];printf("|\t%.3f\n", init_mat[i][j]);}
else printf("%.3f\t", init_mat[i][j]);

}
//printf("|\t%.2f\n", vecteur[i]);
}
//----------initialisation matrice transformee ----------------------
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
gauss_mat[i][j]=init_mat[i][j];
if (j==dim) gauss_mat[i][j]=vecteur[i];
}//vect_gauss[i]=vecteur[i];
}
//------------- elimination de gauss --------------------
printf("\n");
for (k=1; k<dim; k++)
{ gauss_mat[k-1][k-1]=init_mat[k-1][k-1];
if (gauss_mat[k-1][k-1]==0)
{
for(i=k; i<dim; i++)
{ if (gauss_mat[k-1][k-1]==0)
{
if (init_mat[i][k-1]!=gauss_mat[k-1][k-1])
{
for(j=0; j<=dim; j++)
{
gauss_mat[k-1][j]=init_mat[i][j];
gauss_mat[i][j]=init_mat[k-1][j];
init_mat[i][j]=gauss_mat[i][j];
init_mat[k-1][j]=gauss_mat[k-1][j];
}
}
}
}
}
if (gauss_mat[k-1][k-1]!=0)
{
for(i=k;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
pivot=-init_mat[i][k-1]/init_mat[k-1][k-1];
gauss_mat[i][j]=((pivot)*init_mat[k-1][j])+init_mat[i][j];

//if (j==dim) vect_gauss[i]=(pivot*vecteur[i-1])+vecteur[i];
}
}
if (k<dim-1)
{
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
init_mat[i][j]=gauss_mat[i][j];
}
}//vecteur[i]=vect_gauss[i];
}
}
}
printf("\n------ matrice transformee ---------\n\n");
for(i=0;i<dim;i++)
{
for(j=0;j<=dim;j++)
{
if (j==dim) printf("|\t%.3f\n", gauss_mat[i][j]);
else printf("%.3f\t", gauss_mat[i][j]);

}

}

//----------- Resolution systeme d'équation ----------------------

for (i=dim-1; i>=0; i--)
{somme=0.0;
for (j=i; j<dim; j++)
{
if (i<dim-1)
{
if (j==i) somme=somme;
else
{
somme_gauss=(gauss_mat[i][j]*inten[j])+somme;
somme=somme_gauss;
}
}
}
if (i==dim-1) inten[i]=gauss_mat[i][dim]/gauss_mat[i][i];
inten[i]=(gauss_mat[i][dim]-somme)/gauss_mat[i][i];

}
for (i=0; i<dim; i++)
{
printf("\nX%d: %.3f", i+1, inten[i]);
}


getchar();
getchar();
}
0
salut
si c'est une équation de la forme AX=B avec avec A et B des matrices
sur matlab tu peux utiliser la fonction linsolve
par exemple : resoudre AX=B
X=linsolve(A,B) et tu auras la solution.
coordialement.
1
Salut,

tu veux le faire avec un langage particulier ton programme?
Si t'as pas de préférence et que tu peux, utilises Matlab, il y a une fonction prédéfinie qui le fait.

A bon entendeur,

Tchussy
0
Bonjour,
je souhaite avoir une méthode de résolution standard des matrices 4x4
0