beatlesjohn
2009-04-27, 05:03
因为最近的一个设计要用到计算最大lyapunov指数的程序;
所以在一本书上找了以下程序,并进行了部分修改,但运行后结果还是有错误;
由于本人是初次接触Matlab,可能有改的不对的地方,也有很多不懂的地方,特把程序拿出,请高手指正;
具体程序如下:
x=[15,24,17,17,24,22,30,21,8,17,19,15,23,18,26,25,29,22,24,29,24,30,24,22,23,25,22,18,19,27,17,28,21,21,26,17,23,25,25,14,21,16,10,18,23,22,13,21,10,22,26,28,11,27,17,17,21,25,26,22];
N=length(x);
tau=1;
m=3;
P=5;
delt_t=1;
M=N-(m-1)*tau;
d=zeros(M,M);
for j=1:M
for i=1:m
Y(i,j)=x((i-1)*tau+j);
end
end
for j=1:M
mmax=1e+100;
mmin=mmax;
for jj=1:M
d=0;
if abs(j-jj)>P
for i=1:m
d=d+(Y(i,j)-Y(i,jj))*(Y(i,j)-Y(i,jj));
end
d=sqrt(d)
if d<mmin
mmin=d;
idx=jj;
end
idxl(j)=idx;
d0(j)=mmin
end
end
max(j)=min((M-j),(M-idxl(j)));
for k=1:max(j)
dd=0;
for kk=1:m
dd=dd+(Y(kk,j+k)-Y(kk,idxl(j)+k))*(Y(kk,j+k)-Y(kk,idxl(j)+k));
end
dd=sqrt(dd);
d(k,j)=dd;
end
end
for j=1:M-P-1
for i=1:j
lnd=0;
ee=0;
for k=1:max(i)
if d(k,i)>0
lnd=lnd+k*log(d(k,i)/d0(i));
ee=ee+k*k
end
lamda2(i)=lnd/ee
end
lamda22(j)=sum(lamda2)/j
end
end
plot(lamda22)
在命令窗口执行后,会有如下错误信息:
Warning: Divide by zero.
lamda2 =
NaN
??? Index exceeds matrix dimensions.
所以在一本书上找了以下程序,并进行了部分修改,但运行后结果还是有错误;
由于本人是初次接触Matlab,可能有改的不对的地方,也有很多不懂的地方,特把程序拿出,请高手指正;
具体程序如下:
x=[15,24,17,17,24,22,30,21,8,17,19,15,23,18,26,25,29,22,24,29,24,30,24,22,23,25,22,18,19,27,17,28,21,21,26,17,23,25,25,14,21,16,10,18,23,22,13,21,10,22,26,28,11,27,17,17,21,25,26,22];
N=length(x);
tau=1;
m=3;
P=5;
delt_t=1;
M=N-(m-1)*tau;
d=zeros(M,M);
for j=1:M
for i=1:m
Y(i,j)=x((i-1)*tau+j);
end
end
for j=1:M
mmax=1e+100;
mmin=mmax;
for jj=1:M
d=0;
if abs(j-jj)>P
for i=1:m
d=d+(Y(i,j)-Y(i,jj))*(Y(i,j)-Y(i,jj));
end
d=sqrt(d)
if d<mmin
mmin=d;
idx=jj;
end
idxl(j)=idx;
d0(j)=mmin
end
end
max(j)=min((M-j),(M-idxl(j)));
for k=1:max(j)
dd=0;
for kk=1:m
dd=dd+(Y(kk,j+k)-Y(kk,idxl(j)+k))*(Y(kk,j+k)-Y(kk,idxl(j)+k));
end
dd=sqrt(dd);
d(k,j)=dd;
end
end
for j=1:M-P-1
for i=1:j
lnd=0;
ee=0;
for k=1:max(i)
if d(k,i)>0
lnd=lnd+k*log(d(k,i)/d0(i));
ee=ee+k*k
end
lamda2(i)=lnd/ee
end
lamda22(j)=sum(lamda2)/j
end
end
plot(lamda22)
在命令窗口执行后,会有如下错误信息:
Warning: Divide by zero.
lamda2 =
NaN
??? Index exceeds matrix dimensions.