/*************************************************************************************************************************************/
/* */
/* E T U D E D E L ' A C T I V I T E N E U R O N A L E S P O N T A N E E : */
/* */
/* */
/* ....+o*o+-::::---..:......................... . . */
/* ....:-o*o+:::-:-::.......................... .. .. */
/* .. .:-o**+::.-:-:::........................... .... . */
/* ..:-+oo+:..::--::...................... .. .. */
/* ....-+oo-:..:::-::.......................... .. . . . */
/* . ..-oo+-:..::-:..:......................... . . */
/* ....:+o+-...:::-::..................... . . ... . . */
/* ....-+o+-:..:::::::................... ... . . . */
/* ...-+++-:...-::..:....:............... .... */
/* ....-++-::...::::................... ....... . . . */
/* ....:+++::..:..:.:.......................... .. . . */
/* ....--+-:...:::.......................... . . .. . . */
/* ...----:...:::::........................ . . */
/* .....--:::....:.:..................... .. . . . */
/* . ...:---:.......:..................... ... . . . . */
/* ....:--:................................ ... .. . */
/* . ....:-:............................ . . . . . */
/* ....:::.......................... ... . . */
/* .....:::........................... . . .. . */
/* ....:.:.......................... . . ...... */
/* ....:.:............................ .. ... .. . */
/* ......:............................... .... . */
/* . ............................... .. .. .. */
/* ................................... ... . . .. */
/* .......................... . ..... . */
/* ............................ ..... . . . . */
/* ......................... . .. . ... . */
/* ..................... ......... . */
/* ........................ ..... .. . .. */
/* ........ ........ ... .... . . . .. */
/* .. ..... ...... .... .. . */
/* .... . . */
/* */
/* */
/* Author of '$xrq/synapse.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_____MODULE_NON_DERIVABLE
@define PRAGMA_CL_____MODULE_NON_OPTIMISABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E B A S E E T U N I V E R S E L L E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.11.I"
#include xrv/particule.41.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F O N C T I O N S U T I L E S ( C O M P A T I B I L I T E ) : */
/* */
/*************************************************************************************************************************************/
#include xrq/synapse.18.I"
#include xrq/synapse.19.I"
/* Inutile, mais pour la compatibilite... */
/* Introduit le 20030130113158 a cause de 'v $xcc/cpp$Z INCLUDES_1.sed'. */
#include xrk/attractor.12.I"
#define NOMBRE_D_ITERATIONS \
HUIT \
/* Ici, il definit le nombre d'elements que l'on sommera pour calculer la probabilite */ \
/* d'observer spontanement le signal 'x'... */
#include xrs/surfaces.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S S Y N A P S E S : */
/* */
/* */
/* Definition : */
/* */
/* L'influx nerveux est transmis le long */
/* des axones par un potentiel d'action (lui */
/* meme materialise par la concentration en ions */
/* Na+ et K+). Il est transmis de neurone en */
/* neurone a l'aide de neuro-mediateurs (tel */
/* l'Acetycholine) qui sont stockes dans des */
/* vesicules. Ces vesicules peuvent se fondre */
/* avec la membrane cellulaire ("exocytose" ?) */
/* et leur contenu se trouver libere dans le */
/* vide synaptique... */
/* */
/* */
/* Definition des probabilites : */
/* */
/* 1-probabilite d'exciter 'n' vesicules synaptiques : */
/* */
/* n */
/* -lambda lambda */
/* P(n) = e .--------- */
/* n! */
/* */
/* */
/* 2-probabilite d'observer un signal 'x' si 'n' vesicules sont excitees : */
/* */
/* 2 */
/* (x-n) */
/* - ------------ */
/* 2 */
/* 1 2.n.sigma */
/* P (x) = -------------------.e */
/* n \ ________ */
/* sigma. \/ 2.pi.n */
/* */
/* (ou le facteur multiplicatif est la pour assurer que la */
/* probabilite 'P(x)' est bien dans [0,1], et s'obtient en */
/* integrant de 0 a l'infini...). */
/* */
/* */
/* 3-densite de probabilite d'observer spontanement un signal 'x' : */
/* */
/* 2 */
/* n=infini (x-n) */
/* __________ - ------------ */
/* \ n 2 */
/* 1 \ lambda 1 2.n.sigma */
/* P(x) = ---------------. / ---------. -------------------.e */
/* lambda /_________ n! \ ________ */
/* (e - 1) sigma. \/ 2.pi.n */
/* n=1 */
/* */
/* */
/* ('infini' sera designe par la suite comme etant 'nombre_d_iterations') */
/* */
/* avec : */
/* */
/* +infini */
/* */
/* / */
/* || */
/* || P(x)dx = 1 */
/* || */
/* / */
/* */
/* -infini */
/* */
/* d'ou le coefficient de normalisation puisque : */
/* */
/* n=infini */
/* __________ */
/* \ n */
/* \ lambda lambda */
/* / --------- = e */
/* /_________ n! */
/* */
/* n=0 */
/* */
/* n=infini */
/* __________ */
/* \ n */
/* \ lambda lambda */
/* / --------- = e - 1 */
/* /_________ n! */
/* */
/* n=1 */
/* */
/* enfin, on rappelle que : */
/* */
/* +infini */
/* */
/* / */
/* || */
/* || 2 */
/* || -x \ ____ */
/* || e dx = \/ pi */
/* || */
/* / */
/* */
/* -infini */
/* */
/* */
/* Information visualisee : */
/* */
/* */
/* . */
/* nombre /|\ */
/* d'evenements | */
/* generes | */
/* | ....+o*o+-::::---..:......................... . . lambda=1.5 */
/* | ....:-o*o+:::-:-::.......................... .. .. sigma=0.25 */
/* | .. .:-o**+::.-:-:::........................... .... . */
/* | ..:-+oo+:..::--::...................... .. .. */
/* | ....-+oo-:..:::-::.......................... .. . . . */
/* | . ..-oo+-:..::-:..:......................... . . */
/* | ....:+o+-...:::-::..................... . . ... . . */
/* | ....-+o+-:..:::::::................... ... . . . */
/* | ...-+++-:...-::..:....:............... .... */
/* | ....-++-::...::::................... ....... . . . */
/* | ....:+++::..:..:.:.......................... .. . . */
/* | ....--+-:...:::.......................... . . .. . . */
/* | ...----:...:::::........................ . . */
/* | .....--:::....:.:..................... .. . . . */
/* | . ...:---:.......:..................... ... . . . . */
/* | ....:--:................................ ... .. . */
/* | . ....:-:............................ . . . . . */
/* | ....:::.......................... ... . . */
/* | .....:::........................... . . .. . */
/* | ....:.:.......................... . . ...... */
/* | ....:.:............................ .. ... .. . */
/* | ......:............................... .... . */
/* | . ............................... .. .. .. */
/* | ................................... ... . . .. */
/* | .......................... . ..... . */
/* | ............................ ..... . . . . */
/* | ......................... . .. . ... . */
/* | ..................... ......... . */
/* | ........................ ..... .. . .. */
/* | ........ ........ ... .... . . . .. */
/* | .. ..... ...... .... .. . */
/* | .... . . */
/* O----------------------------------------------------------------------> */
/* */
/* signal 'x' observe */
/* */
/* Le nombre d'evenements generes est donne */
/* pour la totalite d'une ligne 'Y' donnee. Cela */
/* explique la divisions qui sera faite plus tard */
/* par 'dimX' afin de generer un certain nombre */
/* d'evenements en chaque point {X,Y}... */
/* */
/* Le niveau de gris de chaque point visualise */
/* donc le nombre de signaux 'x' observes (la valeur */
/* de 'x' etant une fonction de l'abscisse 'X' pour */
/* un nombre donne d'evenements generes (et defini */
/* comme une fonction de l'ordonnee 'Y'). */
/* */
/* */
/* Examinons une coupe horizontale du champ */
/* precedent obtenue par '$xci/coupe$X' pour une */
/* ordonnee de 0.9 : */
/* */
/* . */
/* nombre /|\ */
/* de signaux 'x' | */
/* observes | */
/* | . */
/* | . diminuer 'sigma' permet de reduire la largeur des pics, */
/* | ... augmenter 'lambda' permet de remonter l'ensemble des pics. */
/* | ... */
/* | ... */
/* | ... */
/* | ... */
/* | ... */
/* | ... */
/* | ..... */
/* | ..... . */
/* | ..... ... */
/* | ..... ... */
/* | ..... ... */
/* | ..... .... . */
/* | ...... ...... */
/* | ...... ...... */
/* | ............... . */
/* | ................ ... */
/* | .................... . */
/* | ...................... .. */
/* | ........................... */
/* | ............................ .. */
/* | ............................. ... */
/* | ................................................................ */
/* O----------------------------------------------------------------------> */
/* */
/* signal 'x' observe */
/* */
/* */
/*************************************************************************************************************************************/
#define INDICE_N1 \
UN \
/* Premier indice d'une sommation... */
dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS)
/* Definition du fichier des nombres d'iterations. */
#define sNOMBRE_D_ITERATIONS(numero_de_la_periode) \
INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS)) \
/* Formule generale definissant les variations du nombre d'iterations. */
#define LAMBDA \
GRO3(FRA2(FU))
#define SIGMA \
GRO1(FRA8(FU))
DEFV(Local,DEFV(Float,INIT(lambda,LAMBDA)));
DEFV(Local,DEFV(Float,INIT(sigma,SIGMA)));
/* Definition de la valeur des parametres 'lambda' et 'sigma'. */
#define PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE \
FAUX
DEFV(Local,DEFV(Logical,INIT(prendre_une_dynamique_logarithmique,PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE)));
/* Faut-il prendre une dynamique logarithmique ('VRAI') ou laisser la comptabilisation des */
/* collisions telle qu'elle a ete calculee ('FAUX') ? */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */
/* */
/*************************************************************************************************************************************/
dfTRANSFORMAT_31(liste_LAMBDA,fichier_LAMBDA,LAMBDA_IMPLICITE,LAMBDA)
dfTRANSFORMAT_31(liste_SIGMA,fichier_SIGMA,SIGMA_IMPLICITE,SIGMA)
/* Definition des fichiers des parametres 'lambda' et 'sigma'. */
#define sLAMBDA(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_LAMBDA))
#define sSIGMA(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_SIGMA))
/* Formule generale definissant les variations des parametres 'lambda' et 'sigma'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A D E N S I T E D E P R O B A B I L I T E : */
/* */
/*************************************************************************************************************************************/
#define CALCUL_DE_LA_DENSITE_DE_PROBABILITE(sequence) \
Bblock \
begin_ligne \
Bblock \
DEFV(Float,INIT(signal_a_observer \
,HOMO(X \
,Xmin,Xmax \
,signal_minimal_a_observer,signal_maximal_a_observer \
) \
) \
); \
/* Valeur du signal 'x' a observer (associe a la coordonnee 'X'). */ \
DEFV(Float,INIT(densite_de_probabilite_en_X,FZERO)); \
/* Pour decreter que l'evenement ("signal 'x'" detecte) a ete rencontre. Cette valeur est */ \
/* est en fait un cumul initialise a 0... */ \
DEFV(Int,INIT(indice_n,UNDEF)); \
/* Indice 'n' de calcul de la probabilite... */ \
\
DoIn(indice_n,INDICE_N1,nombre_d_iterations,I) \
Bblock \
INCR(densite_de_probabilite_en_X \
,MUL3(DIVI(MONX(lambda,indice_n) \
,FACT(indice_n) \
) \
,INVE(MUL2(sigma,RACX(MUL2(CERCLE_TRIGONOMETRIQUE,FLOT(indice_n))))) \
,EXEX(NEGA(DIVI(EXP2(SOUS(signal_a_observer,FLOT(indice_n))) \
,MUL3(FDEUX,FLOT(indice_n),EXP2(sigma)) \
) \
) \
) \
) \
); \
/* Calcul incremental de la densite de probabilite d'observer spontanement */ \
/* 'signal_a_observer'. On notera l'utilisation de la fonction 'EXEX(...)', et ceci a cause */ \
/* d'eventuels bugs du type 'BUG_SYSTEME_SGIND424_IRIX_CC_pow' (anomalie definie lorsque le */ \
/* fichier '$xil/defi_K2$vv$DEF' est utilise) ou 'BUG_SYSTEME_SG_C_pow' (anomalie definie */ \
/* lorsque le fichier '$xil/defi_K2$vv$DEF' est utilise) rapidement ici ; par exemple : */ \
/* */ \
/* x = 4.7749510763209386 */ \
/* sigma = 0.1 */ \
/* n = 1 */ \
/* */ \
/* donne pour l'exposant de l'exponentielle la valeur -712.513... */ \
Eblock \
EDoI \
\
EGAL(densite_de_probabilite_en_X \
,MUL2(INVZ(SOUS(EXEX(lambda),FU)) \
,densite_de_probabilite_en_X \
) \
); \
/* Calcul de la densite de probabilite d'observer spontanement le signal */ \
/* 'signal_a_observer' : */ \
/* */ \
/* 2 */ \
/* n=infini (x-n) */ \
/* __________ - ------------ */ \
/* \ n 2 */ \
/* 1 \ lambda 1 2.n.sigma */ \
/* P(x) = ---------------. / ---------. -------------------.e */ \
/* lambda /_________ n! \ ________ */ \
/* (e - 1) sigma. \/ 2.pi.n */ \
/* n=1 */ \
/* */ \
BLOC(sequence); \
/* Calcul des extrema de la densite de probabilite ou memorisation de la densite de */ \
/* probabilite au point 'X'. */ \
Eblock \
end_ligne \
Eblock \
/* Procedure d'etude de la densite de probabilite... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S E V E N E M E N T S A G E N E R E R E T A A T T E N D R E : */
/* */
/*************************************************************************************************************************************/
#include xrq/nucleon.LC.I"
#define NOMBRE_MINIMAL_D_EVENEMENTS \
GRO1(k___dimX)
#define NOMBRE_MAXIMAL_D_EVENEMENTS \
GRO1(k___dimXY)
DEFV(Local,DEFV(Int,INIT(nombre_minimal_d_evenements,NOMBRE_MINIMAL_D_EVENEMENTS)));
DEFV(Local,DEFV(Int,INIT(nombre_maximal_d_evenements,NOMBRE_MAXIMAL_D_EVENEMENTS)));
/* Definition du nombre d'evenements a simuler. ATTENTION, dans le cas ou : */
/* */
/* IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents) */
/* */
/* il vaut mieux prendre pour 'nombre_maximal_d_evenements' une valeur de l'ordre de : */
/* */
/* FRA4(k___dimXY) */
/* */
/* ou inferieure... */
#define SIGNAL_MINIMAL_A_OBSERVER \
FZERO
#define SIGNAL_MAXIMAL_A_OBSERVER \
GRO8(FU)
DEFV(Local,DEFV(Float,INIT(signal_minimal_a_observer,SIGNAL_MINIMAL_A_OBSERVER)));
DEFV(Local,DEFV(Float,INIT(signal_maximal_a_observer,SIGNAL_MAXIMAL_A_OBSERVER)));
/* Definition du signal a observer... */
#define DES_TIRAGES_ALEATOIRES_COHERENTS \
VRAI
DEFV(Local,DEFV(Logical,INIT(des_tirages_aleatoires_coherents,DES_TIRAGES_ALEATOIRES_COHERENTS)));
/* Cet indicateur precise s'il doit y avoir coherence de la generation aleatoire d'une */
/* ligne a l'autre ('VRAI') ou independance ('FAUX'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P O U R D E S R A I S O N S D E C O M P A T I B I L I T E : */
/* */
/*************************************************************************************************************************************/
#include xrk/integr.1B.vv.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.18.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E T U D E D E L ' A C T I V I T E N E U R O N A L E S P O N T A N E E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
/* Nom de la sequence d'images a generer. */
DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
/* Nom courant des images. */
/*..............................................................................................................................*/
INITIALISATIONS_GENERALES;
/* Initialisations generales faites au tout debut... */
iTRANSFORMAT_31(liste_LAMBDA,LAMBDA_IMPLICITE);
iTRANSFORMAT_31(liste_SIGMA,SIGMA_IMPLICITE);
/* Initialisation des parametres 'lambda' et 'sigma'. */
iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE);
/* Initialisation du nombre d'iterations. */
#include xrv/champs_5.1A.I"
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;
PROCESS_ARGUMENT_FICHIER("LAMBDA="
,fichier_LAMBDA
,liste_LAMBDA
,LAMBDA_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("SIGMA="
,fichier_SIGMA
,liste_SIGMA
,SIGMA_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS="
,fichier_NOMBRE_D_ITERATIONS
,liste_NOMBRE_D_ITERATIONS
,NOMBRE_D_ITERATIONS_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENTS_DE_VISUALISATION;
GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);
GET_ARGUMENT_I("graine=",graine_du_generateur_d_evenements);
GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
GET_ARGUMENT_L("coherents=""coherence=",des_tirages_aleatoires_coherents);
GET_ARGUMENT_I("Nmin=",nombre_minimal_d_evenements);
GET_ARGUMENT_I("Nmax=",nombre_maximal_d_evenements);
GET_ARGUMENT_F("Smin=",signal_minimal_a_observer);
GET_ARGUMENT_F("Smax=",signal_maximal_a_observer);
GET_ARGUMENT_L("logarithmique=""log=",prendre_une_dynamique_logarithmique);
)
);
#include xrq/synapse.11.I"
begin_nouveau_block
Bblock
DEFV(genere_Float,INIT(minimum_de_la_densite_de_probabilite,F_INFINI));
DEFV(genere_Float,INIT(maximum_de_la_densite_de_probabilite,F_MOINS_L_INFINI));
/* Afin de rechercher les extrema de la densite de probabilite 'P(x)'. On notera qu'il */
/* est essentiel que ces extrema soient calcules par rapport a l'ensemble des parametres */
/* variables ('sLAMBDA', 'sSIGMA' et 'sNOMBRE_D_ITERATIONS'). */
DONNEES_DE_RECHERCHE_DES_EXTREMA_GLOBAUX_D_UNE_SEQUENCE_D_IMAGES;
/* Extrema globaux de l'ensemble de la sequence... */
BDEFV(imageF,comptage_des_signaux);
/* Image flottante dans laquelle on trouve le nombre de signaux 'x' observes... */
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
Bblock
EGAL(lambda,sLAMBDA(numero_de_la_periode_courante));
EGAL(sigma,sSIGMA(numero_de_la_periode_courante));
/* Calcul de la valeur des parametres 'lambda' et 'sigma'. */
vTRANSFORMAT_31(nombre_d_iterations
,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
);
/* Calcul du nombre d'iterations lorsqu'il est variable. */
CALCUL_DE_LA_DENSITE_DE_PROBABILITE(BLOC(Bblock
EGAL(minimum_de_la_densite_de_probabilite
,MIN2(densite_de_probabilite_en_X
,minimum_de_la_densite_de_probabilite
)
);
EGAL(maximum_de_la_densite_de_probabilite
,MAX2(densite_de_probabilite_en_X
,maximum_de_la_densite_de_probabilite
)
);
Eblock
)
);
/* Calcul des extrema de la densite de probabilite par rapport a l'ensemble des parametres */
/* variables ('sLAMBDA', 'sSIGMA' et 'sNOMBRE_D_ITERATIONS'). */
INCR(numero_de_la_periode_courante,I);
/* Et passage a l'image suivante... */
Eblock
EKom
EGAL(numero_de_la_periode_courante,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION);
/* Reinitialisation... */
Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
Bblock
BDEFV(ligneF,densite_de_probabilite);
/* Calcul de la densite de probabilite 'P(x)' en chaque point 'X'. */
DONNEES_DE_RECHERCHE_DES_EXTREMA_LOCAUX_D_UNE_SEQUENCE_D_IMAGES;
/* Extrema locaux de la sequence... */
FORCAGE_DE_LA_REINITIALISATION_DU_GENERATEUR_D_EVENEMENTS;
/* Afin de forcer la (re-)initialisation du generateur d'evenements afin de garantir la */
/* "continuite" entre les differentes images... */
EGAL(lambda,sLAMBDA(numero_de_la_periode_courante));
EGAL(sigma,sSIGMA(numero_de_la_periode_courante));
/* Calcul de la valeur des parametres 'lambda' et 'sigma'. */
vTRANSFORMAT_31(nombre_d_iterations
,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
);
/* Calcul du nombre d'iterations lorsqu'il est variable. */
CALCUL_DE_LA_DENSITE_DE_PROBABILITE(BLOC(Bblock
Test(IFEXff(densite_de_probabilite_en_X
,minimum_de_la_densite_de_probabilite
,maximum_de_la_densite_de_probabilite
)
)
Bblock
PRINT_ATTENTION("la densite de probabilite 'P(x)' deborde");
CAL1(Prer2("P(%d)=%g\n",X,densite_de_probabilite_en_X));
CAL1(Prer1("minimum global=%g\n"
,minimum_de_la_densite_de_probabilite
)
);
CAL1(Prer1("maximum global=%g\n"
,maximum_de_la_densite_de_probabilite
)
);
CAL1(Prer3("lambda=%g sigma=%g infini=%d\n"
,lambda,sigma,nombre_d_iterations
)
);
Eblock
ATes
Bblock
Eblock
ETes
EGAL(LIGNE(densite_de_probabilite,X,Ymin)
,HOMO(densite_de_probabilite_en_X
,minimum_de_la_densite_de_probabilite
,maximum_de_la_densite_de_probabilite
,EVENEMENT_IMPOSSIBLE
,EVENEMENT_CERTAIN
)
);
Eblock
)
);
/* Calcul de la densite de probabilite renormalisee. */
begin_colonne
Bblock
DEFV(Int,INIT(nombre_d_evenements_de_la_ligne_precedente
,COND(IFOU(IFEQ(Y,Ymin),IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents))
,ZERO
,INTE(DIVI(HOMO(PREY(Y)
,Ymin,Ymax
,nombre_minimal_d_evenements,nombre_maximal_d_evenements
)
,dimX
)
)
)
)
);
/* Nombre d'evenements generes sur la ligne precedente (ou 0 lorsque l'on est sur la */
/* premiere ligne 'Ymin'). */
/* On notera que le nombre d'evenements a generer s'applique a une ligne 'Y' entiere, ce */
/* qui explique que l'on divise par 'dimX' afin de connaitre le nombre d'evenements a */
/* generer pour chaque point {X,Y}. */
DEFV(Int,INIT(nombre_d_evenements
,INTE(DIVI(HOMO(Y
,Ymin,Ymax
,nombre_minimal_d_evenements,nombre_maximal_d_evenements
)
,dimX
)
)
)
);
/* Nombre d'evenements a generer pour chaque valeur du signal 'x' a observer (associe a la */
/* coordonnee 'Y') sur la ligne courante... */
/* On notera que le nombre d'evenements a generer s'applique a une ligne 'Y' entiere, ce */
/* qui explique que l'on divise par 'dimX' afin de connaitre le nombre d'evenements a */
/* generer pour chaque point {X,Y}. */
begin_ligne
Bblock
DEFV(Float,INIT(probabilite,LIGNE(densite_de_probabilite,X,Ymin)));
/* Pour decreter que l'evenement ("signal 'x'" detecte) a ete rencontre. */
Test(IFEXff(probabilite,EVENEMENT_IMPOSSIBLE,EVENEMENT_CERTAIN))
Bblock
PRINT_ATTENTION("la probabilite 'P(x)' est hors de [0,1]");
CAL1(Prer2("P(%d)=%g\n",X,probabilite));
CAL1(Prer3("lambda=%g sigma=%g infini=%d\n",lambda,sigma,nombre_d_iterations));
Eblock
ATes
Bblock
Eblock
ETes
storeF_point(COND(IFOU(IFEQ(Y,Ymin),IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents))
,FZERO
,loadF_point(comptage_des_signaux,X,PREY(Y))
)
,comptage_des_signaux
,X,Y
);
/* Pour la premiere ligne ('Ymin'), on initialise a zero le comptage des evenements, alors */
/* pour les lignes suivant la premiere ligne ('Ymin'), on recupere les evenements de la */
/* ligne precedente, ce qui permet de rendre lineaire le temps de calcul par rapport au */
/* nombre d'evenements demandes, mais surtout de faire que l'ensemble des lignes corresponde */
/* a une evolution temporelle coherente... */
Repe(SOUS(nombre_d_evenements,nombre_d_evenements_de_la_ligne_precedente))
Bblock
DEFV(Float,INIT(valeur_aleatoire,FLOT__UNDEF));
/* Pour generer une valeur aleatoire. */
GENERATION_D_UNE_PROBABILITE_01(valeur_aleatoire);
/* Generation d'une valeur aleatoire. */
Test(IFLE(valeur_aleatoire,probabilite))
Bblock
storeF_point(ADD2(loadF_point(comptage_des_signaux,X,Y),FU)
,comptage_des_signaux
,X,Y
);
/* Comptage de l'evenement courant. */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ERep
Eblock
end_ligne
Eblock
end_colonne
Test(IL_FAUT(prendre_une_dynamique_logarithmique))
Bblock
CALS(IFdynamique_logarithmique_sans_translation_dynamique(comptage_des_signaux
,comptage_des_signaux
,FZERO
)
);
/* S'il le faut, la dynamique de la matrice de comptage des evenements est reduite par */
/* application d'une fonction logarithme ce qui permet de la "lisser"... */
Eblock
ATes
Bblock
Eblock
ETes
RECHERCHE_DES_EXTREMA_D_UNE_SEQUENCE_D_IMAGES(comptage_des_signaux);
/* Recherche des extrema locaux et globaux de l'ensemble de la sequence... */
EGAL(nom_image
,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
,ChaineNumero(numero_de_la_periode_courante
,NOMBRE_DE_CHIFFRES
)
)
);
/* Le 20080602135413 fut introduit 'ChaineNumero(...)' afin de pouvoir parametrer */
/* aisement le nombre de chiffres des numeros... */
CALi(IupdateF_image(nom_image,comptage_des_signaux));
/* Sauvegarde du champ sans renormalisation... */
CALZ_FreCC(nom_image);
INCR(numero_de_la_periode_courante,I);
/* Et passage a l'image suivante... */
EDEFV(ligneF,densite_de_probabilite);
/* Calcul de la densite de probabilite 'P(x)' en chaque point 'X'. */
Eblock
EKom
RENORMALISATION_GLOBALE_D_UNE_SEQUENCE_D_IMAGES(comptage_des_signaux);
/* Renormalisation globale de la sequence d'images... */
EDEFV(imageF,comptage_des_signaux);
/* Image flottante dans laquelle on trouve le nombre de signaux 'x' observes... */
Eblock
end_nouveau_block
RETU_Commande;
Eblock
ECommande