67% found this document useful (3 votes)
777 views13 pages

Lyapunov Exponenets Matlab

This Matlab code contains functions and scripts for analyzing a three-dimensional dynamical system and calculating its Lyapunov exponents. It includes functions that define the system, numerically solve the system, calculate the Jacobian matrix, and estimate Lyapunov exponents over repeated iterations. Additional scripts generate bifurcation diagrams by running the system over a range of a parameter and identifying local maxima of one variable.

Uploaded by

Awadhesh Ranjan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
67% found this document useful (3 votes)
777 views13 pages

Lyapunov Exponenets Matlab

This Matlab code contains functions and scripts for analyzing a three-dimensional dynamical system and calculating its Lyapunov exponents. It includes functions that define the system, numerically solve the system, calculate the Jacobian matrix, and estimate Lyapunov exponents over repeated iterations. Additional scripts generate bifurcation diagrams by running the system over a range of a parameter and identifying local maxima of one variable.

Uploaded by

Awadhesh Ranjan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 13

AppendixAMatlabCode

CodeforSensitiveDependence/LyapunovExp.Approximation
ptype='3';

a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:)];

y0=[.8,.17,9.8]';

tmax=10000;
s=ode45(f,[0,tmax],y0,odeset('abstol',1e10));
s2=ode45(f,[0,tmax],y0+[0;0;1e8],odeset('abstol',1e10));
ts=0:1:tmax;
F=deval(s,ts)';%equallyspacedtimedata
F2=deval(s2,ts)';%equallyspacedtimedata

%ts=s.x;F=s.y';%unequalspacedtimedata

figure;semilogy(ts,abs(FF2),'+');xlabel('time');ylabel('log');
figure;

ifptype=='3'
plot3(F(:,1),F(:,2),F(:,3));
xlabel('x');ylabel('y');zlabel('z');
elseifptype=='2'
subplot(3,1,1);
plot(ts,F(:,1));
xlabel('time');ylabel('x');

subplot(3,1,2);
plot(ts,F(:,2));
xlabel('time');ylabel('y');

subplot(3,1,3);
plot(ts,F(:,3));
xlabel('time');ylabel('z');
end

Code for Jacobean Matrix used in Calculation of Lyapunov


Exponent
function[x,DFx]=three_tier_time1map(xo)
%evolvefor1timeunit,includingthej
a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);

F=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:)];%vecflowfield

df1=@(u)(a1*(1+b1*u)b1*a1*u)/(1+b1*u)^2;
df2=@(u)(a2*(1+b2*u)b2*a2*u)/(1+b2*u)^2;

Df=@(X)[12*X(1,:)df1(X(1,:))*X(2,:),df1(X(1,:)),0;...
X(2,:)*df1(X(1,:)),df1(X(1,:))df2(X(2,:))*X(3,:)d1,
df2(X(2,:));...
0,X(3,:)*df2(X(2,:)),df2(X(2,:))d2];
%DFatX

J0=eye(3);%initialJacmatrix
%12componentODEflowgivenby3componentsofsolutionand9
components
%oftheJmatrix(JsatisfiestheODEdJ/dt=Df.J)
G=@(t,z)[F(t,z(1:3,:));Df(z(1:3,:))*z(4:6,:);Df(z(1:3,:))*z(7:9,:);
...
Df(z(1:3,:))*z(10:12,:)];

[ts,xs]=ode45(G,[0.1],[xo;J0(:)]);%numericallysolveint
domain
x=reshape(xs(end,1:3),[3,1]);%extracttheansweratthefinal
timet=1
J=xs(end,4:end);%samefortheJcomponents
DFx=reshape(J,[33]);%sendJoutasa3x3matrix.

Code To Calculate Lyapunov Exponent from Jacobean


%lyapunovexponentsinaflowinR^3,
%Needsthefunctionlorenz_time1map.mwhichreturnsthetime1map
%barnett11/19/07
%ModifiedbyBenBier11/30/09

a1=5;
b1=3;
a2=.1;
b2=2;

d1=.4;
d2=.01;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:)];%vecflowfield
y0=[.8,.17,9.8]';%IC
[ts,Xs]=ode45(f,[02000],y0);%numericallysolveintdomain
figure;plot3(Xs(:,1),Xs(:,2),Xs(:,3),'');axisvis3d;%showthe
attractor

%testthree_tier_time1map
[x,J]=three_tier_time1map(y0);

%MeasureLyapunovexponents...
%Reorthogonalizingversion,repeatedaveraging
M=10;%howmanyaveragingloops
N=500;%howmanyitspermeasstep
x=[y0];
h=zeros(3,1);%placetostoreaveragedlyapexps
form=1:M
J=eye(3);%IdiswhereJacobeanstarts
forn=1:N
fprintf('n=%d:x=(%g,%g,%g)\n',n,x(1),x(2),x(3))
[xJx]=three_tier_time1map(x);
J=Jx*J;%updateJacobean
[Q,R]=qr(J);%reorthogonalize
J=Q*diag(diag(R));%butkeepthemcorrectlengths
end
rN=abs(diag(R));%printoutprogress
h=h+log(rN)/N;
end
h=h/M%finalanswer

