根据那些经典的混沌系统的le指数,我们可以尝试选取不同的点数来拟合得到结果,但不同的系统选取的点数不同,根本无规律可循,而且不同点数拟合得到的le指数的差别还是蛮大的。
这就有一个问题,对于一个新系统,我们怎么知道选取多少个点数拟合才能得到相对正确的le指数呢? 这可能是许多人都有的问题!!!
回复 #17 smalldog002 的帖子
你说的这些问题很有道理啊,不过这些只有做了,而且得到较好的结果之后才可以总结出一些经验,然后用于其他的系统!继续努力吧,呵呵!◎ 是不是可以采用分段拟合,或者样条分析的方法来解决。整体拟合可能会有问题。 楼上所说有道理,整体拟合是不行的,但怎样选择拟合段有是个问题。总体来讲,应该是选择一段近似线性的区域,但这个线性区域不能是达到饱和状态的线性区域。我试过LOGISTIC/HENON和LERONZ系统,效果还可以,与理想值的误差不大。 什么是饱和状态的线性区域呢?
如何找到楼上所说的线性区域,能解释一下吗?
回复 #21 柏莱 的帖子
所以这些方法都具有一定的主观操作性,真正的研究透、准确还是有点难度的回复 #22 smalldog002 的帖子
这个问题你可以看一下陆振波的论文,可以上他的主页看一下 我看了陆振波的《关于小数据量计算最大lyapunov指数的讨论》,然后用rossler系统来检验:首先=ode45('rossler',,),然后取x=Y(:,1)计算,把x的前1001个点去掉,取时延为14,嵌入维数为4,平均周期为61,用《混沌时间序列分析及其应用》中提到的小数据量算法计算,在拟合阶段,用陆振波提到的用y(i)-y(i-1)来找变化较小的线性区域,取i=50~150这些点来拟合,得到的结果为0.04,而公布的权威结果为0.09,但是取i=1~8这些波动较大的点拟合,结果为0.0903,误差反而小了。请问这是为什么?
谢谢!:@)
回复 #25 smalldog002 的帖子
这个真是说不清啊,柏莱和sx这方面做的比较多,请他们帮忙讨论讨论吧,呵呵! 饱和线性区域就是y(i)-y(i-1)近似为零的区域,这一区域当然是不能拿来做拟合的。我没有做过rossler系统,所以目前我也不能清楚问题出在哪里!不知道你做的i=1-8这个区域,你说的波动大是怎么样的?能不能把你做出的图拿出来大家分析分析?最好自己的程序也贴出来! 小数据量算法的程序,从网上下载的,但是自己根据《混沌时间序列分析及其应用》验证了代码,程序是没有问题的。
function lambda_1=largest_lyapunov_exponent(data,N,m,tau,P,delt_t)
clear
clc
load xdata
data=x;
N=length(data);
m=4;
tau=14;
P=ave_T(data,N);
delt_t=0.1;
d_length=[];
d_content=[];
Y=reconstitution(data,N,m,tau);
M=N-(m-1)*tau;
idx_j=0;
for j=1:M
d_min=10000;
for jj=1:M
d_s=0; %寻找相空间中每个点的最近距离点,并记下该点下标
if abs(j-jj)>P %限制短暂分离
d_s=sum(abs(Y(j)-Y(jj)));
if d_s<D_MIN
d_min=d_s;
idx_j=jj;
end
end
end
if ((M-j)>(M-idx_j));%计算点j的最大演化时间步长i
max_i=M-idx_j;
else
max_i=M-j;
end
d_length=;
for k=1:max_i %计算点j与其最近邻点在i个离散步后的距离
d_j_i=0;
d_j_i=norm(Y(j+k)-Y(idx_j+k));
d_content=;
end
end
%对每个演化时间步长i,求所有的j的lnd(i,j)平均
y=[];
for i=1:max(d_length)
S_j_i=0;
sum_former=0;
Count=0;
for j=1:M
if j==1
former=0;
else
former=d_length(j-1);
end
sum_former=sum_former+former;
if i<=(d_length(j))
if d_content(sum_former+i)~=0
S_j_i=S_j_i+log(d_content(sum_former+i));
Count=Count+1;
end
end
end
y=; %对每个演化时间步长i,求所有的j平均
end
XX=1:length(y);
plot(XX,y(XX),'.','markersize',1);hold on;
linear=input('请输入线形部分的长度');
XX1=1:linear;
pp=polyfit(XX1,y(XX1),1);
lambda_1=pp(1)
yp=polyval(pp,XX1);
plot(XX1,yp,'r--');
用小数据量算法得到的rossler系统的图:
Y(i)-Y(i-1)的图:
请帮忙看看,谢谢!!:@) 关于拟合这部分我也不是太熟,但是从实际的验证来看,就选前几个点就可以了,你从它的定义上想想,小数据量法的计算上重构相空间中后面的点就有点不太精确,(表达不精确,有很大的歧义,但现在想不出来更好的表达,希望给解答带来点思路 呵呵),我这段没时间看这,而且智力有限 柏莱在这方面做的不错,而且他也在这方面寻求过答案,多讨论一下,相信你们两个可以解决的 在没有具体验证你的程序之前,有两个问题:1、第22行是 if d_s<D_MIN应该是if d_s<d_min;
2、从你的图形判断,应该是有点问题的!第一个图看不太出来,第二个图你的曲线始终位于零的上方,这意味着,从总体趋势来看,第一个图的曲线应该始终是增长的,没有最后的一个饱和区域,这就违背了混沌吸引子的特性。所以,你的程序应该是存在问题的。
建议你自己再仔细看看!或者再拿其他系统验证一下!!!
[ 本帖最后由 柏莱 于 2007-10-19 08:57 编辑 ]