/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   V A L E U R S   C O R R E S P O N D A N T   A                                                  */
/*        D E S   F R A C T I O N   R A T I O N N E L L E S   C O N S T I T U E E S                                                  */
/*        D E   P O L Y N O M E S   D E   D E G R E   9  :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une sequence                                                                             */
/*                  de valeurs numeriques flottantes obtenues                                                                        */
/*                  par calcul d'une fonction du type :                                                                              */
/*                                                                                                                                   */
/*                                             9       8       7       6       5       4       3       2       1       0             */
/*                                         n .x  + n .x  + n .x  + n .x  + n .x  + n .x  + n .x  + n .x  + n .x  + n .x              */
/*                                          9       8       7       6       5       4       3       2       1       0                */
/*                                      R.-------------------------------------------------------------------------------            */
/*                                             9       8       7       6       5       4       3       2       1       0             */
/*                                         d .x  + d .x  + d .x  + d .x  + d .x  + d .x  + d .x  + d .x  + d .x  + d .x              */
/*                                          9       8       7       6       5       4       3       2       1       0                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_poly$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1992??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INTERPOLER_PAR_DES_SPLINES_CUBIQUES                                                                                           \
                    VRAI                                                                                                                \
                                        /* Cet indicateur permet la selection entre une interpolation "cubique" ('VRAI') ou bien     */ \
                                        /* "lineaire" ('FAUX').                                                                      */

#include  xci/sequence.01.I"

#define   RAYON_DE_DEPART                                                                                                               \
                    FU
#define   DERIVEE_DU_RAYON_DE_DEPART                                                                                                    \
                    FZERO
                                        /* Definition du facteur multiplicatif 'R' de depart et de sa derivee.                       */
#define   RAYON_D_ARRIVEE                                                                                                               \
                    FU
#define   DERIVEE_DU_RAYON_D_ARRIVEE                                                                                                    \
                    FZERO
                                        /* Definition du facteur multiplicatif 'R' d'arrivee et de sa derivee.                       */
#define   X_DE_DEPART                                                                                                                   \
                    FZERO
#define   DERIVEE_DE_L_X_DE_DEPART                                                                                                      \
                    FZERO
                                        /* Definition de la variable 'x' de depart et de sa derivee.                                 */
#define   X_D_ARRIVEE                                                                                                                   \
                    FU
#define   DERIVEE_DE_L_X_D_ARRIVEE                                                                                                      \
                    FZERO
                                        /* Definition de la variable 'x' d'arrivee et de sa derivee.                                 */

#define   COEFFICIENT_N00                                                                                                               \
                    FU
#define   COEFFICIENT_N01                                                                                                               \
                    FU
#define   COEFFICIENT_N02                                                                                                               \
                    FU
#define   COEFFICIENT_N03                                                                                                               \
                    FZERO
#define   COEFFICIENT_N04                                                                                                               \
                    FZERO
#define   COEFFICIENT_N05                                                                                                               \
                    FZERO
#define   COEFFICIENT_N06                                                                                                               \
                    FZERO
#define   COEFFICIENT_N07                                                                                                               \
                    FZERO
#define   COEFFICIENT_N08                                                                                                               \
                    FZERO
#define   COEFFICIENT_N09                                                                                                               \
                    FZERO
                                        /* Definition des coefficients du polynome du Numerateur (initialise sur un polynome         */
                                        /* du second degre).                                                                         */
                                        /*                                                                                           */
                                        /* Le coefficient 'A9' fut introduit le 20070905110308...                                    */

#define   COEFFICIENT_D00                                                                                                               \
                    FU
#define   COEFFICIENT_D01                                                                                                               \
                    FZERO
#define   COEFFICIENT_D02                                                                                                               \
                    FZERO
#define   COEFFICIENT_D03                                                                                                               \
                    FZERO
#define   COEFFICIENT_D04                                                                                                               \
                    FZERO
#define   COEFFICIENT_D05                                                                                                               \
                    FZERO
#define   COEFFICIENT_D06                                                                                                               \
                    FZERO
#define   COEFFICIENT_D07                                                                                                               \
                    FZERO
#define   COEFFICIENT_D08                                                                                                               \
                    FZERO
#define   COEFFICIENT_D09                                                                                                               \
                    FZERO
                                        /* Definition des coefficients du polynome du Denominateur (initialise sur un polynome       */
                                        /* de degre zero). Ceci fut introduit le 20070906115342.                                     */
