Resolution système linéaire => matrice inv

Rvouille Messages postés 1 Statut Membre -  
 doudou -
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

l
 
khjgif
4
rpgff1
 
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
rpgff1
 
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
doudou
 
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
Mattiou
 
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
meky
 
Bonjour,
je souhaite avoir une méthode de résolution standard des matrices 4x4
0