j'ai fais un programme sur devc++ pour resoudre l'equation matricielle : A*X=B , je vois pas ou est elle euruer ?
est ce que vous pouvez aidez SVP,
voila le programme
/* ========================================================================== */
/* Gauss pivot pariel et total */
/* ========================================================================== */
#include<iostream.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include<windows.h>
int i,j,k;
int n;
float a[19][19],b[19];
char valider;
// fonction de remplissage
void remplissage(void)
{
// entrer le système
printf("\n\n * Nombre d'equation-inconues : \n\n N= ");scanf("%d",&n);
printf("\n * La matrice A:\n\n");
for (i=0;i<n;i++)
{printf(" Equation %d : ",i+1);for (j=0;j<n;j++) scanf("%f",&a[i][j]);}
printf("\n * Le vecteur B:\n\n");
for(i=0;i<n;i++)
{printf(" Equation %d : ",i+1);scanf("%f",&b[i]);}
}
// fonction d'affichage matrice
void affichage_mat(float a[19][19],int n)
{
for (i=0;i<n;i++)
{
printf(" [");
for (j=0;j<n;j++)
{
printf(" %.4f ",a[i][j]);
}
printf("]\n");
}
}
// fonction d'affichage système
void affichage(float a[19][19],float b[19],int n)
{
for (i=0;i<n;i++)
{
printf(" [");
for (j=0;j<n;j++)
{
printf(" %.4f ",a[i][j]);
}
printf("] [ %.4f ]",b[i]);
printf("\n");
}
}
// -------------------------------------------------------------
// Résolution Par Gauss pivot pariel
// -------------------------------------------------------------
/*
void gauss_pivot_partiel(float a[19][19],float b[19],int n)
{
float x[19],p,eps=1e-6,ref,pivot;int ligne;
for(k=0;k<n-1;k++)
{
// max pour le pivot partiel
ref=0;
for(i=k;i<n;i++) if(fabs(a[i][k])>ref) {ref=fabs(a[i][k]);ligne=i;}
// pivotations
for(j=k;j<n;j++)
{pivot=a[k][j]; a[k][j]=a[ligne][j] ;a[ligne][j]=pivot; }
pivot=b[k]; b[k]=b[ligne]; b[ligne]=pivot;
for(i=k+1;i<n;i++)
{
p=a[i][k]/a[k][k];
for (j=k;j<n;j++)
{
a[i][j]=a[i][j]-p*a[k][j];
if (fabs(a[i][j])<eps)
a[i][j]=0;
}
b[i]=b[i]-p*b[k];
if(fabs(b[i])<eps)
b[i]=0;
}
}
float s=0;
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
s=0;
}
printf("\n-------- Gauss avec pivot partiel --------\n");
printf("\n * La triangularisation avec les pivotations partielles :\n\n");
affichage(a,b,n);
printf("\n * La resolution donne :\n\n");
for (i=0;i<n;i++)
printf(" X_%d = %f ;\n",i+1,x[i]);
printf("\n");
}
*/
// -------------------------------------------------------------
// Résolution Par Gauss pivot total
// -------------------------------------------------------------
void gauss_pivot_total(float a[19][19],float b[19],int n)
{
float x[19],p,eps=1e-6,ref,pivot;
int ligne,colonne,pivot_sol[19],sol;
// vecteur de pivotation des solutions
for(i=0;i<n;i++) pivot_sol[i]=i;
for(k=0;k<n-1;k++)
{
// max pour le pivot total
ref=0;
for(i=k;i<n;i++)
for (j=k;j<n;j++)
if((a[i][j])>ref) {ref=(a[i][j]);ligne=i;colonne=j;}
// pivotations
for(j=k;j<n;j++)
{pivot=a[k][j]; a[k][j]=a[ligne][j] ;a[ligne][j]=pivot;}
pivot=b[k]; b[k]=b[ligne]; b[ligne]=pivot;
for(i=0;i<n;i++)
{pivot=a[i][k]; a[i][k]=a[i][colonne] ;a[i][colonne]=pivot;}
// remplissage du vecteur accordé aux pivotations
//algo forme triangulaire d'un systeme lecointe
{
sol=pivot_sol[k];
pivot_sol[k]=pivot_sol[colonne];
pivot_sol[colonne]=sol;
}
for(i=k+1;i<n;i++)
{
p=a[i][k]/a[k][k];
for (j=k;j<n;j++)
{
a[i][j]=a[i][j]-p*a[k][j];
if (fabs(a[i][j])<eps)
a[i][j]=0;
}
b[i]=b[i]-p*b[k];
if(fabs(b[i])<eps)
b[i]=0;
}
}
float s=0;
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
s=s+a[i][j]*b[j];
b[i]=(b[i]-s)/a[i][i];
//s=0; ????
}
// pivotation des solutions
for(i=0;i<n;i++)
{
x[pivot_sol[i]]=b[i];
}
printf("\n--------- Gauss avec pivot total ---------\n");
printf("\n * La triangularisation avec les pivotations totales :\n\n");
affichage(a,b,n);
printf("\n * La resolution donne :\n\n");
for (i=0;i<n;i++)
printf(" X_%d = %f ;\n",i+1,x[i]);
printf("\n");
}
/*void choix_de_la_methode()
{
printf("\n-----------------------------------------------\n");
printf("\n * Resolution de A x = B :\n");
printf("\n * Choix de la methode:\n");
printf(" 1 => Gauss pivot partiel \n");
printf(" 2 => Gauss pivot total \n");
printf("\n-- 3 => Quitter ------------------\n");
reprendre_choix:
printf("\n------ => donner votre choix ------ : ");
scanf("%s",&valider);
switch(valider)
{
case '1' : remplissage();printf("\n\n* Le systeme est :\n\n");
affichage(a,b,n);gauss_pivot_partiel(a,b,n);break;
case '2' : remplissage();printf("\n\n* Le systeme est :\n\n");
affichage(a,b,n);gauss_pivot_total(a,b,n);break;
default : goto reprendre_choix;
}
}
*/
int main()
{
void remplissage(void);
void affichage_mat(float a[19][19],int n);
void affichage(float a[19][19],float b[19],int n);
void gauss_pivot_total(float a[19][19],float b[19],int n);
system("PAUSE");
}