/*************************************************************************************************************************************/ /* */ /* 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