%finalanswer
%h=

%0.0186
%0.0407
%0.0755

%youcanseethemiddlelyapexpisvcloseto0infactallflows
have
%azeroexponent.

Code for Plotting Original Function/Sens. Dependence


%PARAMTERVALUES
a1=5;

a2=.1;
b2=2;
d1=.4;
d2=.01;
%

%ParametersVaried
b1=3;
tmax=5000;
%

%InitialConditions
y0=[.8,.17,9.8];
y0_2=[.8,.17,9.8+1e8];
%

%HOLLINGSTYPEIIFUNCTIONS
f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
%

%ODESYSTEM
f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:)];
%

%ODESoln
[ts,F]=ode45(f,[0,tmax],y0);
[ts2,F2]=ode45(f,[0,tmax],y0_2);
%

%%3DPlot
%plot3(x(1,(5000:end)),x(2,(5000:end)),x(3,(5000:end)));
%xlabel('x');ylabel('y');zlabel('z');
%title('limitcycleatb1=2.3')
%%
%
%ZPlot
plot(ts,F(:,2));
xlabel('time');ylabel('y');
%

holdon;

%ZPlotF2
plot(ts2,F2(:,2),'r');
xlabel('time');ylabel('y');
%

legend('y0','y0+(0,0,10e9)');

Code to create Bifurcation Diagram

clear

%NOTESONFILTER_SPAN
%50worksforb1=2.2:2.3
%55worksforb1=2.3:2.4
%75worksforb1=2.4:2.5
%100worksforb1=2.5:4
%150worksforb1=4:6.2

%MATRIXSIZE
%maxnumberofpeaksfort=10,000onb=2.2:6.2is216,initialized
matrix
%to250justincaseuntestedintermediatevaluehasmorepeaks

%Tvaluesforsmooth(z)andzdon'tperfectlylineup.Codetakeslocal
%maximaforsmooth(z),andthenfindsmaxvalueonarangefromt
t_bounds
%tot+t_boundsofz.
t_bounds=10;
%

%MaxtimeforODESolver
tmax=15000;
ts=0:tmax;
%

%Maxnumberofpeakstomakesurevectorsizeissufficient
max_peaks=1000;
%

%Inputsforlinspaceforb1loop
b1max=2.2;
b2max=3.2;
n=1001;
%

%Counterforb1loop
j=1;
%

%ZMAXandBSinitialization
zmax=zeros(n,max_peaks);
bs=zeros(n,max_peaks);
%

%PARAMTERVALUES
a1=5;
a2=.1;
b2=2;
d1=.4;
d2=.01;
%

forb1=linspace(b1max,b2max,n)

%ADJUSTSfilter_span
if(b1<2.234)
filter_span=50;
elseif(b1>=2.234&&b1<2.3)
filter_span=53;
elseif(b1>=2.3&&b1<2.4)
filter_span=55;
elseif(b1>=2.4&&b1<2.494)
filter_span=75;
elseif(b1>=2.494&&b1<2.5)
filter_span=80;
elseif(b1>=2.5&&b1<2.805)
filter_span=90;
elseif(b1>=2.805&&b1<2.830)
filter_span=100;
elseif(b1>=2.830&&b1<2.4)
filter_span=110;
else
filter_span=150;
end;
%

%HOLLINGSTYPEIIFUNCTIONS
f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
%

%ODESYSTEM
f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:)];
%

%y0randomization
r1=rand;
r2=rand;
r3=rand;
y0=[((r1*.8)+.1),((r2*.4)+.05),(7+(6*r3))];
%

%ODECalculation,Smooth,Derivatives
F=ode45(f,[0,tmax],y0);
xyz=deval(F,ts);
xyz(:,(1:7500))=[];
y=smooth(xyz(3,:),filter_span,'lowess');
dy=gradient(y);
d2y=gradient(dy);
%

%Findlocalmaximaofsmoothfunction
max_approx_i=find(abs(dy)<5e4&d2y<0);
max_approx_f=max_approx_i(10:numel(max_approx_i)10);
%

%Initializevectoroflocalmax(z)
max_z_row=zeros(1,numel(max_approx_f));
b_row=zeros(1,numel(max_approx_f))+b1;
%

%Findslocalmaximaofz
fori=1:numel(max_approx_f)
max_z_row(i)=max(xyz(3,max_approx_f(i)t_bounds:max_approx_f(i)
+t_bounds));
end;
%