#define   DIVISER_LES_COEFFICIENTS_PAR_LES_FACTORIELLES_APPROPRIEES                                                                     \
                    FAUX                                                                                                                \
                                        /* Faut-il diviser les coefficients du polynome par les factorielles ('VRAI') ou les         */ \
                                        /* utiliser tels quels ('FAUX') ? Ceci fut introduit le 20070904125619 et la valeur par      */ \
                                        /* defaut garantit la compatibilite anterieure...                                            */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COEFFICIENT(coefficient,indice)                                                                                               \
                    COND(IL_FAUT(diviser_les_coefficients_par_les_factorielles_appropriees)                                             \
                        ,DIVI(coefficient,FACT(indice))                                                                                 \
                        ,NEUT(coefficient)                                                                                              \
                         )                                                                                                              \
                                        /* Coefficient effectif du polynome (introduit le 20070904125619).                           */

#include  xci/valeurs.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   V A L E U R S   C O R R E S P O N D A N T   A                                                  */
/*        D E S   F R A C T I O N   R A T I O N N E L L E S   C O N S T I T U E E S                                                  */
/*        D E   P O L Y N O M E S   D E   D E G R E   9  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(interpoler_par_des_splines_cubiques,INTERPOLER_PAR_DES_SPLINES_CUBIQUES));
                                        /* Cet indicateur permet la selection entre une interpolation "cubique" ('VRAI') ou bien     */
                                        /* "lineaire" ('FAUX').                                                                      */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Float,INIT(rayon_de_depart,RAYON_DE_DEPART));
     DEFV(Float,INIT(derivee_du_rayon_de_depart,DERIVEE_DU_RAYON_DE_DEPART));
                                        /* Definition du facteur multiplicatif 'R' d'arrivee et de sa derivee.                       */
     DEFV(Float,INIT(rayon_d_arrivee,RAYON_D_ARRIVEE));
     DEFV(Float,INIT(derivee_du_rayon_d_arrivee,DERIVEE_DU_RAYON_D_ARRIVEE));
                                        /* Definition du facteur multiplicatif 'R' de depart et de sa derivee.                       */
     DEFV(Float,INIT(X_de_depart,X_DE_DEPART));
     DEFV(Float,INIT(derivee_de_l_X_de_depart,DERIVEE_DE_L_X_DE_DEPART));
                                        /* Definition de la variable 'x' d'arrivee et de sa derivee.                                 */
     DEFV(Float,INIT(X_d_arrivee,X_D_ARRIVEE));
     DEFV(Float,INIT(derivee_de_l_X_d_arrivee,DERIVEE_DE_L_X_D_ARRIVEE));
                                        /* Definition de la variable 'x' de depart et de sa derivee.                                 */
     DEFV(Float,INIT(n00,COEFFICIENT_N00));
     DEFV(Float,INIT(n01,COEFFICIENT_N01));
     DEFV(Float,INIT(n02,COEFFICIENT_N02));
     DEFV(Float,INIT(n03,COEFFICIENT_N03));
     DEFV(Float,INIT(n04,COEFFICIENT_N04));
     DEFV(Float,INIT(n05,COEFFICIENT_N05));
     DEFV(Float,INIT(n06,COEFFICIENT_N06));
     DEFV(Float,INIT(n07,COEFFICIENT_N07));
     DEFV(Float,INIT(n08,COEFFICIENT_N08));
     DEFV(Float,INIT(n09,COEFFICIENT_N09));
                                        /* Definition des coefficients du polynome du Numerateur (initialise sur un polynome         */
                                        /* du second degre).                                                                         */
                                        /*                                                                                           */
                                        /* Le coefficient 'n09' fut introduit le 20070905110308...                                   */
     DEFV(Float,INIT(d00,COEFFICIENT_D00));
     DEFV(Float,INIT(d01,COEFFICIENT_D01));
     DEFV(Float,INIT(d02,COEFFICIENT_D02));
     DEFV(Float,INIT(d03,COEFFICIENT_D03));
     DEFV(Float,INIT(d04,COEFFICIENT_D04));
     DEFV(Float,INIT(d05,COEFFICIENT_D05));
     DEFV(Float,INIT(d06,COEFFICIENT_D06));
     DEFV(Float,INIT(d07,COEFFICIENT_D07));
     DEFV(Float,INIT(d08,COEFFICIENT_D08));
     DEFV(Float,INIT(d09,COEFFICIENT_D09));
                                        /* Definition des coefficients du polynome du Denominateur (initialise sur un polynome       */
                                        /* de degre zero). Ceci fut introduit le 20070906115342.                                     */
     DEFV(Logical,INIT(diviser_les_coefficients_par_les_factorielles_appropriees
                      ,DIVISER_LES_COEFFICIENTS_PAR_LES_FACTORIELLES_APPROPRIEES
                       )
          );
                                        /* Faut-il diviser les coefficients du polynome par les factorielles ('VRAI') ou les         */
                                        /* utiliser tels quels ('FAUX') ? Ceci fut introduit le 20070904125619 et la valeur par      */
                                        /* defaut garantit la compatibilite anterieure...                                            */
     DEFV(Float,INIT(rayon_courant,FLOT__UNDEF));
                                        /* Definition du facteur multiplicatif 'R' courant.                                          */
     DEFV(Float,INIT(X_courant,FLOT__UNDEF));
                                        /* Definition de la variable 'x' courante.                                                   */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("cubique=",interpoler_par_des_splines_cubiques);
                         GET_ARGUMENT_N("lineaire=",interpoler_par_des_splines_cubiques);
                         GET_ARGUMENT_I("premiere=""p=""D=",premiere_image);
                         GET_ARGUMENT_I("derniere=""d=""A=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);

                         GET_ARGUMENT_F("rd=""rD=",rayon_de_depart);
                         GET_ARGUMENT_F("drd=""drD=",derivee_du_rayon_de_depart);
                         GET_ARGUMENT_F("ra=""rA=",rayon_d_arrivee);
                         GET_ARGUMENT_F("dra=""drA=",derivee_du_rayon_d_arrivee);
                         GET_ARGUMENT_F("xd=""xD=""Xd=""XD=""VD=",X_de_depart);
                         GET_ARGUMENT_F("dXd=""dXD=",derivee_de_l_X_de_depart);
                         GET_ARGUMENT_F("xa=""xA=""Xa=""XA=""VA=",X_d_arrivee);
                         GET_ARGUMENT_F("dXa=""dXA=",derivee_de_l_X_d_arrivee);

                         GET_ARGUMENT_F("n00=""a00=""a0=""N00=""A00=""A0=",n00);
                         GET_ARGUMENT_F("n01=""a01=""a1=""N01=""A01=""A1=",n01);
                         GET_ARGUMENT_F("n02=""a02=""a2=""N02=""A02=""A2=",n02);
                         GET_ARGUMENT_F("n03=""a03=""a3=""N03=""A03=""A3=",n03);
                         GET_ARGUMENT_F("n04=""a04=""a4=""N04=""A04=""A4=",n04);
                         GET_ARGUMENT_F("n05=""a05=""a5=""N05=""A05=""A5=",n05);
                         GET_ARGUMENT_F("n06=""a06=""a6=""N06=""A06=""A6=",n06);
                         GET_ARGUMENT_F("n07=""a07=""a7=""N07=""A07=""A7=",n07);
                         GET_ARGUMENT_F("n08=""a08=""a8=""N08=""A08=""A8=",n08);
                         GET_ARGUMENT_F("n09=""a09=""a9=""N09=""A09=""A9=",n09);

                         GET_ARGUMENT_F("d00=""b00=""b0=""D00=""B00=""B0=",d00);
                         GET_ARGUMENT_F("d01=""b01=""b1=""D01=""B01=""B1=",d01);
                         GET_ARGUMENT_F("d02=""b02=""b2=""D02=""B02=""B2=",d02);
                         GET_ARGUMENT_F("d03=""b03=""b3=""D03=""B03=""B3=",d03);
                         GET_ARGUMENT_F("d04=""b04=""b4=""D04=""B04=""B4=",d04);
                         GET_ARGUMENT_F("d05=""b05=""b5=""D05=""B05=""B5=",d05);
                         GET_ARGUMENT_F("d06=""b06=""b6=""D06=""B06=""B6=",d06);
                         GET_ARGUMENT_F("d07=""b07=""b7=""D07=""B07=""B7=",d07);
                         GET_ARGUMENT_F("d08=""b08=""b8=""D08=""B08=""B8=",d08);
                         GET_ARGUMENT_F("d09=""b09=""b9=""D09=""B09=""B9=",d09);

                         GET_ARGUMENT_L("factorielles=""fact=",diviser_les_coefficients_par_les_factorielles_appropriees);
                                        /* Parametres introduits le 20070904125619...                                                */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226185829...                                       */
                         )
                    );

     Test(IFLT(premiere_image,derniere_image))
                                        /* ATTENTION : on ne peut ecrire :                                                           */
                                        /*                                                                                           */
                                        /*                  Test(IFLE(premiere_image,derniere_image))                                */
                                        /*                                                                                           */
                                        /* a cause de 'iINTERPOLATION_...(...)' qui calcule 'derniere_image-premiere_image'          */
                                        /* ('v $xci/valeurs.02$I iTRANSFORMATION').                                                  */
          Bblock
          DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
               Bblock
               Test(IL_FAUT(interpoler_par_des_splines_cubiques))
                    Bblock
                    EGAL(rayon_courant
                        ,iINTERPOLATION_CUBIQUE(rayon_de_depart,derivee_du_rayon_de_depart
                                               ,rayon_d_arrivee,derivee_du_rayon_d_arrivee
                                               ,numero_d_image
                                               ,premiere_image,derniere_image
                                                )
                         );
                                        /* Interpolation cubique du facteur multiplicatif 'R'.                                       */
                    EGAL(X_courant
                        ,iINTERPOLATION_CUBIQUE(X_de_depart,derivee_de_l_X_de_depart
                                               ,X_d_arrivee,derivee_de_l_X_d_arrivee
                                               ,numero_d_image
                                               ,premiere_image,derniere_image
                                                )
                         );
                                        /* Interpolation cubique de la variable 'X' courante.                                        */
                    Eblock
               ATes
                    Bblock
                    EGAL(rayon_courant
                        ,iINTERPOLATION_LINEAIRE(rayon_de_depart,derivee_du_rayon_de_depart
                                                ,rayon_d_arrivee,derivee_du_rayon_d_arrivee
                                                ,numero_d_image
                                                ,premiere_image,derniere_image
                                                 )
                         );
                                        /* Interpolation lineaire du facteur multiplicatif 'R'.                                      */
                    EGAL(X_courant
                        ,iINTERPOLATION_LINEAIRE(X_de_depart,derivee_de_l_X_de_depart
                                                ,X_d_arrivee,derivee_de_l_X_d_arrivee
                                                ,numero_d_image
                                                ,premiere_image,derniere_image
                                                 )
                         );
                                        /* Interpolation lineaire de la variable 'X' courante.                                       */
                    Eblock
               ETes

               begin_nouveau_block
                    Bblock
                    DEFV(Float,INIT(numerateur
                                   ,HORNER_1_09(X_courant
                                               ,COEFFICIENT(n09,NEUF)
                                               ,COEFFICIENT(n08,HUIT)
                                               ,COEFFICIENT(n07,SEPT)
                                               ,COEFFICIENT(n06,SIX)
                                               ,COEFFICIENT(n05,CINQ)
                                               ,COEFFICIENT(n04,QUATRE)
                                               ,COEFFICIENT(n03,TROIS)
                                               ,COEFFICIENT(n02,DEUX)
                                               ,COEFFICIENT(n01,UN)
                                               ,COEFFICIENT(n00,ZERO)
                                                )
                                    )
                         );
                    DEFV(Float,INIT(denominateur
                                   ,HORNER_1_09(X_courant
                                               ,COEFFICIENT(d09,NEUF)
                                               ,COEFFICIENT(d08,HUIT)
                                               ,COEFFICIENT(d07,SEPT)
                                               ,COEFFICIENT(d06,SIX)
                                               ,COEFFICIENT(d05,CINQ)
                                               ,COEFFICIENT(d04,QUATRE)
                                               ,COEFFICIENT(d03,TROIS)
                                               ,COEFFICIENT(d02,DEUX)
                                               ,COEFFICIENT(d01,UN)
                                               ,COEFFICIENT(d00,ZERO)
                                                )
                                    )
                         );
                                        /* Cette "optimisation" assez inhabituelle chez moi est due a l'utilisation de 'DIVZ(...)'   */
                                        /* ci-apres ; elle permet de limiter la complexite du code alors genere...                   */

                    CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n"))
                              ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                              ,MULTIPLE_DE(ENTIER_FLOTTANT(MUL2(rayon_courant
                                                               ,DIVZ(numerateur,denominateur)
                                                                )
                                                           )
                                           )
                               )
                         );
                                        /* Et enfin, edition de la valeur de la fraction rationnelle...                              */
                    Eblock
               end_nouveau_block
               Eblock
          EDoI
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee");
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.