Gauss-jordan sur des matrices carrés

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 999 fois - Téléchargée 31 fois

Contenu du snippet

Ce code vous permettra de résoudre des systemes linéaires (avec une matrice carré) de type A.X=b à l'aide de la méthode de GAUSS-JORDAN.

Source / Exemple :

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <process.h>
#include <stdlib.h>

void saisie_mat(float m[100][100],int,int);
void affich_mat(float m[100][100],int l,int c);
void gauss_jordan(float m1[100][100],float m2[100][100],int l,int c);
void affich_systeme(float m1[100][100],float m2[100][100],int l,int c);
void copie_mat(float m[100][100],float m1[100][100],int l,int c);
void identite_mat(float m[100][100],int l);



void main()
{
	int a,b;
	int e,f;
	float mat[100][100],mat1[100][100];

	system ("cls");
	system ("color 3f");

	printf(" ===> Saisissez votre matrice carree A : \n\n");
	printf("Combien de lignes : ");
	scanf("%d",&a);

	printf("Combien de colonnes : ");
	scanf("%d",&b);
	
	saisie_mat(mat,a,b);

	printf("\n\n");

	printf(" ===> Saisissez votre matrice B : \n\n");
	printf("Combien de lignes : ");
	scanf("%d",&e);
	printf("Comien de colonnes : ");
	scanf("%d",&f);	

	saisie_mat(mat1,e,f);
	
	printf("\n\n");
		
	affich_systeme(mat,mat1,a,b);

	printf("\n\n");

	gauss_jordan(mat,mat1,a,b);

	printf("\n\n");

	affich_systeme(mat,mat1,a,b);



}
	



void saisie_mat(float m[100][100],int l,int c)
{ int i,j;
  
  for(i=0;i<l;i++)
  {
    for(j=0;j<c;j++)
	{
		printf("  A[%d][%d] : ",i+1,j+1);
		scanf("%f",&m[i][j]);
	}
     printf("\n");
  }
}



void affich_systeme(float m1[100][100],float m2[100][100],int l, int c)
{
	int i,j;
	printf(" ===>Affichage du systeme lineaire : \n\n\n");
	
	for(i=0;i<l;i++)
	{
		printf("  (");
		for(j=0;j<c;j++)
		{
			printf("  %.2f  ",m1[i][j]);
		}
		printf(" )    (X%d)   =",i+1);
		printf("\t%.2f",m2[i][0]);
		printf("\n\n");
	}
}


void gauss_jordan(float m1[100][100],float m2[100][100],int l,int c)
{
	int i;
	int j;
	float tmp,tmp2;
	float m3[100][100];
	float m4[100][100];
	float m5[100][100];
	float m6[100][100];
	int k=0;
	identite_mat(m4,l);
	affich_mat(m4,l,l);

	for(i=0;i<l;i++)
	{
		copie_mat(m1,m3,l,c);
		copie_mat(m2,m5,l,1);
		copie_mat(m4,m6,l,l);
		tmp=m1[i][i];
		for(j=0;j<c;j++)
		{
			m1[i][j]=m1[i][j]/tmp;
			m2[i][j]=m2[i][j]/tmp;
			m4[i][j]=m4[i][j]/tmp;
		}
		
		for(k=0;k<l;k++)
		{
			if(k!=i)
			{
				tmp2=m1[k][i]/tmp;
				for(j=0;j<c;j++)
				{
					m1[k][j]=m1[k][j]-tmp2*m3[i][j];
					m4[k][j]=m4[k][j]-tmp2*m4[i][j];
					m2[k][j]=m2[k][j]-tmp2*m5[i][j];
				}
			}
							
		}
		affich_systeme(m1,m2,l,c);
		printf("\n\n\n");
		printf(" ===> Matrice Inverse :");
		affich_mat(m4,l,c);
	}
}



	
	
	
	
void affich_mat(float m[100][100],int l,int c)
{
	int i,j;
	printf("  Affichage de la matrice  \n\n\n");
	for(i=0;i<l;i++)
	{
		for(j=0;j<c;j++)
		{
			printf("\t%.2f",m[i][j]);
		}
		printf("\n\n");
	}
}


void copie_mat(float m[100][100],float m1[100][100],int l,int c)
{
	int i,j;
	for(i=0;i<l;i++)
	{
		for(j=0;j<c;j++)
		{
			m1[i][j]=m[i][j];
		}
	}
}



void identite_mat(float m[100][100],int l)
{
	int i,j;
	for(i=0;i<l;i++)
	{
		for(j=0;j<l;j++)
		{
			m[i][j]=0;
		}
		m[i][i]=1;
	}
}

Conclusion :

Ben d'abord faut saisir la matrice A, qui est censée etre carré, alors faut mettre le même nombre de lignes et de colonnes, si j'dis ca c'est parce que y en a qui vont me dire que j'aurias pu utilisé que un seul "int" mais j'avais pas le temps d'y penser quand je l'ai fait. Ensuite saisissez la matrice b, c'est une matrice colonne dans la plupart des cas alors voilà. Après ca resoud le systeme, et aussi ca calcul l'inverse de la matrice A, mais jcrois que c pas bon ce calcul et j'ai pas encore eu le temps de voir ce qui y allait pas, c pour ca que j'ai pas mis en avant le calcul de l'inverse dans le résumé du code.
Voili voilou
DSL pour le langage SMS

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.