%Resizeb_rowandmax_z_rowsotheycanbeaddedintobigmatrix
if(isempty(max_z_row)==0)
b_row(numel(b_row)+1:max_peaks)=b1;
max_z_row(numel(max_z_row)+1:max_peaks)=max_z_row(1,1);
else
b_row=bs(j1,:);
max_z_row=zmax(j1,:);
end;
%

%Updatematricesofb1,maxz'sforplotting
bs(j,:)=b_row;
zmax(j,:)=max_z_row;
%

%Counter
j=j+1;
%

%Displaysb1valuesasprogresstracker
disp(b1);
%
end;

Code for Zero Crossings Function


function[v,ist,df]=foodchainzcross(t,x);
%eventfunctionfortest_poincare.m
v=x(3)9;%eventisx(2)=0(iewhenviszero)
ist=1;%iftrue,terminateevolutionwhenthiseventoccurs
df=1;%increasingsenseonly

Code to Create Poinca Section and Time-delay plots


%testPoincaresurfaceofsectionviaODEsolver.Barnett11/23/09
%modifiedbyPeterHughes12/1/09
%(useszerocross.maseventfunctiondefiningtheintersectionevent)
clear

%PARAMTERVALUES
a1=5;
a2=.1;
b2=2;

d1=.4;
d2=.01;
%

%ParametersVaried
b1=3;
%

%HOLLINGSTYPEIIFUNCTIONS
f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
%

%ODESYSTEM
f=@(t,y)[y(1,:)*(1y(1,:))y(2,:)*f1(y(1,:));...
y(2,:)*f1(y(1,:))y(3,:)*f2(y(2,:))d1*y(2,:);...
y(3,:)*f2(y(2,:))d2*y(3,:)];
%

tmax=10000;%maxtimetowaituntilnextintersection
yo=[.8,.17,9.8];%initialcondition
ns=500;%howmanyintersection(iterationsofPmap)

tp=nan*(1:ns);yp=nan*zeros(numel(yo),ns);yi=yo;%initarrays
figure;
forn=1:ns
s=ode45(f,[0tmax],yo,odeset('Events',@foodchainzcross));
ifisempty(s.xe),disp('nointersectionfound!');
else
tp(n)=s.xe(end);yo=s.ye(:,end);yp(:,n)=yo;
end;
end;

subplot(2,1,1);
plot(yp(1,:),yp(2,:),'+');
xlabel('x');ylabel('y');
title('PoincarSectionatz=9,b1=3')

subplot(2,1,2);
plot(yp(1,(1:end1)),yp(1,(2:end)),'+');
xlabel('x(n)');ylabel('x(n+1)');
title('PoincarMapforb1=3');

Code for Lyapunov Number Approximation for Poincar Map


X(1,:)=yp(1,1:end1);%TimedelaydatafromPoincarMap
X(2,:)=yp(1,2:end);

X=X';%Transposesosortrowscanbeused
X=sortrows(X);%Sortsdatasoslopecanbetaken
p=polyfit(X(:,1),X(:,2),10);%PolynomialApprox.
z=polyder(p);%Derivativeofpolynomial

subplot(2,1,1);

plot(X(:,1),polyval(p,X(:,1)));
holdon;
plot(X(:,1),X(:,2),'rx');
title('PoincarMapand10^t^hdegreepolynomialapproximation');

subplot(2,1,2);
plot(X(:,1),polyval(z,X(:,1)));
xlabel('x(n)');ylabel('x(n+1)');
title('Firstderivativeofpolynomialapproximation');

L=mean(abs(polyval(z,X(:,1))));%LCalculation
xlabel('x(n)');ylabel('dx(n+1)/dx(n)');
disp('L=');
disp(L);

h=log(L);%hcalculation
disp('h=');
disp(h);

X=X';

Code for 4-tier Population Model


a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

a3=.05;
b3=4;
d3=.009;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
f3=@(u)(a3*u)/(1+b3*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))X(4,:)*f3(X(2,:))d2*X(3,:);...
X(4,:)*f3(X(3,:))d3*X(4,:)];

y0=[.8,.17,9.8,1];

[ts,F]=ode45(f,[0,1000],y0);

plot3(F(:,1),F(:,2),F(:,3));
xlabel('x');ylabel('y');zlabel('z');

subplot(4,1,1);
plot(ts,F(:,1));
xlabel('time');ylabel('x');


subplot(4,1,2);
plot(ts,F(:,2));
xlabel('time');ylabel('y');

subplot(4,1,3);
plot(ts,F(:,3));
xlabel('time');ylabel('z');

subplot(4,1,4);
plot(ts,F(:,4));
xlabel('time');ylabel('zz');

Code for 4-tier model Lyapunov Exponent Approximation


a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

