sábado, 7 de agosto de 2010

Mapa de Hénon

Neste Post, trago a construção simples em C do mapa de Hénon, o algoritmo é bem básico, pois estou iniciando na linguagem de programação C.

A definição :

"O mapa Hénon é um sistema dinâmico a tempo discreto . É um dos exemplos mais estudados de sistemas dinâmicos que exibem comportamento caótico. Tal mapa leva um ponto (xn, yn) no plano para um novo ponto de descrito pelo sistema discreto de equações.
O mapa depende de dois parâmetros, a e b, o mapa Hénon canônicas têm valores de a = 1,4 e b = 0,3. Para estes valores apresenta caos. Para outros valores de a e b do mapa convergem para uma órbita periódica. O mapa foi criado por Michel Hénon. Para o mapa canônico, um ponto inicial do plano será tanto uma abordagem de um conjunto de pontos conhecido como o atrator Hénon, ou diverge para o infinito. Como um sistema dinâmico, o mapa Hénon canônico é interessante porque, ao contrário do mapa logístico, suas órbitas desafiam uma descrição simples."

O Código em C que trago aqui, é bem simples é apenas para fazer as iterações nas equações que descrevem o mapa de Hénon. Junto trago o script (.plt) do programa GNUPLOT, para a leitura dos arquivos formato ASCII, gerados pelo programa escrito em C com a extensão (.dat), também os comandos via terminal. Os valores de (a, b)= (1.2, 0.2); (1.3, 0.3) e (1.4, 0.3)
/*--script em C----*/
/*-------Bibliotecas------*/
#include
#include
#include
/*----escrita do arquivo .dat----*/
FILE*arquivo;
/*------inicio do programa-------*/
int main(void){

/*-----------Variaveis-----------*/
int n;
double xv,yn,xn,yv,a,b;
double x0,y0;
double c0,d0,cn,cv,dn,dv;
/*---------------------------------*/
arquivo=fopen("mapa
_de_henon.dat","w");

/*---Parâmetros do mapa de Hénon---*/
a=1.2;
b=0.2;


/*---Condições iniciais aleaórias---*/
srand48(20100608);
x0=drand48();
y0=drand48();

for(n=0;n<=1000;n++){
xn=yv+1-a*pow(xv,2);
yn=b*xv; xv=xn;
yv=yn;
/*---escreve no arquivo .dat----*/
fprintf(arquivo,"%f %18f \n",xn,yn);
/*---escreve no terminal--------*/
printf("%d %f %18f \n",n,xn,yn);
}
fclose(arquivo); return 0; }
/*Fim do programa*/

O script para o GNUPLOT

reset
set title "Mapa de Hénon \n para a=1.4, b=0.3 ;"
set xlabel "Xn+1"
set ylabel "Yn+1"
plot 'mapa_de_henon.dat' using ($1):($2) t"" with points 3 6
replot pause -1 "Imagem PNG - Feche o Gnuplot completamente"

set output "mapa_henon.png"
set terminal png size 1024,748 pause -1 "Feche completamente o GNUPLOT"
replot =========
========================================================== As figuras A, B e C, são os gráficos gerados com os scripts acima, que representam os mapas de Hénon.


Os gráficos acima são resultados dos scripts criados em C e em GNUPLOT.
Pode se notar pelos gráficos as mudanças sensíveis dos parâmetros a e b nas equações do mapa de Hénon geram gráficos distintos com as mesmas condições inciais (xo, y0) que foram geradas aleatóriamente.

Os comandos via terminal para compilar o script em C:
gcc -g -o nomedoarquivo.x nomedoarquivo.c -lm

e em gnuplot

gnuplot nomedoarquivo.plt

Os arquivos em C após compilados será gerado um arquivo .dat que será usado na compilação com o gnuplot via terminal, gerando assim o gráfico e salvando em .png