/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E S O L U T I O N   D ' E Q U A T I O N S   L I N E A I R E S   I N D E T E R M I N E E S   E N   { X , Y , Z }  :       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Application :                                                                                                              */
/*                                                                                                                                   */
/*                    Une application de ce programme de                                                                             */
/*                  resolution "aleatoire" d'equations a trois                                                                       */
/*                  inconnues du type :                                                                                              */
/*                                                                                                                                   */
/*                                      A*X + B*Y + C*Z = D                                                                          */
/*                                                                                                                                   */
/*                  est la definition de palettes de couleurs                                                                        */
/*                  a luminance strictement croissante. On                                                                           */
/*                  resoudra donc :                                                                                                  */
/*                                                                                                                                   */
/*                                      0.30*R + 0.59*V + 0.11*B = LUMINANCE                                                         */
/*                                                                                                                                   */
/*                  ou {0.30,0.59,0.11} sont respectivement                                                                          */
/*                  'v $xiii/quad_image$DEF LUMINANCE_DU_'.                                                                          */
/*                  Ainsi, pour chaque LUMINANCE dans [$NOIR,$BLANC]                                                                 */
/*                  on calculera un triplet {R,V,B} ayant cette                                                                      */
/*                  luminance ('v $xciP/aleatoire.01$vv$Z' qui                                                                       */
/*                  realise cela...).                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/EquationsIndeterminees_3D.01$K' :                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20210517101353).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   UTILISER_LE_PARAMETRE_D_COMME_BORNE_SUPERIEURE                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il utiliser le parametre D pour les trois bornes superieures ('VRAI') ou bien        */ \
                                        /* prendre des valeurs par defaut ('FAUX') ? Ceci fut introduit le 20210520151707...         */

#define   NOMBRE_MAXIMAL_D_ITERATIONS                                                                                                   \
                    MILLE                                                                                                               \
                                        /* Nombre maximal d'iterations de recherche d'une solution...                                */

#define   GRAINE_X                                                                                                                      \
                    PARE(1789)
#define   GRAINE_Y                                                                                                                      \
                    PARE(1947)
#define   GRAINE_Z                                                                                                                      \
                    PARE(2001)
                                        /* Graines de generation aleatoire...                                                        */

#define   FACTEUR_X                                                                                                                     \
                    FRA10(FRA2(FU))
#define   FACTEUR_Y                                                                                                                     \
                    FRA10(FRA2(FU))
#define   FACTEUR_Z                                                                                                                     \
                    FRA10(FRA2(FU))
                                        /* Afin de calculer les bornes inferieure et superieure de generation aleatoire...           */

#define   PONDERATION_X_IMPLICITE                                                                                                       \
                    FZERO
#define   PONDERATION_Y_IMPLICITE                                                                                                       \
                    FZERO
#define   PONDERATION_Z_IMPLICITE                                                                                                       \
                    FZERO
                                        /* Ponderation de selection des varaiables apres resolution...                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F I C H I E R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214175329...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   PARAMETRE_A_IMPLICITE                                                                                                         \
                    FU
#define   PARAMETRE_B_IMPLICITE                                                                                                         \
                    FU
#define   PARAMETRE_C_IMPLICITE                                                                                                         \
                    FU
#define   PARAMETRE_D_IMPLICITE                                                                                                         \
                    FU

#define   BORNE_INFERIEURE_X_IMPLICITE                                                                                                  \
                    FZERO
#define   BORNE_INFERIEURE_Y_IMPLICITE                                                                                                  \
                    FZERO
#define   BORNE_INFERIEURE_Z_IMPLICITE                                                                                                  \
                    FZERO

#define   BORNE_SUPERIEURE_X_IMPLICITE                                                                                                  \
                    FZERO
#define   BORNE_SUPERIEURE_Y_IMPLICITE                                                                                                  \
                    FZERO
#define   BORNE_SUPERIEURE_Z_IMPLICITE                                                                                                  \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_parametres_A,liste_des_parametres_A);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_B,liste_des_parametres_B);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_C,liste_des_parametres_C);
gGENERATION_D_UN_FICHIER(fichier_des_parametres_D,liste_des_parametres_D);

gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_X,liste_des_bornes_inferieures_X);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_Y,liste_des_bornes_inferieures_Y);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_inferieures_Z,liste_des_bornes_inferieures_Z);

gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_X,liste_des_bornes_superieures_X);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_Y,liste_des_bornes_superieures_Y);
gGENERATION_D_UN_FICHIER(fichier_des_bornes_superieures_Z,liste_des_bornes_superieures_Z);
                                        /* Definition en memoire des fichiers.                                                       */
