11ella 发表于 2011-4-19 09:24

盒子维数的问题,请大家指导一下。

最近从网上下了个盒子维数的程序,可以运行,具体意义还不是很明白,先把程序运行了一下,得到的结果令人很郁闷。function D=FractalDim(y,cellmax)
%求输入一维信号的计盒分形维数
%y是一维信号
%cellmax:方格子的最大边长,可以取2的偶数次幂次(1,2,4,8),取大于数据长度的偶数
%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e))
load hao.txt
y=hao;
cellmax=16384;
if cellmax<length(y)
error('cellmax must be larger than input signal')
end
L=length(y);%输入样本点个数
x2=;
y_min=min(y);


%移位操作,将y_min移到坐标0点
y_shift=y-y_min;
%重采样,使总点数等于cellmax+1
x_ord=./(L-1);
xx_ord=./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=;%段坐标
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);
p=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距
D=p(1);
plot(x2,D);我把需要求的数据文件付给了y,cellmax=16384;是自己随便定义的,要求是2的偶数次幂,并且大于y的值。其他的没有做改动。这是为什么啊?



11ella 发表于 2011-4-19 09:25

本帖最后由 11ella 于 2011-4-19 09:26 编辑



这个图片就是程序的运行结果,就是一条五颜六色直线,结果令人很郁闷。

jihai1984 发表于 2011-4-19 10:41

好资料 先学习一下

cqupenghao 发表于 2011-4-20 00:02

回复 2 # 11ella 的帖子

我发给你的那个程序好用吗?

11ella 发表于 2011-4-20 09:29

回复 4 # cqupenghao 的帖子

{:{51}:}
页: [1]
查看完整版本: 盒子维数的问题,请大家指导一下。