Programmation c

fredy1000 Messages postés 2 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 23 janvier 2009 - 23 janv. 2009 à 16:23
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 janv. 2009 à 17:39
Bonjour,

je dois programmer l'algorithme de la méthode des moindres carrés  sur l'approximation d'un polynôme du second ordre

merci de bien vouloir m'aider le plutot possible

merci d'avance

3 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 janv. 2009 à 17:18
salut

sur quoi tu bloques exactement ?

la methode est decrite sur wikipedia si mes souvenirs sont bons.
0
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");
}
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
23 janv. 2009 à 17:39
tu as envoye ton programme sans expliquer pourquoi il ne marche pas, mais je ne suis pas voyant...
0