/*************************************************************************************************************************************/
/* */
/* E T U D E D E S O P T I O N S D ' O P T I M I S A T I O N */
/* P O U R L ' A T T R A C T E U R D E L O R E N Z : */
/* */
/* */
/* Author of '$xtc/lorenz.11$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */
/* */
/*************************************************************************************************************************************/
#include <stdio.h>
#define ITER 4065
#define PRECIS double \
/* Permet de travailler en 'double' ou en 'float'. */
#define DT 0.01
#define X0 0.01
#define Y0 0.01
#define Z0 0.01
main()
{
int n;
PRECIS x1 = X0,dx1;
PRECIS y1 = Y0,dy1;
PRECIS z1 = Z0,dz1;
PRECIS x2 = X0,dx2;
PRECIS y2 = Y0,dy2;
PRECIS z2 = Z0,dz2;
PRECIS dt = DT;
int print=1;
for (n=1 ; n<=ITER ; n++)
{
if (print == 0)
{
printf("\n x1=%+10.6f y1=%+10.6f z1=%+10.6f",x1,y1,z1);
printf("\n x2=%+10.6f y2=%+10.6f z2=%+10.6f",x2,y2,z2);
}
else
{
}
dx1 = (-10.0*x1 + 10.0*y1)*dt;
dy1 = (28.0*x1 - y1 - x1*z1)*dt;
dz1 = ((-8.0 / 3.0)*z1 + x1*y1)*dt;
dx2 = -10.0*x2*dt + 10.0*y2*dt;
dy2 = 28.0*x2*dt - y2*dt - x2*z2*dt;
dz2 = (-8.0 / 3.0)*z2*dt + x2*y2*dt;
/* ATTENTION, il ne faut pas de parentheses et il est imperatif de ne pas mettre 'dt' en */
/* facteur commun et ce afin d'avoir des produits a 3 termes... */
x1 = x1 + dx1;
y1 = y1 + dy1;
z1 = z1 + dz1;
x2 = x2 + dx2;
y2 = y2 + dy2;
z2 = z2 + dz2;
}
printf("\n 'dt' non distribue : iterations=%d x1=%+10.6f y1=%+10.6f z1=%+10.6f",n-1,x1,y1,z1);
printf("\n 'dt' distribue : iterations=%d x2=%+10.6f y2=%+10.6f z2=%+10.6f",n-1,x2,y2,z2);
/* Avec 'cc -O0', donne : */
/* */
/* 'dt' non distribue : iterations=4065 x1= -2.296256 y1= -4.504186 z1= +6.694424 */
/* 'dt' distribue : iterations=4065 x2=+14.317396 y2=+19.969960 z2=+28.395215 */
/* */
/* et avec 'cc -O3', donne : */
/* */
/* 'dt' non distribue : iterations=4065 x1= -2.296256 y1= -4.504186 z1= +6.694424 */
/* 'dt' distribue : iterations=4065 x2= -8.769455 y2=-11.872689 z2=+22.934003 */
/* */
/* ainsi {x1,y1,z1} ('dt' non distribue) ne depend pas de l'optimisation, alors que */
/* {x2,y2,z2} ('dt' distribue) en depend. Voir a ce propos le programme 'v $xtc/lorenz.21$c' */
/* dans lequel des termes en 'x*y*z' ont ete ajoute afin d'obtenir les dependences cherchees */
/* pour generer la sequence : */
/* */
/* xivPdf 11 1 / 033502_033629 */
/* */
/* avec le programme 'v $xrk/lorenz.11$K'. */
printf("\n");
}