#define   ELEMENT_DU_FICHIER_DES_PARAMETRES_A(index)                                                                                    \
                    gELEMENT_DU_FICHIER(liste_des_parametres_A,index)
#define   ELEMENT_DU_FICHIER_DES_PARAMETRES_B(index)                                                                                    \
                    gELEMENT_DU_FICHIER(liste_des_parametres_B,index)
#define   ELEMENT_DU_FICHIER_DES_PARAMETRES_C(index)                                                                                    \
                    gELEMENT_DU_FICHIER(liste_des_parametres_C,index)
#define   ELEMENT_DU_FICHIER_DES_PARAMETRES_D(index)                                                                                    \
                    gELEMENT_DU_FICHIER(liste_des_parametres_D,index)

#define   ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_X(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_X,index)
#define   ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Y(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_Y,index)
#define   ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Z(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_inferieures_Z,index)

#define   ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_X(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_superieures_X,index)
#define   ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Y(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_superieures_Y,index)
#define   ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Z(index)                                                                            \
                    gELEMENT_DU_FICHIER(liste_des_bornes_superieures_Z,index)
                                        /* Acces a un element courant des fichiers.                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E S O L U T I O N   D ' E Q U A T I O N S   L I N E A I R E S   I N D E T E R M I N E E S   E N   { X , Y , Z }  :       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(utiliser_le_parametre_D_comme_borne_superieure,UTILISER_LE_PARAMETRE_D_COMME_BORNE_SUPERIEURE));
                                        /* Faut-il utiliser le parametre D pour les trois bornes superieures ('VRAI') ou bien        */
                                        /* prendre des valeurs par defaut ('FAUX') ? Ceci fut introduit le 20210520151707...         */

     DEFV(Positive,INIT(nombre_maximal_d_iterations,NOMBRE_MAXIMAL_D_ITERATIONS));
                                        /* Nombre maximal d'iterations de recherche d'une solution...                                */

     DEFV(Int,INIT(graine_X,GRAINE_X));
     DEFV(Int,INIT(graine_Y,GRAINE_Y));
     DEFV(Int,INIT(graine_Z,GRAINE_Z));
                                        /* Graines de generation aleatoire...                                                        */
     DEFV(Float,INIT(facteur_X,FACTEUR_X));
     DEFV(Float,INIT(facteur_Y,FACTEUR_Y));
     DEFV(Float,INIT(facteur_Z,FACTEUR_Z));
                                        /* Afin de calculer les bornes inferieure et superieure de generation aleatoire...           */

     RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_GLOBALES;
                                        /* Mis sous cette forme le 20210520090316...                                                 */

     DEFV(Float,INIT(ponderation_X,PONDERATION_X_IMPLICITE));
     DEFV(Float,INIT(ponderation_Y,PONDERATION_Y_IMPLICITE));
     DEFV(Float,INIT(ponderation_Z,PONDERATION_Z_IMPLICITE));
                                        /* Ponderation de selection des varaiables apres resolution...                               */

