kingsir 发表于 2007-11-15 16:30

求助:计算关联维数的G-P算法

在下列的G_P算法中:

function =G_P(data,N,tau,min_m,max_m,ss)
% the function is used to calculate correlation dimention with G-P algorithm
%    计算关联维数的G-P算法
% data:the time series                     时间序列
% N: the length of the time series         时间序列长度
% tau: the time delay                        时间延迟
% min_m:the least embedded dimention m       最小的嵌入维数
% max_m:the largest embedded dimention m   最大的嵌入维数
% ss:the stepsize of r                     r的步长
%skyhawk
for m=min_m:max_m
    Y=reconstitution(data,N,m,tau);%reconstitute state space
    M=N-(m-1)*tau;%the number of points in state space
    for i=1:M-1
      for j=i+1:M
            d(i,j)=max(abs(Y(:,i)-Y(:,j)));%calculate the distance of each two         
      end                              %points in state space计算状态空间中每两点之间的距离
    end
    max_d=max(max(d));%the max distance of all points   得到所有点之间的最大距离
    d(1,1)=max_d;
    min_d=min(min(d));%the min distance of all points   得到所有点间的最短距离
    delt=(max_d-min_d)/ss;%the stepsize of r            得到r的步长
    for k=1:ss
      r=min_d+k*delt;
      C(k)=correlation_integral(Y,M,r);%calculate the correlation integral
      ln_C(m,k)=log(C(k));%lnC(r)
      ln_r(m,k)=log(r);%lnr
      fprintf('%d/%d/%d/%d\n',k,ss,m,max_m);
    end
    plot(ln_r(m,:),ln_C(m,:));
    hold on;
end
fid=fopen('lnr.txt','w');
fprintf(fid,'%6.2f %6.2f\n',ln_r);
fclose(fid);
fid = fopen('lnC.txt','w');
fprintf(fid,'%6.2f %6.2f\n',ln_C);
fclose(fid);

运行不成
提示错误:Strings passed to EVAL cannot contain function declarations

俺是新手,刚刚学习分形与混沌,请大家多多帮助!!谢谢了!!

octopussheng 发表于 2007-11-15 18:33

首先,请给出你所用的参数定义,你给出的这个代码就是论坛里面现成的,对你所说的问题没有任何的参考价值!还请把问题说的清楚点哦!

kingsir 发表于 2007-11-17 19:07

tau=9
min_m=2
max_m=12
ss=6

octopussheng 发表于 2007-11-18 20:17

请将错误提示完整贴出,最好能够给出数据组,这样可以帮你分析!

kingsir 发表于 2007-11-22 09:00

现在运行不了
tau=9;ss=6
data=[193
96
324
333
3310
2240
2970
2490
3260
846
343
471
225
96
252
632
983
571
942
857
476
964
871
1350
1150
1410
258
174
99
163
32
1230
228
1480
646
3500
2080
613
4380
3020
2040
4730
1048
807
146
51
152
227
160
346
345
760
292
252
381
384
825
282
330
612
492
504
854
5650
1010
594
2400
1704
865
725
374
1956
406
353
1308
2610
2720
1063
133
197
132
128
121
134
1105
856
4164
2928
3210
3920
3480
3030
2180
2370
2870
2460
5050
2530
2840
1990
2590
2860
3120
4860]
N=length(data)
min_m=2;max_m=9
for m=min_m:max_m
    Y=reconstitution(data,N,m,tau);%reconstitute state space
    M=N-(m-1)*tau;%the number of points in state space
    for i=1:M-1
      for j=i+1:M
            d(i,j)=max(abs(Y(:,i)-Y(:,j)));%calculate the distance of each two         
      end                              %points in state space计算状态空间中每两点之间的距离
    end
    max_d=max(max(d));%the max distance of all points   得到所有点之间的最大距离
    d(1,1)=max_d;
    min_d=min(min(d));%the min distance of all points   得到所有点间的最短距离
    delt=(max_d-min_d)/ss;%the stepsize of r            得到r的步长
    for k=1:ss
      r=min_d+k*delt;
      C(k)=correlation_integral(Y,M,r);%calculate the correlation integral
      ln_C(m,k)=log(C(k));%lnC(r)
      ln_r(m,k)=log(r);%lnr
      fprintf('%d/%d/%d/%d\n',k,ss,m,max_m);
    end
    plot(ln_r(m,:),ln_C(m,:));
    hold on;
