声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: 柏莱

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

[复制链接]
发表于 2007-10-19 10:46 | 显示全部楼层
在我电脑的程序里,是d_s<D_MIN的,不知道为什么上传时变成D_MIN了!:@)
rossler系统中的Y(i)-Y(i-1)的整体图为:
r.jpg

我用lorenz检验了下,得到的拟合的图和Y(i)-Y(i-1)的图为:

l.jpg

公布的lorenz的最大lyapunov指数为1.5,我取50~200的点拟合,得到的结果为1.3246,误差为11.7%;取1~200的点拟合,得到的结果为1.5351,误差为2.3%

柏莱,用你的程序运行得到的结果和图形是怎样的?能否传上来看看?

谢谢!!:@)
回复 支持 反对
分享到:

使用道具 举报

发表于 2007-10-19 10:48 | 显示全部楼层
楼上的回复中,我第一个用的是d_min,不知为什么又变成D_MIN??
 楼主| 发表于 2007-10-22 23:39 | 显示全部楼层
以下是我自己编的程序,可能运行速度不是很理想,但经过验证,应该不存在问题,仅供参考!
function [I,x]=biggest_lyapunov_P2(data,m,tau,t)
%data代表时间序列
%m代表嵌入维数
%tau代表时间延迟
%t代表抽样时间间隔
N=length(data);
M=N-(m-1)*tau;
P=cycle(data);
P=fix(P);%时间序列的平均周期
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*t);
    end
end                            %对每个i求出所有t的lnd(i)平均x(i)
I=1:length(x);
subplot(211)
plot(I,x);grid;
xlabel('i');
ylabel('y(i)');
hold on;
for i=1:length(x)-1
    y(i)=x(i+1)-x(i);
end
subplot(212)
plot(I(1:(length(x)-1)),y);grid;
xlabel('i');
ylabel('y(i)-y(i-1)');
hold on
你可以用它试试!
下面是我用它做Lorenz系统得到的图形!
lorenz.jpg
lorenz(5100).jpg

评分

1

查看全部评分

发表于 2007-10-23 22:15 | 显示全部楼层
柏莱的这个结果还是可以的呀,就是第三个图感觉是不是有点大啊?
 楼主| 发表于 2007-10-23 23:46 | 显示全部楼层
结果是可以的,我取50到150区域进行拟合,得到的结果是1.503,与理想值的误差还是相当小的!
发表于 2007-10-24 07:50 | 显示全部楼层
呵呵,结果还是很好的啊!

我看一些文章里面,曲线变化的比你这还要剧烈,但是也能得到较好的结果的!
发表于 2007-10-24 12:36 | 显示全部楼层

回 #35 柏莱的帖子

柏莱,我研究了您的程序,思路都是一样的!
请问,您计算lorenz系统的最大lyapunov指数时,其中的data是怎样得到的?是否用ode45,时间长度是多少,时间间隔是多少,初值是多少,取哪个变量计算,是否去掉前面的某些点?然后,嵌入维数m是多少?时间延迟tau是多少?平均周期是多少?
我想用这些数据检验下自己的程序!!
谢谢!!:@)
 楼主| 发表于 2007-10-24 13:31 | 显示全部楼层
我的数据是从陆振波博士提供的工具箱里得到的,你可以看一下他的工具箱!
具体参数取值是这样的:sigma=16,b=4,c=45.92(前三个Lorenz方程中的参数),y=[-1,0,1](起始点),h=0.01(积分步长),我去掉了前面三万个点。嵌入维数是3,时间延迟是11。
发表于 2007-10-24 13:48 | 显示全部楼层

回复 #38 柏莱 的帖子

嵌入维数和时间延迟是根据GP和CC算法算的么?还是他工具箱里面的取值?
 楼主| 发表于 2007-10-24 22:54 | 显示全部楼层
这个嵌入维和时间延迟不是我算的,是我直接用得别人的结果!是应该自己再好好算算!
发表于 2008-5-12 20:58 | 显示全部楼层
柏莱我用你的程序时出现以下问题:
找不到CYCLE函数
这该怎么解决啊?

[ 本帖最后由 tidus111 于 2008-5-12 22:42 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 13:19 , Processed in 0.099224 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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