声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6117|回复: 40

[分形与混沌] 求助:关于最小数据量法算出的图形的拟合问题

[复制链接]
发表于 2007-9-23 19:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
想问一下,这个图如何拟合?这是用最小数据量法做出的logistic方程数据的图。我算了一下,如果整体拟合,结果很小;如果最第一段弧线拟合,得出的结果还比较理想。取前6个点,得到的是0.699;取前9个点,得到的是0.532(好像是的,也记不太清了)。谢谢高手指点!!!
untitled.jpg
回复
分享到:

使用道具 举报

发表于 2007-9-24 08:34 | 显示全部楼层
你把你的程序发上来我看看
 楼主| 发表于 2007-9-24 23:27 | 显示全部楼层
function BiggestLyapunov=biggest_lyapunov_P1(data,m,tau)
N=length(data);
M=N-(m-1)*tau;
BiggestLyapunov=cycle(data);
P=fix(BiggestLyapunov);
X=reconstitution(data,M,m,tau); %相空间重构
di=zeros(M-1,M-1);
for i=1:M-1
    d_min=1e+100;
    for j=1:M
        d=0;
        if abs(i-j)>P
           for k=1:m
               d=d+(X(i,k)-X(j,k))^2;
            end
            d=sqrt(d);
            if d<d_min
               d_min=d;
               DK=j;
            end
        end
    end    %找出相空间中每个点X(t)的最近邻点
   
    dt=zeros(min(M-i,M-DK));
    for ii=1:min(M-i,M-DK)
        for kk=1:m
            dt(ii)=dt(ii)+(X(i+ii,kk)-X(DK+ii,kk))^2;
        end
        dt(ii)=sqrt(dt(ii));
        di(i,ii)=dt(ii);
    end
end                             %对相空间中每个点X(t),计算出该邻域点对的i个离散时间步后的距离

jj=0;
for l=1:M-1
    q=0;
    ln_d=0;
    for n=1:M-1
        if di(n,l)~=0
            ln_d=ln_d+log(di(n,l));
            q=q+1;
        end
    end
    if ln_d~=0
        jj=jj+1;
        x(jj)=ln_d/q;
    end
end                            %对每个i求出所有t的lnd(i)平均x(i)
I=1:length(x);

plot(I,x);
hold on;
xlabel('i');
ylabel('x(i)');
 楼主| 发表于 2007-9-24 23:30 | 显示全部楼层
麻烦你给看看,有什么问题尽管说!谢谢!!!
发表于 2007-9-26 22:07 | 显示全部楼层

回复 #4 柏莱 的帖子

刚看了一下,还没找到问题,不过我用洛仑兹验证了一下,得到的结果却不可靠
发表于 2007-9-26 22:34 | 显示全部楼层
奇怪,按你出来的结果应该是差不多的,曲线虽说和别人的差一点,
拟合是不可能取全部的点
但是为什么我用洛仑兹验证你的结果不对呢
你的重构函数那些没问题吧
 楼主| 发表于 2007-9-27 14:05 | 显示全部楼层
之上的程序的确是存在一点问题的,就是在对每个i求出所有t的lnd(i)平均x(i)时, x(jj)=ln_d/q; 这一句有问题,应该是x(jj)=ln_d/(q*t),这个t是时间步长,相当于洛仑兹中的积分步长0.01。因此biggest_lyapunov_P1(data,m,tau)应该改为biggest_lyapunov_P1(data,m,tau,t)。
计算平均周期的cycle函数我也不知道是否正确,但我试过,平均周期的影响不大。重构函数应该不存在问题,只不过我是把时间序列重构成了一个[M,m]的矩阵,这不会对结果有什么影响。

[ 本帖最后由 柏莱 于 2007-9-27 14:09 编辑 ]
发表于 2007-9-27 19:37 | 显示全部楼层

回复 #8 柏莱 的帖子

首先整个曲线做拟合我觉得是不现实的,肯定给结果带来误差

其次,你这个理解是不对的吧,对线性区域拟合得到的直线的斜率应该就是最大的LE了!
 楼主| 发表于 2007-9-27 20:06 | 显示全部楼层
楼上所言极是,谢谢!!乱想罢了!
发表于 2007-9-27 21:00 | 显示全部楼层
首先 周期从别人的论文来看应该影响不是很大,但你自己试试
第二 程序中M*m和m*M是一样的,只不过在相空间重构时要变一下
第三 除了缺少t,我觉得,第25行,也就是下面两行前应该加上dt(ii)=0;
        for kk=1:m
            dt(ii)=dt(ii)+(X(i+ii,kk)-X(DK+ii,kk))^2;
第四 你这个程序的算法思路是不是从吴怀宇《时间序列分析与综合》上来的?

评分

1

查看全部评分

发表于 2007-9-27 21:04 | 显示全部楼层
对线性区域拟合得到的直线的斜率应该就是最大的LE了

同意oct的说法
 楼主| 发表于 2007-9-27 22:49 | 显示全部楼层
谢谢sssssxxxxx921的回复,我在第25行已经定义了dt=zeros(min(M-i,M-DK)。我的程序是看了吕金虎的《混沌时间序列分析及其应用》后自己编的。
发表于 2007-9-27 22:55 | 显示全部楼层

回复 #13 柏莱 的帖子

我知道你定义了dt=zeros(min(M-i,M-DK)。但是你再仔细看看  第一次循环后经过 dt(ii)=sqrt(dt(ii));
这很明显是个距离,但是在下一个循环中叠加for kk=1:m
            dt(ii)=dt(ii)+(X(i+ii,kk)-X(DK+ii,kk))^2;
        end
   这里的dt是个距离的平方和上面的距离来叠加,你觉得这样对吗?虽说结果可能差不多       但是这样很明显是不对的
 楼主| 发表于 2007-9-27 23:17 | 显示全部楼层
谢谢你仔细的看了我的程序。但我认为在第二次循环时,ii的值已经发生了变化,即ii=2了,所以第二次dt(ii)为零了,你认为呢?

[ 本帖最后由 柏莱 于 2007-9-27 23:20 编辑 ]
发表于 2007-9-28 14:35 | 显示全部楼层

回复 #15 柏莱 的帖子

[quote]但我认为在第二次循环时,ii的值已经发生了变化,即ii=2了,所以第二次dt(ii)为零了[quote]
可是ii=2时,你的dt(ii)明显等于上一次的距离,而不是所谓的0
不过我试了一下,结果是差不多的
另外关于李雅普诺夫指数,《一种最大李雅普诺夫指数估计的稳健算法》杨绍清  物理学报 2000
那上边有一些LE指数
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 23:48 , Processed in 0.114872 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表