/*************************************************************************************************************************************/
/* */
/* E T U D E D E L A D Y N A M I Q U E D E V E R H U L S T */
/* E N P A S S A N T D E L A D O U B L E A L A S I M P L E */
/* P R E C I S I O N , O U E N C H A N G E A N T D ' O R D I N A T E U R */
/* A V E C G E N E R A T I O N D ' U N E I M A G E M O N T R A N T */
/* L ' I N F L U E N C E D E ' r ' : */
/* */
/* */
/* */
/* r ^ */
/* | . */
/* |*** * *** * * * * . */
/* | * * * *** * * * * ** * * ** . */
/* | * . */
/* | *** ** ** * * * * ** *. */
/* | * * . */
/* | * *** ** * * * * * *. */
/* | * * * ** * * * * * . */
/* | * ** * *** * . */
/* | * * * ** * . */
/* | * * * * * * * . */
/* | * * * * * ** * * ** . */
/* | ** ** ** * * * . */
/* | ** **** * * * . */
/* | * * * * . */
/* | * * * . */
/* | * * . */
/* | * * . */
/* | * * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | * . */
/* | . */
/* |-------------------------------------------------------------------------> */
/* 0 1 X[n] */
/* */
/* */
/* Author of '$xrk/verhulst.02$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1988??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
#define PRAGMA_CPP_____AUTORISER_LE_GooF
/* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */
/* resultats obtenus. Ceci manquait et a ete introduit le 20040420232859. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define PRECIS Float \
/* Precision dans laquelle faire les calculs ('Float' ou 'Double'). */
#define NOMBRE_D_ITERATIONS_AVEUGLES \
PARE(5000) \
/* Nombre d'iterations a effectuer sans tracer... */
#define PAS_D_EDITION \
PARE(1) \
/* On editera la valeur de X[n] toutes les 'PAS_D_EDITION' valeurs. */
#define VALEUR_INITIALE_X0 \
PARE(0.5) \
/* Valeur de X[0]. */
#define TAUX_DE_CROISSANCE_min \
PARE(2.0) \
/* Valeur de 'r' minimale. On notera que 'TAUX_DE_CROISSANCE_max' n'est pas defini, mais */ \
/* vaut : */ \
/* */ \
/* ADD2(TAUX_DE_CROISSANCE_min,_____cNORMALISE_OY(Ymax)) */ \
/* */ \
/* 'r' varie donc implicitement dans [2,3]... */
#nodefine NOM_DES_IMAGES \
"images/recherches/chaos/VERHULST.21"
#define NOM_DES_IMAGES \
nom_imageR
/* Nom des images (mise "en conformite" le 20021103120756). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define ITERATION_DE_VERHULST(Xn) \
Bblock \
EGAL(Xn \
,SOUS(MUL2(ADD2(taux_de_croissance,I) \
,Xn \
) \
,MUL2(taux_de_croissance \
,EXP2(Xn) \
) \
) \
); \
/* Nota important : le code genere correspond a : */ \
/* */ \
/* 2 */ \
/* ((1+r).X[n]) - (r.(X[n] )) */ \
/* */ \
/* qui ne donne pas du tout les memes resultats numeriques que : */ \
/* */ \
/* 2 */ \
/* ((1+r).X[n]) - (r.X[n] ) */ \
/* */ \
/* ce qui est dans la logique du chaos deterministe... */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E T U D E D E L A D Y N A M I Q U E D E V E R H U L S T : */
/* */
/* */
/* Definition : */
/* */
/* Considerons la relation de recurrence */
/* suivante : */
/* */
/* 2 */
/* X[n+1] = (1+r).X[n] - r.X[n] */
/* */
/* Cette relation correspond par exemple */
/* a la population annuelle d'une colonie */
/* animale, dont le taux de croissance est R ; */
/* par definition, on a : */
/* */
/* X[n+1] - X[n] */
/* R = ------------- */
/* X[n] */
/* */
/* d'ou : */
/* */
/* X[n+1] = (1+R).X[n] */
/* */
/* le taux de croissance n'est en fait pas */
/* constant, et vaut : */
/* */
/* R = r.(1-X[n]) */
/* */
/* d'ou la premiere formule. */
/* */
/* Celle-ci, bien que strictement deterministe */
/* pour des valeurs de 'r' superieures a 2.57, */
/* donnent pour des grandes valeurs 'N' de 'n' */
/* des series de valeurs completement chaotiques */
/* et qui sont completement sensibles a la valeur */
/* initiale X[0]. */
/* */
/* */
/* Objectif : */
/* */
/* montrer que les resultats changent du */
/* tout au tout soit en changeant d'ordinateur, */
/* soit plus simplement en changeant la precision */
/* des calculs (ce qui est previsible, puisque */
/* cette iteration chaotique depend de tous les */
/* bits, et donc de la representation interne */
/* des nombres flottants)... */
/* */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(PRECIS,INIT(taux_de_croissance,UNDEF));
DEFV(PRECIS,INIT(Xn,UNDEF));
/* Definition de la recurrence X[n]. */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR);
)
);
CALi(Inoir(ImageR));
begin_colonne
Bblock
EGAL(Xn,VALEUR_INITIALE_X0);
/* (re-)initialisation de X[n]. */
EGAL(taux_de_croissance,ADD2(TAUX_DE_CROISSANCE_min,_____cNORMALISE_OY(Y)));
Repe(NOMBRE_D_ITERATIONS_AVEUGLES)
Bblock
USs_GooF(BLOC(
Bblock
ITERATION_DE_VERHULST(Xn);
/* Calcul aveugle de X[n]. */
Eblock
)
);
/* Procedure introduite le 20080106095725... */
Eblock
ERep
BoIn(niveau_de_marquage,NOIR_PLANCHER,BLANC,PAS_COULEURS)
Bblock
Repe(PAS_D_EDITION)
Bblock
USs_GooF(BLOC(
Bblock
ITERATION_DE_VERHULST(Xn);
/* Calcul non aveugle de X[n], */
Eblock
)
);
/* Procedure introduite le 20080106095725... */
Eblock
ERep
store_point_valide(niveau_de_marquage,ImageR,_cDENORMALISE_OX(Xn),Y,FVARIABLE);
/* Et trace avec comme couleur le rang de l'iteration... */
Eblock
EBoI
Eblock
end_colonne
CALi(Iupdate_image(NOM_DES_IMAGES,ImageR));
RETU_Commande;
Eblock
ECommande