function [stato]=ricker(alfa,beta,x0,tfin);
% simulazione modello di Ricker
% [stato]=ricker(alfa,beta,x0,tfin);
% [stato]=ricker(6,1,0.2,20); % ---> equilibrio
% [stato]=ricker(10,1,0.2,20); % ---> ciclo di periodo 2
% [stato]=ricker(13,1,0.2,30); % ---> ciclo di periodo 4
% [stato]=ricker(14.5,1,0.2,50); % ---> ciclo di periodo 8
% [stato]=ricker(15,1,0.2,50); % ---> caos
% [stato]=ricker(20,1,0.2,50); % ---> caos
% [stato]=ricker(23,1,0.2,50); % ---> ciclo di periodo 3
% [stato]=ricker(24,1,0.2,50); % ---> ciclo di periodo 6

close all;

% tfin=50;
x0in=x0;
stato=x0;
for ind=2:tfin
    x=stato(ind-1);
    stato=[stato;alfa*x*exp(-beta*x)];
end;
% ------------------------
%%%%%%%%%%% MOVIMENTO %%%%%%%%%%%
figure;
plot(stato,'-*');
xlabel( 'tempo' );
ylabel( 'x(t)' );
pause;
% ------------------------
% figure;
% plot(stato(1:length(stato)-1),stato(2:length(stato)),'*');
% hold on;
% massimo=1.2*max(x0,alfa/beta*exp(-1));
% x=0:massimo/100:massimo;
% y=alfa*x.*exp(-beta*x);
% plot(x,y,'r');
% xlabel( 'x(t)' )
% ylabel( 'x(t+1)' )
% ------------------------
%%%%%%%%%% COSTRUZIONE DEL DIAGRAMMA DI MORAN "DINAMICO" %%%%%%%%%%%
moran1=ones(2*tfin,1);
moran2=ones(2*tfin,1);
for h=1:tfin
    moran1(2*h-1)=stato(h);
    moran1(2*h)=stato(h);
end;
moran2=[0;moran1(3:2*tfin);1];
figure;
hold on
massimo=1.2*max(x0,alfa/beta*exp(-1));
x=0:massimo/100:massimo;
y=alfa*x.*exp(-beta*x);
plot(x,y,'r');
plot(x,x,'k');
xlabel( 'x(t)' )
ylabel( 'x(t+1)' )
title('diagramma di Moran con transitorio');
plot(x0in,0,'bo'); pause;
for ind=1:length(moran1)-2
    plot([moran1(ind) moran1(ind+1)],[moran2(ind) moran2(ind+1)],'b-');
    % plot(moran1(ind),moran2(ind),'b.');
    % plot(stato(1:length(stato)-1),stato(2:length(stato)),'*');
    pause(0.2)
end;
pause;
% -----------------
% %%%%%%%%%%% COSTRUZIONE DEL DIAGRAMMA DI MORAN "STATICO" %%%%%%%%%%%
% moran1=ones(2*tfin,1);
% moran2=ones(2*tfin,1);
% for h=1:tfin
%     moran1(2*h-1)=stato(h);
%     moran1(2*h)=stato(h);
% end;
% moran2=[0;moran1(3:2*tfin);1];
% figure;
% plot(moran1(1:length(moran1)-1),moran2(1:length(moran1)-1),'-.');
% hold on
% massimo=1.2*max(x0,alfa/beta*exp(-1));
% x=0:massimo/100:massimo;
% y=alfa*x.*exp(-beta*x);
% plot(x,y,'r');
% plot(x,x,'k');
% plot(stato(1:length(stato)-1),stato(2:length(stato)),'*');
% xlabel( 'x(t)' )
% ylabel( 'x(t+1)' )
% title('diagramma di Moran con transitorio');
% pause;
% -----------------
% a transitorio esaurito
% tfin=200;
% stato=x0;
% for ind=2:tfin
%     x=stato(ind-1);
%     stato=[stato;alfa*x*exp(-beta*x)];
% end;
% stato=stato(length(stato));
% for ind=2:tfin
%     x=stato(ind-1);
%     stato=[stato;alfa*x*exp(-beta*x)];
% end;
% figure;
% plot(stato(1:length(stato)-1),stato(2:length(stato)),'*');
% hold on;
% massimo=1.2*max(x0,alfa/beta*exp(-1));
% x=0:massimo/100:massimo;
% y=alfa*x.*exp(-beta*x);
% plot(x,y,'r');
% xlabel( 'x(t)' )
% ylabel( 'x(t+1)' )
% title('diagramma di Moran su attrattore (transitorio esaurito)');
% moran1=ones(2*tfin,1);
% moran2=ones(2*tfin,1);
% for h=1:tfin
%     moran1(2*h-1)=stato(h);
%     moran1(2*h)=stato(h);
% end;
% moran2=[0;moran1(3:2*tfin);1];
% plot(moran1(1:length(moran1)-1),moran2(1:length(moran1)-1),'-.');
% plot(x,x,'k');
% pause;
% ----------------
% figure;
% massimo=1.2*max(x0,alfa/beta*exp(-1));
% plot(stato,zeros(length(stato)),'*','markersize',3);
% axis([0 massimo -1 1]);
% hold on;
% plot([0 massimo],[0 0],'k');
% axis('off');
% text(massimo,-0.1,'x(t)');
% text(0,-0.1,'0');
% title('attrattore');
% -----------------------
massimo=1.2*max(x0,alfa/beta*exp(-1));
figure;
hold on;
axis([0 massimo -1 1]);
plot([0 massimo],[0 0],'k');
axis('off');
text(massimo,-0.1,'x(t)');
text(0,-0.1,'0');
title('transitorio verso attrattore');
plot(stato(1),0,'ro','markersize',5);
pause;
for ind=1:length(stato)
    plot(stato(ind),0,'b*','markersize',15);
    pause(0.3);
end
pause;
%%%%%%%%%%%%%%%%%%%
% a transitorio esaurito
tfin=200;
stato=x0;
for ind=2:tfin
    x=stato(ind-1);
    stato=[stato;alfa*x*exp(-beta*x)];
end;
stato=stato(length(stato));
for ind=2:tfin
    x=stato(ind-1);
    stato=[stato;alfa*x*exp(-beta*x)];
end;
figure;
hold on;
axis([0 massimo -1 1]);
plot([0 massimo],[0 0],'k');
axis('off');
text(massimo,-0.1,'x(t)');
text(0,-0.1,'0');
title('attrattore');
% for ind=1:length(stato)
%     plot(stato(ind),0,'b*','markersize',15);
%     pause(0.3);
% end
plot(stato,0,'b*','markersize',15);

