/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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                                                  */
/*        L A   D Y N A M I Q U E   D E   V E R H U L S T  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une suite de                                                                             */
/*                  nombres 'X' tel que :                                                                                            */
/*                                                                                                                                   */
/*                                      X  = D                                                                                       */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                                           2                                                                       */
/*                                      X  = (R+1).X    - R.X                                                                        */
/*                                       n          n-1      n-1                                                                     */
/*                                                                                                                                   */
/*                  ou 'D' designe la valeur de depart...                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Note sur la sensibilite aux erreurs d'arrondi :                                                                            */
/*                                                                                                                                   */
/*                    Le 20161219101525, je note un phenomene                                                                        */
/*                  curieux sur '$LACT19' et sur '$LACT1A'. A                                                                        */
/*                  partir de "derniere=2264", les resultats                                                                         */
/*                  divergent :                                                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                            numero_d_image :    LACT19 :            LACT1A :                                                       */
/*                                                                                                                                   */
/*                            2259                +1.2474053760322    +1.2474053760322     /.\                                       */
/*                            2260                +0.32156098766686   +0.32156098766686     |                                        */
/*                            2261                +0.97603954429958   +0.97603954429958     |                                        */
/*                            2262                +1.0461986010887    +1.0461986010887      |                                        */
/*                            2263                +0.90119986559487   +0.90119986559487   <-  identiques,                            */
/*                                                                                                                                   */
/*                            2264                +1.1683158691349    +1.1683158691348    <-  differents.                            */
/*                            2265                +0.57837756632243   +0.57837756632247     |                                        */
/*                            2266                +1.3099484376146    +1.3099484376146      |                                        */
/*                            2267                +0.091899022831792  +0.091899022831718    |                                        */
/*                            2268                +0.34225980013485   +0.3422598001346     \./                                       */
/*                                                                                                                                   */
/*                    On notera que les resultats precedents obtenus                                                                 */
/*                  sur '$LACT1A' sont les memes, que '$xci/valeurs_chao$X'                                                          */
/*                  soit celui de '$LACT19' (via un 'reference') ou                                                                  */
/*                  bien ait ete recompile sur '$LACT1A'... Cela montre                                                              */
/*                  que la difference ne vient pas des options de '$Cc',                                                             */
/*                  mais des processeurs eux-memes...                                                                                */
/*                                                                                                                                   */
/*                    On notera le 20161219114418 que les tests precedents                                                           */
/*                  ont ete refaits sur toutes les MACHINEs de type '$CMAP28' ;                                                      */
/*                  les resultats obtenus ont toujours ete ceux de '$LACT19'...                                                      */
/*                                                                                                                                   */
/*                    On notera le 20161219172254 que '$LACT1A' donne les                                                            */
/*                  resultats de '$LACT19' a quatre conditions :                                                                     */
/*                                                                                                                                   */
/*                                      1-Supprimer l'option 'v $Fcompilers mfpmath=387',                                            */
/*                                      2-Recompiler 'v $xbg/GooF_fonct$K',                                                          */
/*                                      3-Recompiler 'v $xci/valeurs_chao$K',                                                        */
/*                                      4-Activer l'option "GooF=FAUX" dans 'v $xci/valeurs_chao$K GooF'.                            */
/*                                                                                                                                   */
/*                  Tout cela est bien mysterieux, meme si l'option 'v $Fcompilers mfpmath=387'                                      */
/*                  semble jouer un role important, voire essentiel...                                                               */
/*                                                                                                                                   */
/*                    Cette anomalie avec '$LACT1A' s'est vue aussi avec                                                             */
/*                  beaucoup d'autres programmes et en particulier ceux                                                              */
/*                  de '$xrs' ('v $xiirs/EPIC.31.diff' par exemple) ou                                                               */
/*                  encore ceux de '$xrc'...                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_chao$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19990401095828).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PRAGMA_CPP_____AUTORISER_LE_GooF
                                        /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les        */
                                        /* resultats obtenus. Ceci a ete introduit le 20040420232207.                                */
