Read in the data from the Belousov-Zhabotinsky reaction experiment. It is stored in an Excel spreadsheet. The three columns are time (in 0.25 second intervals), Cerium potential, and Bromide potential in mV.

This data was collected by students in the capstone lab in Prof. Petropoulos's section of Math 451H in Spring 2005. The data was recorded over 4.5 hours with a two channel A/D converter with probe amplifiers to get a good signal out of the probes. The reaction was conducted in a magnetically stirred beaker, but without inflow of fresh reagents nor outflow of the mixture.

BZData=load('BZdata.txt');

tLong=BZData(:,1);CeLong=BZData(:,2);BrLong=BZData(:,3);

dt=tLong(2)-tLong(1);

Choose the start and end times and the length of the time delay.

tStart=5901; % Initial time to include in computation

tEnd =11482; % Final time to include

lag=15; % Time lag for time-delay embedding

tEnd=max(tEnd, tStart+1); % Make sure that the times make sense

tEnd=min(max(tLong), tEnd);

nStart=floor(tStart/4); % Convert times to indices

nEnd = floor(tEnd)/dt;

Cut off unused portions

t=tLong(nStart:nEnd); nt=length(t);

Ce=CeLong(nStart:nEnd);

Br=BrLong(nStart:nEnd);

Plot the potentials as a function of time

figure(1);clf; hold on;

plot(tLong,CeLong,'c','linewidth',1)

plot(t,Ce,'b','linewidth',2.5)

plot(tLong,BrLong,'m','linewidth',1)

plot(t,Br,'r','linewidth',2.5)

xlabel('$t$ (s)')

ylabel('Potential (mV)')

hold off

Plotting the two potentials against each other show that any attractor must be greater than 2-dimensional, since the trajectory appears to self-intersect.

figure(2);

plot(Ce,Br)

xlabel('Ce potential (mV)')

ylabel('Br potential (mV)')

Compute the time-delay embedding in three dimensions. Here we use the Cerium potential but the Bromide potential should work equally well.

dim=3;

ps=zeros(nEnd-nStart-dim*lag+1,3);

for i=1:dim

firstpoint=1+(i-1)*lag;

lastpoint=nt-(dim-(i-1))*lag;

ps(:,i)=Ce(firstpoint:lastpoint);

end

Plot the reconstructed attractor

figure(3)

plot3(ps(:,1),ps(:,2),ps(:,3))

xlabel('$x(t)$'); ylabel('$x(t+\tau)$');zlabel('$x(t+2\tau)$')

title(sprintf('Reconstructed attractor, $\\tau=%0.2f$',lag*dt))