#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("parametres_A="
                                                 ,fichier_des_parametres_A
                                                 ,liste_des_parametres_A
                                                 ,PARAMETRE_A_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("parametres_B="
                                                 ,fichier_des_parametres_B
                                                 ,liste_des_parametres_B
                                                 ,PARAMETRE_B_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("parametres_C="
                                                 ,fichier_des_parametres_C
                                                 ,liste_des_parametres_C
                                                 ,PARAMETRE_C_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("parametres_D="
                                                 ,fichier_des_parametres_D
                                                 ,liste_des_parametres_D
                                                 ,PARAMETRE_D_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("bornes_inferieures_X="
                                                 ,fichier_des_bornes_inferieures_X
                                                 ,liste_des_bornes_inferieures_X
                                                 ,BORNE_INFERIEURE_X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("bornes_inferieures_Y="
                                                 ,fichier_des_bornes_inferieures_Y
                                                 ,liste_des_bornes_inferieures_Y
                                                 ,BORNE_INFERIEURE_Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("bornes_inferieures_Z="
                                                 ,fichier_des_bornes_inferieures_Z
                                                 ,liste_des_bornes_inferieures_Z
                                                 ,BORNE_INFERIEURE_Z_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("bornes_superieures_X="
                                                 ,fichier_des_bornes_superieures_X
                                                 ,liste_des_bornes_superieures_X
                                                 ,BORNE_SUPERIEURE_X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("bornes_superieures_Y="
                                                 ,fichier_des_bornes_superieures_Y
                                                 ,liste_des_bornes_superieures_Y
                                                 ,BORNE_SUPERIEURE_Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("bornes_superieures_Z="
                                                 ,fichier_des_bornes_superieures_Z
                                                 ,liste_des_bornes_superieures_Z
                                                 ,BORNE_SUPERIEURE_Z_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_L("parametre_D_borne_superieure=""pDbs=",utiliser_le_parametre_D_comme_borne_superieure);

                         GET_ARGUMENT_I("iterations=",nombre_maximal_d_iterations);

                         GET_ARGUMENT_I("graine_X=""gX=",graine_X);
                         GET_ARGUMENT_I("graine_Y=""gY=",graine_Y);
                         GET_ARGUMENT_I("graine_Z=""gZ=",graine_Z);

                         GET_ARGUMENT_F("facteur_X=""fX=",facteur_X);
                         GET_ARGUMENT_F("facteur_Y=""fY=",facteur_Y);
                         GET_ARGUMENT_F("facteur_Z=""fZ=",facteur_Z);

                         GET_ARGUMENT_F("pX=""Pond1=",ponderation_X);
                         GET_ARGUMENT_F("pY=""Pond2=",ponderation_Y);
                         GET_ARGUMENT_F("pZ=""Pond3=",ponderation_Z);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
                                        /* Cette procedure fut introduite le 20211005104218...                                       */
                         )
                    );

     RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__INITIALISATION;
                                        /* Mis sous cette forme le 20210520090316...                                                 */

     gOPERATION_SUR_LES_FICHIERS(BLOC(
                                      DEFV(Float,INIT(parametre_A,ELEMENT_DU_FICHIER_DES_PARAMETRES_A(index)));
                                      DEFV(Float,INIT(parametre_B,ELEMENT_DU_FICHIER_DES_PARAMETRES_B(index)));
                                      DEFV(Float,INIT(parametre_C,ELEMENT_DU_FICHIER_DES_PARAMETRES_C(index)));
                                      DEFV(Float,INIT(parametre_D,ELEMENT_DU_FICHIER_DES_PARAMETRES_D(index)));

                                      DEFV(Float,INIT(borne_inferieure_courante_X,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_X(index)));
                                      DEFV(Float,INIT(borne_inferieure_courante_Y,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Y(index)));
                                      DEFV(Float,INIT(borne_inferieure_courante_Z,ELEMENT_DU_FICHIER_DES_BORNES_INFERIEURES_Z(index)));

                                      DEFV(Float,INIT(borne_superieure_courante_X,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_X(index)));
                                      DEFV(Float,INIT(borne_superieure_courante_Y,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Y(index)));
                                      DEFV(Float,INIT(borne_superieure_courante_Z,ELEMENT_DU_FICHIER_DES_BORNES_SUPERIEURES_Z(index)));
                                        /* Recuperation des valeurs courantes dans les fichiers.                                     */

                                      RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D__DONNEES_UTILES_LOCALES;
                                        /* Mis sous cette forme le 20210520095916...                                                 */

                                      RESOLUTION_EQUATION_LINEAIRE_INDETERMINEE_3D(parametre_A
                                                                                  ,parametre_B
                                                                                  ,parametre_C
                                                                                  ,parametre_D
                                                                                  ,utiliser_le_parametre_D_comme_borne_superieure
                                                                                  ,borne_inferieure_courante_X
                                                                                  ,borne_superieure_courante_X
                                                                                  ,borne_inferieure_courante_Y
                                                                                  ,borne_superieure_courante_Y
                                                                                  ,borne_inferieure_courante_Z
                                                                                  ,borne_superieure_courante_Z
                                                                                   );
                                        /* Mis sous cette forme le 20210520090316...                                                 */
                                      )
                                ,LIZ3(ponderation_X,solution_X
                                     ,ponderation_Y,solution_Y
                                     ,ponderation_Z,solution_Z
                                      )
                                ,EDITER_LA_VALEUR_RESULTANTE_DANS_gOPERATION_SUR_LES_FICHIERS
                                ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
                                 );
                                        /* Combinaison des trois fichiers arguments.                                                 */

     lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_Z,BORNE_SUPERIEURE_Z_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_Y,BORNE_SUPERIEURE_Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_bornes_superieures_X,BORNE_SUPERIEURE_X_IMPLICITE);

     lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_Z,BORNE_INFERIEURE_Z_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_Y,BORNE_INFERIEURE_Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_bornes_inferieures_X,BORNE_INFERIEURE_X_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



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