声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5747|回复: 19

[分形与混沌] 关联维数和盒维数

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

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

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

x
最近研究混沌,据资料上讲,关联维数和盒维数都是分形维数的一种,但是书上没有介绍这两者之间的关系,我想问一下,这两者之间有什么联系????
回复
分享到:

使用道具 举报

发表于 2010-10-14 21:28 | 显示全部楼层
应该是计盒维数吧
分形位数多种多样,其中计盒维数是最简单的,关联维数是最常用的
它们的区别主要在于角度的不同

计盒维数是从空间占据程度来描述布格局的尺度变化特征
关联维数是从个体空间关联的尺度变化角度来描述的

当然还有诸如豪斯多夫维数、信息维数等等
 楼主| 发表于 2010-10-15 12:42 | 显示全部楼层
谢谢你的回答
其实吧,这个我也知道,但是我用不同的程序对相同的时间序列进行计算后,发现求出来的关联维数和盒维数的值差距很大,所以我就是想知道两者的联系,差距那么大说明了什么问题?
发表于 2012-9-6 10:25 | 显示全部楼层
楼主,请教个问题,我现在也在用盒维数与关联维计算数据的维数,可否赐教下如何计算啊?
发表于 2012-9-6 10:43 | 显示全部楼层
  1. %根据计盒维数原理编写了求一维曲线分形维数的matlab程序

  2. function D=FractalDim(y,cellmax)

  3. %求输入一维信号的计盒分形维数
  4. %y是一维信号
  5. %cellmax:方格子的最大边长,可以取2的偶数次幂次(1,2,4,8...),取大于数据长度的偶数
  6. %D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),

  7. y=[1,1,5,1,1,5];
  8. cellmax=8;

  9. if cellmax<length(y)
  10. error('cellmax must be larger than input signal!')
  11. end
  12. L=length(y);%输入样点的个数
  13. y_min=min(y);

  14. %移位操作,将y_min移到坐标0点
  15. y_shift=y-y_min;
  16. %重采样,使总点数等于cellmax+1
  17. x_ord=[0:L-1]./(L-1);
  18. xx_ord=[0:cellmax]./(cellmax);
  19. y_interp=interp1(x_ord,y_shift,xx_ord);
  20. %按比例缩放y,使最大值为2^^c
  21. ys_max=max(y_interp);
  22. factory=cellmax/ys_max;
  23. yy=abs(y_interp*factory);

  24. t=log2(cellmax)+1;%叠代次数
  25. for e=1:t
  26. Ne=0;%累积覆盖信号的格子的总数
  27. cellsize=2^(e-1);%每次的格子大小
  28. NumSeg(e)=cellmax/cellsize;%横轴划分成的段数

  29. for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)
  30. begin=cellsize*(j-1)+1;%每一段的起始
  31. tail=cellsize*j+1;
  32. seg=[begin:tail];%段坐标
  33. yy_max=max(yy(seg));
  34. yy_min=min(yy(seg));
  35. up=ceil(yy_max/cellsize);
  36. down=floor(yy_min/cellsize);
  37. Ns=up-down;% 本段曲线占有的格子数
  38. Ne=Ne+Ns;%累加每一段覆盖曲线的格子数

  39. end

  40. N(e)=Ne;%记录每e下的N(e)
  41. end

  42. %对log(N(e))和log(k/e)进行最小二乘的一次曲线拟合,斜率就是D

  43. r=-diff(log2(N));%去掉r超过2和小于1的野点数据
  44. id=find(r<=2&r>=1);%保留的数据点
  45. Ne=N(id);
  46. e=NumSeg(id);
  47. plot(log2(e),log2(Ne),'+');
  48. lsline;
  49. P=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距
  50. D=P(1);
复制代码

评分

1

查看全部评分