end
fid=fopen('lnr.txt','w');
fprintf(fid,'%6.2f %6.2f\n',ln_r);
fclose(fid);
fid=fopen('lnC.txt','w');
fprintf(fid,'%6.2f %6.2f\n',ln_C);
fclose(fid)

谢谢了!!

octopussheng 发表于 2007-11-22 13:39

我帮你试过了,是可以算的,结果如下:
ln_r =
         0         0         0         0         0         0
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337
    6.8420    7.5351    7.9406    8.2283    8.4514    8.6337

ln_C =
         0         0         0         0         0         0
   -1.3106   -0.7425   -0.3090   -0.1297   -0.0353         0
   -1.8723   -1.0207   -0.4231   -0.1892   -0.0542         0
   -2.4842   -1.3415   -0.5572   -0.2685   -0.0796         0
   -3.0963   -1.7371   -0.7235   -0.3735   -0.1089         0
   -3.5530   -2.0742   -0.8642   -0.4427   -0.1283         0
   -3.9326   -2.4379   -1.0081   -0.5108   -0.1428         0
   -4.4067   -2.8381   -1.1563   -0.5673   -0.1683         0
   -5.1080   -3.2108   -1.2793   -0.6156   -0.1953         0

计算结果你可以自己用最小二乘拟合做的,就不给你算了

图示如下

kingsir 发表于 2007-11-22 14:44

非常感谢!!我在试试。

kingsir 发表于 2007-11-22 14:51

不好意思还我算不出,不知什么地方出错了,上面程序运行的结果是:
ss =
   6
data =
         193
          96
         324
         333
      3310
      2240
      2970
      2490
      3260
         846
         343
         471
         225
          96
         252
         632
         983
         571
         942
         857
         476
         964
         871
      1350
      1150
      1410
         258
         174
          99
         163
          32
      1230
         228
      1480
         646
      3500
      2080
         613
      4380
      3020
      2040
      4730
      1048
         807
         146
          51
         152
         227
         160
         346
         345
         760
         292
         252
         381
         384
         825
         282
         330
         612
         492
         504
         854
      5650
      1010
         594
      2400
      1704
         865
         725
         374
      1956
         406
         353
      1308
      2610
      2720
      1063
         133
         197
         132
         128
         121
         134
      1105
         856
      4164
      2928
      3210
      3920
      3480
      3030
      2180
      2370
      2870
      2460
      5050
      2530
      2840
      1990
      2590
      2860
      3120
      4860

N =
   104
max_m =
   9
??? Undefined function or variable 'reconstitution'.

octopussheng 发表于 2007-11-22 15:12

你没有reconstitution.m这个函数,可以在论坛搜索的到的,

另外,建议你去matlab主页下载混沌研究的工具箱,即Chaos toolbox V2.0,里面这些工具比较全面!

无水1324 发表于 2007-11-22 17:14

回复 #8 kingsir 的帖子

这样的数据是不是要想办法处理一下,再发上来,看起来比较麻烦的

kingsir 发表于 2007-11-22 19:31

回octopussheng :非常感谢!!
回无水1324 :以后注意

octopussheng 发表于 2007-11-22 21:18

回复 #11 kingsir 的帖子

你做的时候最好不要直接修改源程序,可以在命令行里面用命令的方式输入,源码其实都是一样的,直接调用就可以了,呵呵!

kingsir 发表于 2007-11-23 10:33

主任:我在论坛没有搜到Chaos toolbox V2.0,beidu和google搜到的不能下载,能否发给我一个?
      email:ytht1210◎21cn.com
      谢谢你的无私帮助
??

octopussheng 发表于 2007-11-23 10:50

昨天好像给你发了,可能我的邮箱有问题吧,刚给你发了,查收一下吧!

kingsir 发表于 2007-11-23 11:45

收到!谢谢了!有问题再向你请教!
页: [1] 2 3 4 5 6 7
查看完整版本: 求助:计算关联维数的G-P算法