/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   Z E T A   D E   R I E M A N N   A V E C   L A   S E R I E   D ' E U L E R      */
/*        P O U R   D E S   N O M B R E S   D ' I T E R A T I O N S   V A R I A N T                                                  */
/*        D E   F A C O N   S E Q U E N T I E L L E                                                                                  */
/*        A V E C   R E N O R M A L I S A T I O N   L O C A L E   D E S   I M A G E S  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrc/zeta.02$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
#include  maths_compl_fonct_ITERATIONS_EXT
#include  image_image_QUAD_IMAGE_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   X_DEPART_GAUCHE                                                                                                               \
                    PARE(0.0)
#define   X_DEPART_DROITE                                                                                                               \
                    PARE(8.0)
#define   Y_DEPART_BAS                                                                                                                  \
                    PARE(-4.0)
#define   Y_DEPART_HAUT                                                                                                                 \
                    PARE(4.0)
                                        /* Definition de la fenetre de depart.                                                       */
#define   X_ARRIVEE_GAUCHE                                                                                                              \
                    X_DEPART_GAUCHE
#define   X_ARRIVEE_DROITE                                                                                                              \
                    X_DEPART_DROITE
#define   Y_ARRIVEE_BAS                                                                                                                 \
                    Y_DEPART_BAS
#define   Y_ARRIVEE_HAUT                                                                                                                \
                    Y_DEPART_HAUT
                                        /* Definition de la fenetre d'arrivee.                                                       */

#define   NOMBRE_D_ITERATIONS_DE_DEPART                                                                                                 \
                    DEUX                                                                                                                \
                                        /* Nombre d'iterations demandees,                                                            */
#define   PAS_D_EVOLUTION_DU_NOMBRE_D_ITERATIONS                                                                                        \
                    I                                                                                                                   \
                                        /* Et son pas d'evolution...                                                                 */

#define   PRECISION                                                                                                                     \
                    PARE(0.00001)                                                                                                       \
                                        /* Pour calculer le rapport de reduction.                                                    */

#define   NOMBRE_D_IMAGES                                                                                                               \
                    UN                                                                                                                  \
                                        /* Nombre d'images a generer.                                                                */
#define   PREMIERE_IMAGE                                                                                                                \
                    PREMIERE_IMAGE_ABSOLUE                                                                                              \
                                        /* Numero de la premiere image a generer : ce parametre permet de faire une reprise sur une  */ \
                                        /* sequence interrompue.                                                                     */

#define   PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE_POUR_LE_MODULE                                                                            \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit changer la dynamique du module en une dynamique logarithmique...     */

#define   GENERER_LA_PARTIE_REELLE                                                                                                      \
                    FAUX
#define   GENERER_LA_PARTIE_IMAGINAIRE                                                                                                  \
                    FAUX
#define   GENERER_LE_MODULE                                                                                                             \
                    VRAI
#define   GENERER_LA_PHASE                                                                                                              \
                    VRAI
                                        /* Indicateurs controlant la generation des quatre types d'images.                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrc/ITERATION.11.I"
                                        /* Introduit le 20091122183059...                                                            */

#define   GENERATION_D_UN_TYPE_D_IMAGE(generer_ce_type_d_image,nom_du_type_d_image,image_flottante,image_standard,sequence_speciale)    \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(generer_ce_type_d_image))                                                                              \
                         Bblock                                                                                                         \
                         BLOC(sequence_speciale);                                                                                       \
                                        /* Execution d'une sequence specifique a un type d'image...                                  */ \
                         CALS(Ifloat_std_avec_renormalisation(image_standard,image_flottante));                                         \
                                        /* Conversion preliminaire en une image "standard",                                          */ \
                         EGAL(nom_image                                                                                                 \
                             ,chain_Aconcaten2_sauf_nom_pipe(nom_du_type_d_image                                                        \
                                                            ,chain_numero(numero_d_image,nombre_de_chiffres)                            \
                                                             )                                                                          \
                              );                                                                                                        \
                         CALi(Iupdate_image(nom_image,image_standard));                                                                 \
                                        /* Puis enregistrement...                                                                    */ \
                         CALZ_FreCC(nom_image);                                                                                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure generant si necessaire un certain type d'image.                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   Z E T A   D E   R I E M A N N   A V E C   L A   S E R I E   D ' E U L E R      */