发表于 2012-9-6 10:45 | 显示全部楼层
  1. function [prr,pcr,p]=glws(x,m,t)
  2. %函数名为关联维数的首字母,用于单串序列,多串到glsw;
  3. %x为要分析的数据;
  4. %x=xlsread('d:\matworks\dbin.xls');
  5. [m1,n1]=size(x);
  6. n=m1;
  7. [mm1,mm]=size(m);
  8. p=zeros(mm,2); %存放拟合系数的矩阵;
  9. rr=zeros(20,mm);%rr是相当于筛子的那个距离,存放的是对数;
  10. cr=zeros(20,mm);%cr是小于筛子距离的距离个数,存放的是对数;
  11. %prr=zeros(20,mm);%rr是相当于筛子的那个距离,存放的是对数;
  12. %pcr=zeros(20,mm);%cr是小于筛子距离的距离个数,存放的是对数;
  13. scope=zeros(19,1);
  14. msr=zeros(19,1);
  15.    for k=1:mm
  16.       tt=0;
  17.       nm=n-(m(k)-1)*t;%Nm为列数;
  18.       nr=(nm-1)*nm/2;%Nr为距离的总个数;
  19.       juli=zeros(nr,1);%全部距离搞成一列的长矩阵;
  20.       r=zeros(nm,nm);%各列之间距离矩阵;
  21.       y=zeros(m(k),nm);%重构相矩阵的值yij;
  22.      for j=1:nm
  23.          for i=1:m(k)
  24.             y(i,j)=x(j+(i-1)*t);
  25.          end
  26.      end
  27.      for i=1:nm-1
  28.          for j=i+1:nm
  29.              for kk=1:m(k)
  30.                r(i,j)=r(i,j)+(y(kk,j)-y(kk,i))^2;
  31.              end
  32.              r(i,j)=sqrt(r(i,j));
  33.              tt=tt+1;
  34.              juli(tt)=r(i,j);
  35.          end
  36.      end
  37.   %进行r和cr个数的计算;
  38.     rmin=min(juli);
  39.     rmax=max(juli);
  40.     for i=1:20  %每次把距离间隔分20分来慢慢加;
  41.        rr(i,k)=(rmax-rmin)*(i+1)/21; %距离取法值得研究一下;
  42.        for j=1:nr
  43.            if juli(j)<=rr(i,k)
  44.                 cr(i,k)=cr(i,k)+1;
  45.            end
  46.        end
  47.        rr(i,k)=log(rr(i,k));
  48.        cr(i,k)=log(cr(i,k)/nr);
  49.      end
  50.     %rr=rr';
  51.     tt=0;
  52.     for i=1:19
  53.         scope(i)=(cr(i+1,k)-cr(i,k))/(rr(i+1,k)-rr(i,k));%每点的斜率;
  54.         tt=tt+scope(i);
  55.         plot(i,scope(i),'-bd'),hold on;
  56.     end
  57.     tt=tt/19;%各相邻点间斜率平均值;
  58.     tshold=(max(scope)-min(scope))/2;%threshold,阈值;
  59.     for i=1:19
  60.           msr(i)=abs(scope(i)-tt);  %各斜率与平均值的均方根,mean square root;
  61.     end
  62.     tt=0;
  63.     for i=2:18
  64.           if (msr(i-1)>tshold & msr(i+1)>tshold)|(msr(i-1)<0.001 & msr(i+1)<0.001)
  65.               continue
  66.           else
  67.               tt=tt+1;
  68.               prr(tt)=rr(i,k);%符合条件的;
  69.               pcr(tt)=cr(i,k);
  70.           end
  71.     end
  72.      p(k,1:2)=polyfit(prr,pcr,1);%线性拟合,p为两个数,p1为斜率,p2为截距;
  73.   end
复制代码

评分

1

查看全部评分

发表于 2012-9-6 11:01 | 显示全部楼层
哈工犟牛,3Q了哦
发表于 2012-9-7 21:56 | 显示全部楼层
回复 6 # 犟牛 的帖子

