LAGRANGE POLYNOMIAL INTERPOLATION DANS LE PROGRAMME C

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 - 17 nov. 2009 à 07:20
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 - 17 nov. 2009 à 09:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50861-lagrange-polynomial-interpolation-dans-le-programme-c

pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
17 nov. 2009 à 09:48
C'est presque pareil. Il y a en plus l'allocation dynamique des tableaux selon le nombre de points à interpoler.
Lagrange est un très grand mathématicien français :
http://fr.wikipedia.org/wiki/Joseph-Louis_Lagrange
Cela vaut la peine d'écrire son nom comme il faut avec un L en majuscule ( et de corriger le reste aussi). pgl10.
bayans Messages postés 14 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 2 décembre 2012
17 nov. 2009 à 08:50
Merci beaucoup il marche. Au fait j'ai trouve un code sur le net que j'ai du mal a comprendre si vous pouvez m'aider a le comprendre ce serai gentil.C'est egalement au sujet de lagrange polynomial interpolation dans c langage.

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int i,j,n;
float *x,*y,*L,l1,l2,LN=0,xI,t;
printf("How many group numbers (n=1)? \n");
printf(" n=");
scanf("%d",&n);
x=(float *)malloc(n*sizeof(float)); /* dynamic input x 1, 2 x x of the value of the n*/
printf("Please input the x-value \n x[i]: ");
for(i=0;i<n;i++)
scanf("%f,",&x[i]);

y=(float *)malloc(n*sizeof(float)); /* dynamic input y 1, 2 y..... n y value */
printf("Please input the y-value \n y[i]: ");
for(i=0;i<n;i++)
scanf("%f,",&y[i]);

L=(float *)malloc(n*sizeof(float)); /* dynamic records interpolation Base functions, l. i (j) x) */

printf("Plaease input the I-point value \n xI="); /* xI is the required interpolation. */
scanf("%f,",&xI);

for(i=0;i<n;i++)
{
t=x[i];
for(j=0,l1=1,l2=1;j<i;j++)
{
l1 *=(xI-x[j]);l2 *=(t-x[j]);
}

for(j=i+1;j<n;j++)
{
l1*=(xI-x[j]);l2 *=(t-x[j]);
} //l_i(x_j)

L[i]=l1/l2; //l_i(x_j)

}

for(i=0;i<n;i++)
LN+=L[i]*y[i]; /* calculation La Grange, a number of type */

printf("The result of Lagrange-I is: %f\n",LN);
scanf("%f", &LN);
getchar();

}
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
17 nov. 2009 à 07:47
On peut faire quelquechose qui ressemble à :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float x[5],y[5],xin, fx, Lg;;
int n,i,j;
n=5;
printf("\nEntrer la valeur de x0 : ");
scanf("%f", &x[0]);
printf("\nEntrer la valeur de x1 : ");
scanf("%f", &x[1]);
printf("\nEntrer la valeur de x2 : ");
scanf("%f", &x[2]);
printf("\nEntrer la valeur de x3 : ");
scanf("%f", &x[3]);
printf("\nEntrer la valeur de x4 : ");
scanf("%f", &x[4]);
printf("\nEntrer la valeur de y0 : ");
scanf("%f", &y[0]);
printf("\nEntrer la valeur de y1 : ");
scanf("%f", &y[1]);
printf("\nEntrer la valeur de y2 : ");
scanf("%f", &y[2]);
printf("\nEntrer la valeur de y3 : ");
scanf("%f", &y[3]);
printf("\nEntrer la valeur de y4 : ");
scanf("%f", &y[4]);
printf("\nEntrer la valeur de xin : ");
scanf("%f", &xin);
fx=0.0;
for (i=0;i<n;i++){
Lg = 1.;
for(j=0;j<n;j++){
if (j !i) Lg Lg * (xin - x[j]) / (x[i] - x[j]);
}
fx=fx + y[i] * Lg;
}
printf("\nLa valeur de f[x] pour x = %f est de : %f ",xin,fx);
printf("\n\n");
system("pause");
return(0);
}

A vérifier. pgl10.
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
17 nov. 2009 à 07:20
Poste dans le forum et quelqu'un te répondra certainement.