柏莱 发表于 2007-9-28 19:13

没有呀,第二次循环时dt(ii)即dt(2)也是零呀,上一次的距离已经存放在dt(1)中了呀!我始终认为是这样的!谢谢你给我提供的线索和对我问题的关注!!!

smalldog002 发表于 2007-10-3 00:47

程序是没问题的,不过最后作线性拟合时有些麻烦,不知道选取多少个点才合适。
根据那些经典的混沌系统的le指数,我们可以尝试选取不同的点数来拟合得到结果,但不同的系统选取的点数不同,根本无规律可循,而且不同点数拟合得到的le指数的差别还是蛮大的。
这就有一个问题,对于一个新系统,我们怎么知道选取多少个点数拟合才能得到相对正确的le指数呢?

柏莱 发表于 2007-10-8 16:31

这可能是许多人都有的问题!!!

octopussheng 发表于 2007-10-14 20:28

回复 #17 smalldog002 的帖子

你说的这些问题很有道理啊,不过这些只有做了,而且得到较好的结果之后才可以总结出一些经验,然后用于其他的系统!继续努力吧,呵呵!◎

wanyeqing2003 发表于 2007-10-14 21:52

是不是可以采用分段拟合,或者样条分析的方法来解决。

整体拟合可能会有问题。

柏莱 发表于 2007-10-14 23:00

楼上所说有道理,整体拟合是不行的,但怎样选择拟合段有是个问题。总体来讲,应该是选择一段近似线性的区域,但这个线性区域不能是达到饱和状态的线性区域。我试过LOGISTIC/HENON和LERONZ系统,效果还可以,与理想值的误差不大。

smalldog002 发表于 2007-10-17 11:42

什么是饱和状态的线性区域呢?

如何找到楼上所说的线性区域,能解释一下吗?

无水1324 发表于 2007-10-17 12:05

回复 #21 柏莱 的帖子

所以这些方法都具有一定的主观操作性,真正的研究透、准确还是有点难度的

octopussheng 发表于 2007-10-17 13:39

回复 #22 smalldog002 的帖子

这个问题你可以看一下陆振波的论文,可以上他的主页看一下

smalldog002 发表于 2007-10-17 14:51

我看了陆振波的《关于小数据量计算最大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,误差反而小了。
请问这是为什么?
谢谢!:@)

octopussheng 发表于 2007-10-17 19:35

回复 #25 smalldog002 的帖子

这个真是说不清啊,柏莱和sx这方面做的比较多,请他们帮忙讨论讨论吧,呵呵!

柏莱 发表于 2007-10-18 10:21

饱和线性区域就是y(i)-y(i-1)近似为零的区域,这一区域当然是不能拿来做拟合的。
我没有做过rossler系统,所以目前我也不能清楚问题出在哪里!不知道你做的i=1-8这个区域,你说的波动大是怎么样的?能不能把你做出的图拿出来大家分析分析?最好自己的程序也贴出来!

smalldog002 发表于 2007-10-18 11:16

小数据量算法的程序,从网上下载的,但是自己根据《混沌时间序列分析及其应用》验证了代码,程序是没有问题的。

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)的图:


请帮忙看看,谢谢!!:@)

sssssxxxxx921 发表于 2007-10-18 20:58

关于拟合这部分我也不是太熟,但是从实际的验证来看,就选前几个点就可以了,你从它的定义上想想,小数据量法的计算上重构相空间中后面的点就有点不太精确,(表达不精确,有很大的歧义,但现在想不出来更好的表达,希望给解答带来点思路    呵呵),我这段没时间看这,而且智力有限   柏莱在这方面做的不错,而且他也在这方面寻求过答案,多讨论一下,相信你们两个可以解决的

柏莱 发表于 2007-10-19 08:53

在没有具体验证你的程序之前,有两个问题:1、第22行是 if d_s<D_MIN应该是if d_s<d_min;
2、从你的图形判断,应该是有点问题的!第一个图看不太出来,第二个图你的曲线始终位于零的上方,这意味着,从总体趋势来看,第一个图的曲线应该始终是增长的,没有最后的一个饱和区域,这就违背了混沌吸引子的特性。所以,你的程序应该是存在问题的。
建议你自己再仔细看看!或者再拿其他系统验证一下!!!

[ 本帖最后由 柏莱 于 2007-10-19 08:57 编辑 ]
页: 1 [2] 3
查看完整版本: 求助:关于最小数据量法算出的图形的拟合问题