你好!
多谢你发的程序代码,有个问题想请教下,我这边的数据是b34-100.038138.mat这类信号(有一批),该怎么用这段程序对其进行计算啊?
发表于 2012-9-11 15:29 | 显示全部楼层
load b34-100.038138.mat
然后看你的数据结构
发表于 2012-9-11 17:08 | 显示全部楼层
回复 9 # 犟牛 的帖子

你好!
我用上面计盒分形维数代码试了下,出现了以下问题:
??? Error using ==> box
Too many output arguments.
是怎么回事啊?
我把程序加了几句,如下:
%根据计盒维数原理编写了求一维曲线分形维数的matlab程序

function D=FractalDim(y,cellmax)
%%%
clear;
clc;
y=load('b34-100.038138.mat');
%y=b34-100.038138.id;
%求输入一维信号的计盒分形维数

麻烦给点意见。
发表于 2012-9-11 17:13 | 显示全部楼层
回复 9 # 犟牛 的帖子

用第二段代码算关联维数,出现了下面的问题:
??? Error: File: glws.m Line: 6 Column: 1
Function definitions are not permitted at the prompt or in scripts.

麻烦你看看,给点建议!
发表于 2012-11-29 22:22 | 显示全部楼层
学习了。
发表于 2012-12-14 05:37 | 显示全部楼层
发表于 2012-12-14 05:38 | 显示全部楼层
DDevil 发表于 2012-9-11 17:13
回复 9 # 犟牛 的帖子

用第二段代码算关联维数,出现了下面的问题:

还是程序使用有问题,贴你的调用代码吧
发表于 2012-12-24 13:49 | 显示全部楼层
gghhjj 发表于 2012-12-14 05:38
还是程序使用有问题,贴你的调用代码吧

%根据计盒维数原理编写了求一维曲线分形维数的matlab程序

function D=FractalDim(y,cellmax)
%%%
clear;
clc;
%load TEST0044F1F_1_50_3667476.mat;
%y=TEST0044F1F_1_50_3667476.mat;
y=load('TEST0044F1F_1_50_3667476.mat');
%求输入一维信号的计盒分形维数
%y是一维信号
%cellmax:方格子的最大边长,可以取2的偶数次幂次(1,2,4,8...),取大于数据长度的偶数
%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),

cellmax=8;

if cellmax<length(y)
error('cellmax must be larger than input signal!')
end
L=length(y);%输入样点的个数
y_min=min(y);

%移位操作,将y_min移到坐标0点
y_shift=y-y_min;
%重采样,使总点数等于cellmax+1
x_ord=[0:L-1]./(L-1);
xx_ord=[0:cellmax]./(cellmax);
y_interp=interp1(x_ord,y_shift,xx_ord);
%按比例缩放y,使最大值为2^^c
ys_max=max(y_interp);
factory=cellmax/ys_max;
yy=abs(y_interp*factory);

t=log2(cellmax)+1;%叠代次数
for e=1:t
Ne=0;%累积覆盖信号的格子的总数
cellsize=2^(e-1);%每次的格子大小
NumSeg(e)=cellmax/cellsize;%横轴划分成的段数

for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)
begin=cellsize*(j-1)+1;%每一段的起始
tail=cellsize*j+1;
seg=[begin:tail];%段坐标
yy_max=max(yy(seg));
yy_min=min(yy(seg));
up=ceil(yy_max/cellsize);
down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲线占有的格子数
Ne=Ne+Ns;%累加每一段覆盖曲线的格子数

end

N(e)=Ne;%记录每e下的N(e)
end

%对log(N(e))和log(k/e)进行最小二乘的一次曲线拟合,斜率就是D

r=-diff(log2(N));%去掉r超过2和小于1的野点数据
id=find(r<=2&r>=1);%保留的数据点
Ne=N(id);
e=NumSeg(id);
plot(log2(e),log2(Ne),'+');
lsline;
P=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距
D=P(1);
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-18 14:32 , Processed in 0.137814 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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