@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE
                                        /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les        */
                                        /* resultats obtenus. Ceci manquait et a ete introduit le 20021102092724.                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_MINI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   DEPHASAGE_INITIAL                                                                                                             \
                    ZERO                                                                                                                \
                                        /* Nombre de valeurs aleatoires a generer initialement en aveugle de facon a se dephaser     */ \
                                        /* dans la liste des valeurs aleatoires generees (introduit le 20021102093904).              */

#define   TAUX_DE_CROISSANCE                                                                                                            \
                    GRO3(FU)                                                                                                            \
                                        /* Taux de croissance 'R' ; une valeur superieure a 2.57 donne un comportement chaotique.    */
#define   X_DE_DEPART                                                                                                                   \
                    FDU                                                                                                                 \
                                        /* Definition de la variable 'x' de depart...                                                */

#define   UTILISER_LA_FORME_NATURELLE                                                                                                   \
                    VRAI
#define   TESTER_L_ASSOCIATIVITE                                                                                                        \
                    VRAI
#define   GENERALISER_LA_FORME                                                                                                          \
                    FAUX
                                        /* Choix de la forme a utiliser pour le calcul. La generalisation a ete introduite le        */
                                        /* 20190104103807...                                                                         */

#include  xci/valeurs.01.I"

#define   COMPATIBILITE_20040420                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Permet de proceder a des generations compatibles a celles qui furent effectues            */ \
                                        /* anterieurement au 20040420232207. Le 'GooF' est active par defaut...                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/valeurs.02.I"

#define   GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(valeur_aleatoire)                                                                  \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(generaliser_la_forme))                                                                                 \
                                        /* Test introduit le 20190104103807...                                                       */ \
                         Bblock                                                                                                         \
                         EGAL(X_courant                                                                                                 \
                             ,HORNER_1_09(X_courant                                                                                     \
                                         ,polynome_a9                                                                                   \
                                         ,polynome_a8                                                                                   \
                                         ,polynome_a7                                                                                   \
                                         ,polynome_a6                                                                                   \
                                         ,polynome_a5                                                                                   \
                                         ,polynome_a4                                                                                   \
                                         ,polynome_a3                                                                                   \
                                         ,polynome_a2                                                                                   \
                                         ,polynome_a1                                                                                   \
                                         ,polynome_a0                                                                                   \
                                          )                                                                                             \
                              );                                                                                                        \
                                        /* La generalisation introduite le 20190104103807 utilise un polynome du neuvieme degre      */ \
                                        /* initialise par la forme "naturelle"...                                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : on notera qu'evidemment la programmation de la forme "naturelle" (ci-dessous) */ \
                                        /* et de la forme "generalisee par defaut" (ci-dessus) differant, les resultats alors        */ \
                                        /* produits divergent rapidement ainsi qu'on le voit ici :                                   */ \
                                        /*                                                                                           */ \
                                        /*                  forme "naturelle" :     forme "generalisee" :                            */ \
                                        /*                                                                                           */ \
                                        /*                  +0.5                    +0.5                                             */ \
                                        /*                  +1.25                   +1.25                                            */ \
                                        /*                  +0.3125                 +0.3125                                          */ \
                                        /*                  +0.95703125             +0.95703125                                      */ \
                                        /*                  +1.0803985595703        +1.0803985595703                                 */ \
                                        /*                  +0.81981109571643       +0.81981109571643                                */ \
                                        /*                  +1.2629736848864        +1.2629736848864                                 */ \
                                        /*                  +0.26658715339901       +0.26658715339901                                */ \
                                        /*                  +0.85314248252388       +0.85314248252389         <-- divergence...      */ \
                                        /*                  +1.2290136436345        +1.2290136436345                                 */ \
                                        /*                  +0.38463096581879       +0.3846309658188                                 */ \
                                        /*                  +1.0947009236751        +1.0947009236751                                 */ \
                                        /*                  +0.78369335781513       +0.78369335781507                                */ \
                                        /*                  +1.2922475940099        +1.2922475940099                                 */ \
                                        /*                  +0.15927884336664       +0.15927884336647                                */ \
                                        /*                  +0.56100612363391       +0.5610061236334                                 */ \
                                        /*                  +1.2998408822714        +1.2998408822711                                 */ \
                                        /*                  +0.13060457141332       +0.13060457141455                                */ \
                                        /*                  +0.47124562343111       +0.47124562343507                                */ \
                                        /*                  +1.2187651809155        +1.2187651809202                                 */ \
                                        /*                  +0.41889502502597       +0.41889502501061                                */ \
                                        /*                  +1.1491609741294        +1.1491609741065                                 */ \
                                        /*                  +0.63493106313163       +0.63493106319773                                */ \
                                        /*                  +1.3303118877381        +1.3303118877507                                 */ \
                                        /*                  +0.012058394980346      +0.012058394930226                               */ \
                                        /*                  +0.047797365252877      +0.047797365056023                               */ \
                                        /*                  +0.18433569663616       +0.1843356959052                                 */ \
                                        /*                  +0.63540383938162       +0.63540383726623                                */ \
                                        /*                  +1.3304012402238        +1.330401239827                                  */ \
                                        /*                  +0.011702580928245      +0.011702582508461                               */ \
                                        /*                  +0.046399472511833      +0.046399478721743                               */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(utiliser_la_forme_naturelle))                                                                     \
                              Bblock                                                                                                    \
                              EGAL(X_courant                                                                                            \
                                  ,SOUS(MUL2(ADD2(taux_de_croissance,FU),X_courant)                                                     \
                                       ,MUL2(taux_de_croissance,MUL2(X_courant,X_courant))                                              \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Calcul de la suite 'X' suivant :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  X = ((R+1).X) - (R.(X.X))                                                */ \
                                        /*                                                                                           */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(tester_l_associativite))                                                                     \
                                   Bblock                                                                                               \
                                   EGAL(X_courant                                                                                       \
                                       ,SOUS(MUL2(ADD2(taux_de_croissance,FU),X_courant)                                                \
                                            ,MUL2(MUL2(taux_de_croissance,X_courant),X_courant)                                         \
                                             )                                                                                          \
                                        );                                                                                              \
                                        /* Calcul de la suite 'X' suivant :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  X = ((R+1).X) - ((R.X).X)                                                */ \
                                        /*                                                                                           */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(X_courant                                                                                       \
                                       ,SOUS(ADD2(MUL2(taux_de_croissance,X_courant),X_courant)                                         \
                                            ,MUL2(taux_de_croissance,MUL2(X_courant,X_courant))                                         \
                                             )                                                                                          \
                                        );                                                                                              \
                                        /* Calcul de la suite 'X' suivant :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  X = (R.X) + X - (R.(X.X))                                                */ \
                                        /*                                                                                           */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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                                                  */
/*        L A   D Y N A M I Q U E   D E   V E R H U L S T  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     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(Positive,INIT(dephasage_initial,DEPHASAGE_INITIAL));
                                        /* Nombre de valeurs aleatoires a generer initialement en aveugle de facon a se dephaser     */
                                        /* dans la liste des valeurs aleatoires generees (introduit le 20021102093904).              */

     DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE));
                                        /* Taux de croissance 'R' ; une valeur superieure a 2.57 donne un comportement chaotique.    */
     DEFV(Float,INIT(X_de_depart,X_DE_DEPART));
                                        /* Definition de la variable 'x' d'arrivee et de depart...                                   */
     DEFV(Float,INIT(X_courant,FLOT__UNDEF));
                                        /* Definition de la variable 'x' de depart...                                                */
     DEFV(Logical,INIT(utiliser_la_forme_naturelle,UTILISER_LA_FORME_NATURELLE));
     DEFV(Logical,INIT(tester_l_associativite,TESTER_L_ASSOCIATIVITE));
                                        /* Choix de la forme a utiliser pour le calcul.                                              */
     DEFV(Logical,INIT(generaliser_la_forme,GENERALISER_LA_FORME));
     DEFV(Float,INIT(polynome_a0,FZERO));
     DEFV(Float,INIT(polynome_a1,ADD2(TAUX_DE_CROISSANCE,FU)));
     DEFV(Float,INIT(polynome_a2,NEGA(TAUX_DE_CROISSANCE)));
     DEFV(Float,INIT(polynome_a3,FZERO));
     DEFV(Float,INIT(polynome_a4,FZERO));
     DEFV(Float,INIT(polynome_a5,FZERO));
     DEFV(Float,INIT(polynome_a6,FZERO));
     DEFV(Float,INIT(polynome_a7,FZERO));
     DEFV(Float,INIT(polynome_a8,FZERO));
     DEFV(Float,INIT(polynome_a9,FZERO));
                                        /* Definition du polynome de generalisation de la forme (introduit le 20190104103807).       */
                                        /* Il est du neuvieme degre et est initialise par la forme "naturelle"...                    */

