声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: yufeiqun2008

[分形与混沌] 关于吕金虎CC算法和最大Lyapunov指数计算的一些问题的说明

[复制链接]
发表于 2008-11-7 16:10 | 显示全部楼层
那么是不是求lyapunov主程序所用的相空间重构函数和C-C程序中用到的相空间重构函数不一样?
回复 支持 反对
分享到:

使用道具 举报

发表于 2008-11-7 16:13 | 显示全部楼层
楼主function [St,S_t,dS_m_t,dS_t,S_cor]=CC(x)

中的符号St,S_t,dS_m_t,dS_t,S_cor分别代表什么?
发表于 2008-12-1 14:51 | 显示全部楼层

回复 11楼 yufeiqun2008 的帖子

我画出的图也是这样,一直没有解决,看到你绘出的图很理想,很想学习学习。能否把你的程序发给我学习学习,我的邮箱:meiling_student@yahoo.com.cn
谢谢
发表于 2008-12-1 17:19 | 显示全部楼层

非常感谢

LZ,你好。
非常感谢你的这个帖子,根据你的建议,我的CC_method算法也计算出结果了,结果和你的结果(11楼)的差不多。呵呵。
发表于 2008-12-1 21:28 | 显示全部楼层

回复 34楼 zhangli840915 的帖子

请问,你是怎么修改的啊?我的图和你原来的图一样,但我找不到问题在哪??谢谢赐教
发表于 2008-12-10 21:22 | 显示全部楼层

回复 楼主 yufeiqun2008 的帖子

我也准备试试画出这本书上的图4.7-4.9,呵呵,用你设定的参数计算看看。:@)
发表于 2008-12-28 11:49 | 显示全部楼层

回复 30楼 yifei2009 的帖子

我把你的程序复制到m文件,主函数和子函数分开不同的m文件(名字默认的,应该没问题),然后都放在一个文件夹里(数据我自己加了3000点),为什么执行的时候出现如下错误:
???  In an assignment A(matrix,:) = B, the number of elements in the subscript of A and
the number of rows in B must be the same.

Error in ==> D:\MATLAB6p5p1\mywork\baida\C_C\gaoren\getCValue.m
On line 10  ==>     xv(ii,:)=x([((ii-1)+1):1:((ii-1)+M)]);

Error in ==> D:\MATLAB6p5p1\mywork\baida\C_C\gaoren\CC.m
On line 3030  ==>                 c1=getCValue(xsub,m(mm),rjj,t(tt));

是我哪里犯了低级错误了?请指点,谢谢!!
发表于 2008-12-29 09:26 | 显示全部楼层

回复 37楼 xiaokang 的帖子

我这个用过好长时间了,记不大清楚。

好像没有出现你这种错误呀。
发表于 2008-12-29 17:23 | 显示全部楼层

回复 38楼 wxl789 的帖子

谢谢回复,能否加我qq呢?30416747,谢谢~
发表于 2009-1-6 01:32 | 显示全部楼层

请教大家,希望得到各位的批评和见解,等待。。。

我今天求了一个混沌模型的一个维数据的LE(数据在附件中,总共2321点),过程这样的,先用cc方法求得时间延迟 tao=9,然后用G-P算法(初始提条件是m=2:10;ss=10,tao=9),求得关联维大概D2=3和嵌入维m=8(这个图形在附件中,问题1:为什么我做出来的图形看不到D2收敛呢?是什么原因呢,是我拟合区域问题,还是初始值有问题呢?)。
    然后我按照关联维D2=3和嵌入维m=8用wolf方法继续算LE,求得最大LE为0.0271。(问题2:如果我想求所有的LE,怎么办?给点建议!有经验的朋友估计这个结果正确吗?)。
    由于我在G-P算法出求得的D2和m感觉不一定正确,所以我又采用小数量方法计算最大LE,想验证一下,结果电脑运行了6个小时,没出结果,郁闷!(问题3:你们的小数量算法算2000点或是3000点也非常慢吗?大概多久?感觉我的小数量算法有问题,但是该算法运行500点的数据一会就出结果。
    问题4:该小数量算法中lambda_1=largest_lyapunov_p3(data,N,m,tau,P,delt_t)的最后一个参数delt_t,我看了吕金虎的书,理解为两个相邻数据点之间的时间延迟,我的理解正确否,我这里取的是1)
     最后希望大家给我帮助,哪位有时间的话,运行一下我的数据,感谢!期待答复。。。。。

求D2和m的图形

求D2和m的图形

data.txt

19.18 KB, 下载次数: 40

想求LE的数据

发表于 2009-1-6 01:47 | 显示全部楼层

补充

我用的小数量算法程序如下:
function lambda_1=largest_lyapunov_p3(data,N,m,tau,P,delt_t)
m=8;tau=9;
delt_t=1;

%**********************************************************
x=data;
xPower=abs(fft(x)).^2;
NN=length(xPower);
xPower(1)=[];%去除直流分量
NN=floor(NN/2);
xPower=xPower(1:NN);
freq=(1:NN)/NN*0.5;
[mP,index]=max(xPower);
P=index;  
%*************************************************************

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=[d_length,max_i];
    for k=1:max_i              %计算点j与其最近邻点在i个离散步后的距离
        d_j_i=0;        
        d_j_i=norm(Y(j+k)-Y(idx_j+k));
        d_content=[d_content,d_j_i];
    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=[y,S_j_i/(Count*delt_t)]; %对每个演化时间步长i,求所有的j平均
