Code covered by the BSD License  

Highlights from
Gingerbreadman chaotic 2D map

image thumbnail

Gingerbreadman chaotic 2D map

by

 

Computes and displays the Gingerbreadman chaotic 2D map.

gingerbreadman(varargin)
function gingerbreadman(varargin)
% GINGERBREADMAN Computes and displays the 2D chaotic Gingerbreadman map
%
% Syntax: gingerbreadman(N,x0,y0)
% N: number of points to compute (default N=10000)
% x0, y0: the initial conditions (default, x0=-0.1, y0=0.1)
%
% x0, y0 can be anything, but the plot is sized such that only -4 to 8 is
% visible for x and y, so inputs must be in this range to be visible.
%
% Arguments are optional, but are taken in order, i.e. the first input is
% assumed to be N, the second input is assumed to be x0, etc.

% Adam Wachsman
% 07-December-2011

%% Initialize
if ~isempty(varargin)>0
    N=varargin{1};
else
    N=10000;
end
x=zeros(N,1);
y=zeros(N,1);

%% Initial Conditions
% x(1)=2*rand-1;
% y(1)=2*rand-1;

if length(varargin)>1
    x(1)=varargin{2};
else
    x(1)=-0.1;
end
if length(varargin)>2
    y(1)=varargin{3};
else
    y(1)=0.1;
end

%% Loop to compute gingerbreadman
for n=2:N
    x(n)=1-y(n-1)+abs(x(n-1));
    y(n)=x(n-1);
end

%% Plot
figure
plot(x,y,'.')
hold on
plot(x(1),y(1),'ro')
axis equal
grid on
xlabel('x')
ylabel('y')
axis([-4 8 -4 8])

%% Plot 2

% Number of age colors
numPoints=1024;
% Colormap
colorList=jet(numPoints);

% Create Figure
figure

% Create plot object for aged points
hAgedPlot=plot(x(1),y(1),'Marker','.','LineStyle','none','Color',...
    colorList(1,:));
hold on

% Create plot objects for new (aging) points
hNewPlot=zeros(numPoints,1);
for n=1:numPoints
    hNewPlot(n)=plot(x(1),y(1),'Marker','.','Color',colorList(n,:),...
        'MarkerSize',12);
end

% Set axes and figure properties
set(gca,'Color','none')
set(gcf,'Color','k')
set(gcf,'Position',[100 100 640 480])
axis([-6 10 -4 8])
set(gca,'Position',[0 0 1 1])
axis off

% Loop through points and update age plots
for n=1:20:N
    for m=1:numPoints
        nn=n-m+1;
        brokeEarly=false;
        if nn < 1
            brokeEarly=true;
            break
        end
        set(hNewPlot(numPoints-m+1),'XData',x(nn),'YData',y(nn))
    end
    nn=nn-1;
    if ~brokeEarly && nn > 0
        set(hAgedPlot,'XData',x(1:nn),'YData',y(1:nn))
    end
    drawnow
end

Contact us