/*        P O U R   D E S   N O M B R E S   D ' I T E R A T I O N S   V A R I A N T                                                  */
/*        D E   F A C O N   S E Q U E N T I E L L E                                                                                  */
/*        A V E C   R E N O R M A L I S A T I O N   L O C A L E   D E S   I M A G E S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(complexe,coin_bas_gauche_de_depart_puis_courant);
                                        /* Definition du point situe en bas a gauche de la fenetre de depart, puis de la fenetre     */
                                        /* courante au cours du zoom.                                                                */
     DEFV(complexe,coin_haut_droite_de_depart_puis_courant);
                                        /* Definition du point situe en haut a droite de la fenetre de depart, puis de la fenetre    */
                                        /* courante au cours du zoom.                                                                */
     DEFV(complexe,coin_bas_gauche_d_arrivee);
                                        /* Definition du point situe en bas a gauche de la fenetre d'arrivee,                        */
     DEFV(complexe,coin_haut_droite_d_arrivee);
                                        /* Definition du point situe en haut a droite de la fenetre d'arrivee.                       */
     DEFV(Positive,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS_DE_DEPART));
                                        /* Nombre maximal d'iterations a effectuer,                                                  */
     DEFV(Positive,INIT(pas_d_evolution_du_nombre_d_iterations,PAS_D_EVOLUTION_DU_NOMBRE_D_ITERATIONS));
                                        /* Et son pas d'evolution...                                                                 */
     DEFV(Float,INIT(precision,PRECISION));
                                        /* Pour calculer le rapport de reduction.                                                    */
     DEFV(Float,INIT(rapport_de_reduction,FLOT__UNDEF));
                                        /* Rapport de passage d'une fenetre a l'autre.                                               */
     DEFV(Int,INIT(nombre_d_images,NOMBRE_D_IMAGES));
                                        /* Nombre d'images a generer.                                                                */
     DEFV(Int,INIT(numero_d_image,PREMIERE_IMAGE_ABSOLUE));
                                        /* Numero de l'image courante (celle-ci n'est pas necessairement generee : voir              */
                                        /* le parametre 'PREMIERE_IMAGE').                                                           */
     DEFV(CHAR,INIC(POINTERc(nom_imageRR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRI),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRMo),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRPh),NOM_PIPE));
                                        /* Nom de la sequence d'images a generer.                                                    */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la sequence a generer.                  */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     DEFV(Logical,INIT(prendre_une_dynamique_logarithmique_pour_le_module,PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE_POUR_LE_MODULE));
                                        /* Indique si l'on doit changer la dynamique du module en une dynamique logarithmique...     */
     DEFV(Logical,INIT(generer_la_partie_reelle,GENERER_LA_PARTIE_REELLE));
     DEFV(Logical,INIT(generer_la_partie_imaginaire,GENERER_LA_PARTIE_IMAGINAIRE));
     DEFV(Logical,INIT(generer_le_module,GENERER_LE_MODULE));
     DEFV(Logical,INIT(generer_la_phase,GENERER_LA_PHASE));
                                        /* Indicateurs controlant la generation des quatre types d'images.                           */
     DEFV(Positive,INIT(premiere_iteration_effective,PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN));
                                        /* Numero de la premiere iteration effective (ceci va permettre d'optimiser...).             */
     DEFV(complexe,valeur_initiale);
                                        /* Valeur initiale de 'fonction_zeta_de_Riemann'                                             */
     /*..............................................................................................................................*/
     Cinitialisation(coin_bas_gauche_de_depart_puis_courant,X_DEPART_GAUCHE,Y_DEPART_BAS);
     Cinitialisation(coin_haut_droite_de_depart_puis_courant,X_DEPART_DROITE,Y_DEPART_HAUT);
                                        /* Definition de la fenetre de depart.                                                       */
     Cinitialisation(coin_bas_gauche_d_arrivee,X_ARRIVEE_GAUCHE,Y_ARRIVEE_BAS);
     Cinitialisation(coin_haut_droite_d_arrivee,X_ARRIVEE_DROITE,Y_ARRIVEE_HAUT);
                                        /* Definition de la fenetre d'arrivee.                                                       */
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_I("n=""images=""N=",nombre_d_images);
                         GET_ARGUMENT_C("imageRR=""RR=",nom_imageRR);
                         GET_ARGUMENT_C("imageRI=""RI=",nom_imageRI);
                         GET_ARGUMENT_C("imageRMo=""RMo=",nom_imageRMo);
                         GET_ARGUMENT_C("imageRPh=""RPh=",nom_imageRPh);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);

                         GET_ARGUMENT_I("iterations=",nombre_d_iterations);
                         GET_ARGUMENT_I("pas=",pas_d_evolution_du_nombre_d_iterations);
                         GET_ARGUMENT_F("xbgd=""xbgD=",Reelle(coin_bas_gauche_de_depart_puis_courant));
                         GET_ARGUMENT_F("ybgd=""ybgD=",Imaginaire(coin_bas_gauche_de_depart_puis_courant));
                         GET_ARGUMENT_F("xhdd=""xhdD=",Reelle(coin_haut_droite_de_depart_puis_courant));
                         GET_ARGUMENT_F("yhdd=""yhdD=",Imaginaire(coin_haut_droite_de_depart_puis_courant));
                         GET_ARGUMENT_F("xbga=""xbgA=",Reelle(coin_bas_gauche_d_arrivee));
                         GET_ARGUMENT_F("ybga=""ybgA=",Imaginaire(coin_bas_gauche_d_arrivee));
                         GET_ARGUMENT_F("xhda=""xhdA=",Reelle(coin_haut_droite_d_arrivee));
                         GET_ARGUMENT_F("yhda=""yhdA=",Imaginaire(coin_haut_droite_d_arrivee));
                         GET_ARGUMENT_F("precision=",precision);
                         GET_ARGUMENT_L("logarithmique=",prendre_une_dynamique_logarithmique_pour_le_module);
                         GET_ARGUMENT_L("genererR=""gR=",generer_la_partie_reelle);
                         GET_ARGUMENT_L("genererI=""gI=",generer_la_partie_imaginaire);
                         GET_ARGUMENT_L("genererMo=""gMo=",generer_le_module);
                         GET_ARGUMENT_L("genererPh=""gPh=",generer_la_phase);
                                        /* Les abbreviations "g.=" et "g..=" ont ete introduites le 20210205120220...                */
                         )
                    );

     begin_nouveau_block
          Bblock
          BDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Definition de la fonction zeta complexe.                                                  */
          BDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
          BDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
          BDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
          BDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
                                        /* Definition des images flottantes necessaires.                                             */
          BDEFV(image,imageRR);
          BDEFV(image,imageRI);
          BDEFV(image,imageRMo);
          BDEFV(image,imageRPh);
                                        /* Definition des images "standards" necessaires.                                            */

          Cinitialisation(valeur_initiale,R0_Complexe,I0_Complexe);
          CALS(IJinitialisation(fonction_zeta_de_Riemann,ADRESSE(valeur_initiale)));
                                        /* Initialisation du processus iteratif sur :                                                */
                                        /*                                                                                           */
                                        /*                  zeta(C) = 0                                                              */
                                        /*                                                                                           */

          CALCUL_DU_RAPPORT_DE_REDUCTION;

          DoIn(numero_d_image
              ,PREMIERE_IMAGE_ABSOLUE
              ,LSTX(PREMIERE_IMAGE_ABSOLUE,nombre_d_images)
              ,I
               )
               Bblock
               Test(IFGE(numero_d_image,PREMIERE_IMAGE))
                    Bblock
                                        /* Afin de se positionner dans la sequence...                                                */
                    CALS(IJfonction_serie_zeta_dans_C(fonction_zeta_de_Riemann
                                                     ,fonction_zeta_de_Riemann
                                                     ,ADRESSE(coin_bas_gauche_de_depart_puis_courant)
                                                     ,ADRESSE(coin_haut_droite_de_depart_puis_courant)
                                                     ,premiere_iteration_effective
                                                     ,nombre_d_iterations
                                                      )
                         );
                                        /* Calcul de la fonction 'zeta' de Riemann.                                                  */

                    Test(IFOU(IFOU(IL_FAUT(generer_la_partie_reelle),IL_FAUT(generer_la_partie_imaginaire))
                             ,IFOU(IL_FAUT(generer_le_module),IL_FAUT(generer_la_phase))
                              )
                         )
                         Bblock
                         CALS(Icomplexe_reelle(partie_reelle_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
                         CALS(Icomplexe_imaginaire(partie_imaginaire_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
                                        /* Recuperation des parties Reelles et Imaginaires de la fonction 'zeta' de Riemann,         */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IFOU(IL_FAUT(generer_le_module),IL_FAUT(generer_la_phase)))
                         Bblock
                         CALS(Iconversion_XY_RT(module_de_la_fonction_zeta_de_Riemann
                                               ,phase_de_la_fonction_zeta_de_Riemann
                                               ,partie_reelle_de_la_fonction_zeta_de_Riemann
                                               ,partie_imaginaire_de_la_fonction_zeta_de_Riemann
                                                )
                              );
                                        /* Puis calcul du Module et de la Phase dans [0,2.PI].                                       */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    GENERATION_D_UN_TYPE_D_IMAGE(generer_la_partie_reelle
                                                ,nom_imageRR
                                                ,partie_reelle_de_la_fonction_zeta_de_Riemann
                                                ,imageRR
                                                ,BLOC(VIDE;)
                                                 );
                    GENERATION_D_UN_TYPE_D_IMAGE(generer_la_partie_imaginaire
                                                ,nom_imageRI
                                                ,partie_imaginaire_de_la_fonction_zeta_de_Riemann
                                                ,imageRI
                                                ,BLOC(VIDE;)
                                                 );
                    GENERATION_D_UN_TYPE_D_IMAGE(generer_le_module
                                                ,nom_imageRMo
                                                ,module_de_la_fonction_zeta_de_Riemann
                                                ,imageRMo
                                                ,BLOC(Bblock
                                                      Test(IL_FAUT(prendre_une_dynamique_logarithmique_pour_le_module))
                                                           Bblock
                                                           CALS(IFdynamique_logarithmique_avec_translation_dynamique
                                                                    (module_de_la_fonction_zeta_de_Riemann
                                                                    ,module_de_la_fonction_zeta_de_Riemann
                                                                     )
                                                                );
                                                           Eblock
                                                      ATes
                                                           Bblock
                                                           Eblock
                                                      ETes
                                                      Eblock
                                                      )
                                                 );
                    GENERATION_D_UN_TYPE_D_IMAGE(generer_la_phase
                                                ,nom_imageRPh
                                                ,phase_de_la_fonction_zeta_de_Riemann
                                                ,imageRPh
                                                ,BLOC(VIDE;)
                                                 );
                                        /* Generation des images demandees.                                                          */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               EGAL(premiere_iteration_effective
                   ,SUCC(LSTX(PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN,nombre_d_iterations))
                    );
                                        /* Et evolution du numero de la premiere iteration effective, qui correspond a celle qui     */
                                        /* suit la derniere qui vient d'etre calculee...                                             */
               INCR(nombre_d_iterations,pas_d_evolution_du_nombre_d_iterations);
                                        /* Et progression du nombre d'iterations...                                                  */

               REDUCTION_DE_LA_FENETRE_COURANTE;
               Eblock
          EDoI

          EDEFV(image,imageRPh);
          EDEFV(image,imageRMo);
          EDEFV(image,imageRI);
          EDEFV(image,imageRR);
                                        /* Definition des images "standards" necessaires.                                            */
          EDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
          EDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
          EDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
          EDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
                                        /* Definition des images flottantes necessaires.                                             */
          EDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Definition de la fonction zeta complexe.                                                  */
          Eblock
     end_nouveau_block

     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.