我这有一个计算时间序列数据点单一分形盒维数的Matlab程序,分享一下。
T=0.5*mean(x);
p=11;%p即最终需要画的点的数目或划分盒子的次数
for j=1:(p-1)
n(j+1)=round(10^(j*((log10(length(x)))/(p-1))));
end
n(1)=1;%n为每次划分的份数
L=n.\length(x);%每次的盒子长度
L=sort(L);%L为升序排列
n=fliplr(n);%n为降序排列
%以下部分求N值
for i=1:p
N(i)=0;
for j=1:n(i)
m(j+1)=round(j*L(i));
end
m(1)=1;
%m表示在每次划分盒子下,每个划分点在时间轴上的坐标值(即横轴值)
for k=1:n(i)
t=x(m(k):m(k+1));%对每个时间序列间隔构造一个新的时间序列
if length(find(t>T))~=0
N(i)=N(i)+1;
else N(i)=N(i)
end
end
N(i);
end
a=log10(L);b=log10(N);
plot(a,b,'*')
a
b