/*************************************************************************************************************************************/ /* */ /* L I S S A G E D ' U N E N S E M B L E D E P O I N T S : */ /* */ /* */ /* Author of '$xtc/lissage.01$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */ /* */ /*************************************************************************************************************************************/ #define PREMIER \ 0 \ /* Premier element. */ #define PORTEE \ 2 \ /* Nombre d'elements a ignorer en tete et en queue. */ #define ELEMENTS \ 20 \ /* Nombre d'elements a lisser. */ #define ITERATIONS \ 8 \ /* Nombre d'iterations de lissage. */ main() { double Tinitial[ELEMENTS]; double Tlisse[ELEMENTS]; int compteur,index; Tinitial[0]=0; Tinitial[1]=1; Tinitial[2]=2; Tinitial[3]=3; Tinitial[4]=4; Tinitial[5]=5; Tinitial[6]=6; Tinitial[7]=7; Tinitial[8]=7; Tinitial[9]=7; Tinitial[10]=7; Tinitial[11]=7; Tinitial[12]=7; Tinitial[13]=7; Tinitial[14]=7; Tinitial[15]=7; Tinitial[16]=7; Tinitial[17]=6; Tinitial[18]=5; Tinitial[19]=4; /* Initialisation arbitraire avec une large zone "plate" ('7'). */ for (index=PREMIER ; index<ELEMENTS ; index++) { Tlisse[index]=Tinitial[index]; } for (compteur=1 ; compteur<ITERATIONS ; compteur++) { double Tintermediaire[ELEMENTS]; for (index=(PREMIER+PORTEE) ; index<(ELEMENTS-PORTEE) ; index++) { Tintermediaire[index]=(1/35.0)*((-3*Tlisse[index-2]) +(12*Tlisse[index-1]) +(17*Tlisse[index]) +(12*Tlisse[index+1]) +(-3*Tlisse[index+2]) ); /* Lissage par approximation (voir 'METHODE DE CALCUL NUMERIQUE' de JP. Nougier, page 120). */ } for (index=PREMIER ; index<ELEMENTS ; index++) { Tlisse[index]=Tintermediaire[index]; } printf("\n"); for (index=PREMIER ; index<ELEMENTS ; index++) { printf("%.0f=%.2f ",Tinitial[index],Tlisse[index]); } } }