end
XX=1:length(y);
figure;
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);
figure;
plot(XX1,yp,'r--');


function X=reconstitution(data,N,m,tau)
%该函数用来重构相空间
% m为嵌入空间维数
% tau为时间延迟
% data为输入时间序列
% N为时间序列长度
% X为输出,是m*n维矩阵

M=N-(m-1)*tau;%相空间中点的个数
for j=1:M           %相空间重构
    for i=1:m
        X(i,j)=data((i-1)*tau+j);
    end
end
发表于 2009-5-12 18:49 | 显示全部楼层

回复 40楼 xiaokang 的帖子

G-P里,你尝试下m大点,你这里只有到10,ss也取大点看看
发表于 2009-12-9 11:33 | 显示全部楼层

回复 30楼 yifei2009 的帖子

请问程序中 半径r,是用来干什么的?
还有S_t  dS_m_t  dS_t  S_cor 分别代表什么
貌似有人问过,怎么没人回答?
发表于 2010-2-1 14:13 | 显示全部楼层

回复 43楼 zebtra_stripe 的帖子

从这个帖子中受益颇多,感谢大家这么无私的奉献:victory: :handshake

对于几个参数的意义,其实在吕金虎的《混沌时间序列分析及应用》都有介绍,只是有时候不够详尽;
我根据自己的理解来说说看,不对请的大家指正:

1)半径r : 在计算关联积分的时候会用到r  (参看 书中- P67页的公式3.23)
【说明】
相空间中,会定义一个满足 a. 非负;b. 齐次;c.三角不等 这三个条件的映射,来表示相空间中各个向    量 间的距离,在CC方法中,用泛数(程序中采用的是无穷泛数,即max(abs(x1,x2,x3,...)))来表示相空间中向量间的距离,半径r是基于距离的概念的,r在这里类似于一个阈值,当两个向量间的距离大于r时, 关联积分中(参看 书中- P67页的公式3.23)的theta=1,否则theta=0;

2) S_t   : 对应书中P69页- (3.31),是S(m,r,t)的均值(mean of S(t)  - mean_St),S是一个与关联维数相关的量 ; mean_St的第一个零点t对应时间延迟Tau_delay = t*Tau_sampling (P70页)

3)dS_t  - 对应书中P69页的式(3.32) delta_mean_S(t) 或者dmS - delta_mean_S(t)的第一个极小值t,对应时间延迟Tau_delay = t*Tau_sampling (P70页)

4)S_cor - 对应式(3.33),其最小值t对应时间窗口 Tau_window = t * Tau_sampling

总的来说,这几个变量是用来确定 嵌入维数 和 时间延迟的



【】呼唤Octopussheng和其他几位大佬出来 给予大家更多的指导
发表于 2010-2-1 14:22 | 显示全部楼层

回复 板凳 xiaokang 的帖子

我也在纠结之中,这个Lyapunov指数把人弄得云里雾里

关于delta_t的选取,我在另一个论坛中看到过,转过来看看对大家有没有用

1-楼--------------------------------------------------------------------------------------------------

【求助】"求最大Lyapunov指数的小数据量方法"中delta_t的选取
假设输入数据为Lorenz映射的离散点列,获得此点列时,会有一个采样频率,也就是delta_t  (取的是0.001)。

求解最大Lyapunov指数的小数据量方法中,最后求和的部分,也有一个delta_t在分母部分出现。

现在的理解,2者就是同一个东西。(正确??)

如果输入数据并非从微分方程而来(比如就是某处每天的水深高度),
那delta_t改如何选取呢?默认为1 ?

如果把最初的Lorenz序列,当做是每天的水深高度,取delta_t为1,
那样就会得到另一个Lyapunov指数……(一个是另一个的 delta_t 倍)

基于最大Lyapunov指数进行预测时,好像没有出现delta_t,
难道用这两个相差delta_t倍的最大Lyapunov指数,都可以进行预测??

糊涂了……

貌似这个问题比较弱,请高手不吝赐教
thanks~~

2-楼--------------------------------------------------------------------------------------------------
Re:【求助】"求最大Lyapunov指数的小数据量方法"中delta_t的选取
StrongZhu 的每一个提问都很好,加分鼓励!
说一下我的理解

第一个问题:
“假设输入数据为Lorenz映射的离散点列,获得此点列时,会有一个采样频率,也就是delta_t (取的是0.001)。

求解最大Lyapunov指数的小数据量方法中,最后求和的部分,也有一个delta_t在分母部分出现。”
这两者的delta_t是同一个参数
第二个问题,若时间序列本身就是离散的,按delta_t为1来取就可以了

第三个问题,基于最大Lyapunov指数对连续系统进行预测时,
不取delta_t时得到的大Lyapunov指数可以求的最大预测步数,
取了delta_t以后求得的大Lyapunov指数可以求的最大预测时间。
你好好琢磨一下,会发现实际上两者表达了同一个意思。

-----------------------------------------------------------------------------------------------

【引用自】http://bbs.matwav.com/viewthread.php?tid=617569
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-23 22:59 , Processed in 0.186956 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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