a3=.05;
b3=4;
d3=.009;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
f3=@(u)(a3*u)/(1+b3*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))X(4,:)*f3(X(2,:))d2*X(3,:);...
X(4,:)*f3(X(3,:))d3*X(4,:)];

y0=[.8,.17,9.8,1]';

tmax=925;
s=ode45(f,[0,tmax],y0,odeset('abstol',1e10));
s2=ode45(f,[0,tmax],y0+[0,0,0,1e8]',odeset('abstol',1e10));
ts=0:1:tmax;
F=deval(s,ts)';%equallyspacedtimedata
F2=deval(s2,ts)';%equallyspacedtimedata

%ts=s.x;F=s.y';%unequalspacedtimedata

figure;semilogy(ts,abs(FF2),'+');

%[ts,F]=ode45(f,[0,2000],y0);

%?plot4(F(:,1),F(:,2),F(:,3));
%xlabel('x');ylabel('y');zlabel('z');
xlabel('time');ylabel('log');

figure;

subplot(4,1,1);
plot(ts,F(:,1));
xlabel('time');ylabel('x');

subplot(4,1,2);
plot(ts,F(:,2));
xlabel('time');ylabel('y');

subplot(4,1,3);
plot(ts,F(:,3));
xlabel('time');ylabel('z');

subplot(4,1,4);
plot(ts,F(:,4));
xlabel('time');ylabel('D');

Code for Cyclic Population Model


a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

a3=.5;
b3=1.5;
e1=.75;
e2=.55;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
f3=@(u)(a3*u)/(1+b3*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:))+X(1,:)*f3(X(2,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:);...
e1*d1*X(2,:)+e2*d2*X(3,:)X(1,:)*f3(X(2,:))];

y0=[.8,.17,9.8,1]';

tmax=2000;
s=ode45(f,[0,tmax],y0,odeset('abstol',1e10));
s2=ode45(f,[0,tmax],y0+[0,0,0,1e8]',odeset('abstol',1e10));
ts=0:1:tmax;
F=deval(s,ts)';%equallyspacedtimedata
F2=deval(s2,ts)';%equallyspacedtimedata

%ts=s.x;F=s.y';%unequalspacedtimedata

figure;semilogy(ts,abs(FF2),'+');


%[ts,F]=ode45(f,[0,2000],y0);

%?plot4(F(:,1),F(:,2),F(:,3));
%xlabel('x');ylabel('y');zlabel('z');
xlabel('time');ylabel('log');
figure;

subplot(4,1,1);
plot(ts,F(:,1));
xlabel('time');ylabel('x');

subplot(4,1,2);
plot(ts,F(:,2));
xlabel('time');ylabel('y');

subplot(4,1,3);
plot(ts,F(:,3));
xlabel('time');ylabel('z');

subplot(4,1,4);
plot(ts,F(:,4));
xlabel('time');ylabel('D');

CodeforClosedCyclicModel
a1=5;
b1=3;
a2=.1;
b2=2;
d1=.4;
d2=.01;

a3=.5;
b3=1.5;
e1=.75;
e2=.55;

f1=@(u)(a1*u)/(1+b1*u);
f2=@(u)(a2*u)/(1+b2*u);
f3=@(u)(a3*u)/(1+b3*u);

f=@(t,X)[X(1,:)*(1X(1,:))X(2,:)*f1(X(1,:))+X(1,:)*f3(X(2,:));...
X(2,:)*f1(X(1,:))X(3,:)*f2(X(2,:))d1*X(2,:);...
X(3,:)*f2(X(2,:))d2*X(3,:);...
e1*d1*X(2,:)+e2*d2*X(3,:)X(1,:)*f3(X(2,:))];

y0=[.8,.17,9.8,1]';

tmax=2000;
s=ode45(f,[0,tmax],y0,odeset('abstol',1e10));
s2=ode45(f,[0,tmax],y0+[0,0,0,1e8]',odeset('abstol',1e10));
ts=0:1:tmax;

F=deval(s,ts)';%equallyspacedtimedata
F2=deval(s2,ts)';%equallyspacedtimedata

%ts=s.x;F=s.y';%unequalspacedtimedata

figure;semilogy(ts,abs(FF2),'+');

%[ts,F]=ode45(f,[0,2000],y0);

%?plot4(F(:,1),F(:,2),F(:,3));
%xlabel('x');ylabel('y');zlabel('z');
xlabel('time');ylabel('log');
figure;

subplot(4,1,1);
plot(ts,F(:,1));
xlabel('time');ylabel('x');

subplot(4,1,2);
plot(ts,F(:,2));
xlabel('time');ylabel('y');

subplot(4,1,3);
plot(ts,F(:,3));
xlabel('time');ylabel('z');

subplot(4,1,4);
plot(ts,F(:,4));
xlabel('time');ylabel('D');

You might also like