fredy1000
Messages postés
2
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
23 janvier 2009
23 janv. 2009 à 17:32
Slt la methode est bien écrite mais je dois modifier mon programme(resolution de Ax=b) en intégrant cette methode afin de résoudre le système.
Je dois ajouté une ligne de code pour pour faire varier le dégré d'un polynôme (que l'utilisateur dois saisir).
Je dois faire les lignes et les colonnes de ma matrice de 0 à p.
je ne sais pas si j'ai bien expliqué le pb.
En tout cas merci.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float norme(float x[19],int n)
{
float ref;int i;
ref=0;
for(i=0;i<n;i++) if (x[i]>ref) ref=x[i];
return(ref);
}
// fonction de remplissage
void remplissage(float a[19][19],float b[19],int n)
{
int i,j;
printf("\n Donner la matrice A:\n\n");
for (i=0;i<n;i++)
{
printf(" [\n ");
for (j=0;j<n;j++) scanf("%f",&a[i][j]);
}
printf("|");
printf("\n Donner Le vecteur B:\n\n");
for(i=0;i<n;i++)
{
printf(" ] ");
scanf("%f",&b[i]);
}
}
// fonction d'affichage systeme
void aff_syst(float a[19][19],float b[19],int n)
{
int i,j;
printf("\n\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");
}
}
// fonction d'affichage matrice
void aff_mat(float a[19][19],int n)
{
int i,j;
printf("\n\n");
for (i=0;i<n;i++)
{
printf(" [");
for (j=0;j<n;j++)
{
printf(" %.4f ",a[i][j]);
}
printf("]\n");
}
}
// Mettre à Zero les elements qui doivent etre des zero
void zero(float a[19][19],float b[19],int n)
{
int i,j;float eps=1e-4;
for(i=0;i<n;i++)
{
for (j=0;j<n;j++) if (fabs(a[i][j])<eps) a[i][j]=0;
if (fabs(b[i])<eps) b[i]=0;
}
}
void comatrices(float a[19][19],float c[19][19],int i,int j,int n)
{
int l,k;
for(l=0;l<n;l++) for(k=0;k<n;k++)
{
if ((li)&&(k<j)) c[l-1][k]=a[l][k];
if ((lj)) c[l][k-1]=a[l][k];
if ((l>i)&&(k>j)) c[l-1][k-1]=a[l][k];
}
}
// calcul du determinant
float det(float a[19][19],int n)
{
int k,j;float c[19][19],s;
k=n-1;
if(n==0) return(1);
s=0;
for(j=0;j<n;j++)
{
comatrices(a,c,k,j,n);
s=s+pow(-1,k+j)*a[k][j]*det(c,k);
}
return(s);
}
void gauss_pivot_partiel(float a[19][19],float b[19],int n)
{
float x[19],p,s,ref,temp;int i,j,k,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++)
{temp=a[k][j]; a[k][j]=a[ligne][j] ;a[ligne][j]=temp;}
temp=b[k]; b[k]=b[ligne]; b[ligne]=temp;
if (a[k][k]==0)
{
printf("\n\n* Un pivot nul ! => methode de Gauss pivot partiel non applicable\n\n");
}
//réduction
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];
b[i]=b[i]-p*b[k];
}
}
//Résolution
for(i=n-1;i>=0;i--)
{
s=0;
for(j=i+1;j<n;j++) s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
}
zero(a,b,n);
printf("\n-------- Gauss avec pivot partiel --------\n");
printf("\n * La matrice reduite :");
aff_syst(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");
}
main()
{
float a[19][19],b[19];int n,i,j; char valider;
printf(" * Resolution de A x = B *\n");
printf(" * Gauss pivot partiel *\n");
printf("\n\n * Nombre d'equation-inconues : \n\n * N = ");
scanf("%d",&n);
remplissage(a,b,n);
printf("\n\n * Le systeme est : ");
aff_syst(a,b,n);
gauss_pivot_partiel(a,b,n);
system ("pause");
printf("\n");
}