/*************************************************************************************************************************************/
/* */
/* L I S S A G E P A R A B O L I Q U E D ' U N F I C H I E R N U M E R I Q U E : */
/* */
/* */
/* Author of '$xrv/lissage.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20160620160643). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_D_ITERATIONS_DE_LISSAGE \
UN \
/* Nombre d'iterations de lissage. */
#define OPTIMISER_LES_PARAMETRES \
FAUX \
/* Faut-il optimiser les parametres suivants (introduit le 20240610181216) ? */
#define NOMBRE_D_ELEMENTS_A_IGNORER_EN_TETE_ \
DEUX
#define NOMBRE_D_ELEMENTS_A_IGNORER_EN_QUEUE \
DEUX
/* Definition des elements a traiter (introduits le 20220516105255)... */
#define DECREMENT_INDEX_2 \
DEUX
#define DECREMENT_INDEX_1 \
UN
#define INCREMENT_INDEX_1 \
UN
#define INCREMENT_INDEX_2 \
DEUX
/* Definition des decrements et increments des index (introduits le 20240610175727). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U F I C H I E R : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1d.I"
#define FORMATER_LE_RESULTAT_DE_L_OPERATION_SUR_LES_VALEURS_COURANTES \
VRAI
#include xrv/ARITHMET.21.I"
#include xrv/champs_5.41.I"
#define VALEUR_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_des_valeurs,liste_des_valeurs);
/* Definition en memoire du fichier. */
#define ELEMENT_DU_FICHIER(index) \
gELEMENT_DU_FICHIER(liste_des_valeurs,index) \
/* Acces a un element courant du fichier. */
gGENERATION_D_UN_FICHIER(fichier_intermediaire_des_valeurs,liste_intermediaire_des_valeurs);
/* Definition en memoire du fichier intermediaire. */
#define ELEMENT_DU_FICHIER_INTERMEDIAIRE(index) \
gELEMENT_DU_FICHIER(liste_intermediaire_des_valeurs,index) \
/* Acces a un element courant du fichier intermediaire. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* L I S S A G E P A R A B O L I Q U E D ' U N F I C H I E R N U M E R I Q U E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrv/ARITHMET.22.I"
#include xci/valeurs.03.I"
DEFV(Int,INIT(nombre_d_iterations_de_lissage,NOMBRE_D_ITERATIONS_DE_LISSAGE));
/* Nombre d'iterations de lissage. */
DEFV(Logical,INIT(optimiser_les_parametres,OPTIMISER_LES_PARAMETRES));
/* Faut-il optimiser les parametres suivants (introduit le 20240610181216) ? */
DEFV(Int,INIT(nombre_d_elements_a_ignorer_en_tete_,NOMBRE_D_ELEMENTS_A_IGNORER_EN_TETE_));
DEFV(Int,INIT(nombre_d_elements_a_ignorer_en_queue,NOMBRE_D_ELEMENTS_A_IGNORER_EN_QUEUE));
/* Definition des elements a traiter (introduits le 20220516105255)... */
DEFV(Int,INIT(decrement_index_2,DECREMENT_INDEX_2));
DEFV(Int,INIT(decrement_index_1,DECREMENT_INDEX_1));
DEFV(Int,INIT(increment_index_1,INCREMENT_INDEX_1));
DEFV(Int,INIT(increment_index_2,INCREMENT_INDEX_2));
/* Definition des decrements et increments des index (introduits le 20240610175727). */
/*..............................................................................................................................*/
#include xrv/champs_5.1A.I"
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
,BLOC(VIDE;)
,BLOC(Bblock
PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
Eblock
)
);
PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;
PROKESF_ARGUMENT_FICHIER("fichier="
,fichier_des_valeurs
,liste_des_valeurs
,VALEUR_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
GET_ARGUMENT_I("passes=""iterations=",nombre_d_iterations_de_lissage);
GET_ARGUMENT_L("optimiser=""opt=",optimiser_les_parametres);
GET_ARGUMENT_I("tete=""nt=",nombre_d_elements_a_ignorer_en_tete_);
GET_ARGUMENT_I("queue=""nq=",nombre_d_elements_a_ignorer_en_queue);
GET_ARGUMENT_I("decrement2=""d2=",decrement_index_2);
GET_ARGUMENT_I("decrement1=""d1=",decrement_index_1);
GET_ARGUMENT_I("increment1=""i1=",increment_index_1);
GET_ARGUMENT_I("increment2=""i2=",increment_index_2);
/* Arguments introduits le 20240610175727... */
GET_ARGUMENT_F("coefficient_n_m2=""nm2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m2);
GET_ARGUMENT_F("coefficient_n_m1=""nm1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m1);
GET_ARGUMENT_F("coefficient_n_0=""n0=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_0);
GET_ARGUMENT_F("coefficient_n_p1=""np1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p1);
GET_ARGUMENT_F("coefficient_n_p2=""np2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p2);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
)
);
iGENERATION_D_UN_FICHIER(liste_intermediaire_des_valeurs,VALEUR_IMPLICITE);
Test(IL_FAUT(optimiser_les_parametres))
Bblock
/* Test introduit le 20240610181216... */
EGAL(nombre_d_elements_a_ignorer_en_tete_,MAX2(ABSO(decrement_index_1),ABSO(decrement_index_2)));
EGAL(nombre_d_elements_a_ignorer_en_queue,MAX2(ABSO(increment_index_1),ABSO(increment_index_2)));
Eblock
ATes
Bblock
Eblock
ETes
Repe(nombre_d_iterations_de_lissage)
Bblock
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
DEFV(Float,INIT(valeur_n_0_,ELEMENT_DU_FICHIER(index)));
/* Recuperation de la valeur courante dans le fichier. */
DEFV(Float,INIT(valeur_lissee,FLOT__UNDEF));
/* Valeur courante a editer... */
Test(IFOU(IFLT(index
,ADD2(PREMIER_ELEMENT_D_UN_FICHIER
,MAX2(nombre_d_elements_a_ignorer_en_tete_,NOMBRE_D_ELEMENTS_A_IGNORER_EN_TETE_)
)
)
,IFGT(index
,SOUS(DERNIER_ELEMENT_D_UN_FICHIER
,MAX2(nombre_d_elements_a_ignorer_en_queue,NOMBRE_D_ELEMENTS_A_IGNORER_EN_QUEUE)
)
)
)
)
Bblock
EGAL(valeur_lissee,valeur_n_0_);
/* Pour les deux premieres et les deux dernieres valeurs du fichier, le lissage est */
/* evidemment impossible... */
/* */
/* Le 20220516105255 a ete introduite la possibilite d'etre plus restrictif... */
Eblock
ATes
Bblock
DEFV(Float,INIT(valeur_n_m2
,ELEMENT_DU_FICHIER(TRON(bSOU(index,decrement_index_2)
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
)
)
)
);
DEFV(Float,INIT(valeur_n_m1
,ELEMENT_DU_FICHIER(TRON(bSOU(index,decrement_index_1)
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
)
)
)
);
DEFV(Float,INIT(valeur_n_p1
,ELEMENT_DU_FICHIER(TRON(bADD(index,increment_index_1)
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
)
)
)
);
DEFV(Float,INIT(valeur_n_p2
,ELEMENT_DU_FICHIER(TRON(bADD(index,increment_index_2)
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
)
)
)
);
/* Recuperation des quatre valeurs autour de la valeur courante dans le fichier. */
EGAL(valeur_lissee
,LISSAGE_PAR_APPROXIMATION_PARABOLIQUE(valeur_n_m2
,valeur_n_m1
,valeur_n_0_
,valeur_n_p1
,valeur_n_p2
)
);
/* Lissage... */
Eblock
ETes
EGAL(ELEMENT_DU_FICHIER_INTERMEDIAIRE(index),valeur_lissee);
Eblock
EDoI
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
EGAL(ELEMENT_DU_FICHIER(index),ELEMENT_DU_FICHIER_INTERMEDIAIRE(index));
Eblock
EDoI
Eblock
ERep
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(ELEMENT_DU_FICHIER(index));
/* Introduit sous cette forme le 20160804093821... */
Eblock
EDoI
lGENERATION_D_UN_FICHIER(liste_intermediaire_des_valeurs,VALEUR_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_des_valeurs,VALEUR_IMPLICITE);
RETU_Commande;
Eblock
ECommande