Resolution système linéaire => matrice inv
Rvouille
Messages postés
1
Statut
Membre
-
doudou -
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
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
A voir également:
- Resolution système linéaire => matrice inv
- Restauration systeme windows 10 - Guide
- Vérificateur des fichiers système - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Réduire résolution image - Guide
- Systeme binaire - Guide
4 réponses
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.
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.
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();
}
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();
}