#include  xci/valeurs.03.I"

     DEFV(Logical,INIT(compatibilite_20040420,COMPATIBILITE_20040420));
                                        /* Permet de proceder a des generations compatibles a celles qui furent effectues            */
                                        /* anterieurement au 20040420232207. Le 'GooF' est active par defaut...                      */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("GooF_____compatibilite_20040420=""compatibilite_20040420=",compatibilite_20040420);
                         GET_ARGUMENT_N("GooF=",compatibilite_20040420);
                                        /* Cet argument a ete introduit le 20161219165911 afin de rendre plus comprehensible         */
                                        /* l'argument "compatibilite_20040420="...                                                   */

                         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_I("dephasage=",dephasage_initial);

                         GET_ARGUMENT_F("taux=""r=""R=",taux_de_croissance);

                         GET_ARGUMENT_F("Xd=""XD=""X0=",X_de_depart);

                         GET_ARGUMENT_L("naturelle=""naturel=",utiliser_la_forme_naturelle);
                         GET_ARGUMENT_L("associativite=",tester_l_associativite);

                         GET_ARGUMENT_L("generaliser=""gen=",generaliser_la_forme);
                         GET_ARGUMENT_F("a0=",polynome_a0);
                         GET_ARGUMENT_F("a1=",polynome_a1);
                         GET_ARGUMENT_F("a2=",polynome_a2);
                         GET_ARGUMENT_F("a3=",polynome_a3);
                         GET_ARGUMENT_F("a4=",polynome_a4);
                         GET_ARGUMENT_F("a5=",polynome_a5);
                         GET_ARGUMENT_F("a6=",polynome_a6);
                         GET_ARGUMENT_F("a7=",polynome_a7);
                         GET_ARGUMENT_F("a8=",polynome_a8);
                         GET_ARGUMENT_F("a9=",polynome_a9);
                                        /* Ces arguments ont ete introduits le 20190104103807...                                     */

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

     Test(IFLE(premiere_image,derniere_image))
          Bblock
          EGAL(X_courant,X_de_depart);
                                        /* Initialisation de la suite...                                                             */

          Repe(dephasage_initial)
               Bblock
               USs_GooF______CONDITIONNEL(NOTL(compatibilite_20040420)
                                         ,BLOC(
                                               Bblock
                                               GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(X_courant);
                                        /* On saute eventuellement les 'dephasage_initial' premieres valeurs aleatoires (avec        */
                                        /* 'GooF' par defaut...).                                                                    */
                                               Eblock
                                               )
                                          );
               Eblock
          ERep

          DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
               Bblock
               Test(IFEQ(numero_d_image,premiere_image))
                    Bblock
                    Eblock
               ATes
                    Bblock
                    USs_GooF______CONDITIONNEL(NOTL(compatibilite_20040420)
                                              ,BLOC(
                                                    Bblock
                                                    GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(X_courant);
                                        /* Calcul des elements attendus de la suite (avec 'GooF' par defaut...).                     */
                                                    Eblock
                                                    )
                                               );
                    Eblock
               ETes

               CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n"))
                         ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                         ,MULTIPLE_DE(ENTIER_FLOTTANT(X_courant))
                          )
                    );
                                        /* Et enfin, edition de la valeur "chaotique" courante.                                      */
               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.