- function [prr,pcr,p]=glws(x,m,t)
- %函数名为关联维数的首字母,用于单串序列,多串到glsw;
- %x为要分析的数据;
- %x=xlsread('d:\matworks\dbin.xls');
- [m1,n1]=size(x);
- n=m1;
- [mm1,mm]=size(m);
- p=zeros(mm,2); %存放拟合系数的矩阵;
- rr=zeros(20,mm);%rr是相当于筛子的那个距离,存放的是对数;
- cr=zeros(20,mm);%cr是小于筛子距离的距离个数,存放的是对数;
- %prr=zeros(20,mm);%rr是相当于筛子的那个距离,存放的是对数;
- %pcr=zeros(20,mm);%cr是小于筛子距离的距离个数,存放的是对数;
- scope=zeros(19,1);
- msr=zeros(19,1);
- for k=1:mm
- tt=0;
- nm=n-(m(k)-1)*t;%Nm为列数;
- nr=(nm-1)*nm/2;%Nr为距离的总个数;
- juli=zeros(nr,1);%全部距离搞成一列的长矩阵;
- r=zeros(nm,nm);%各列之间距离矩阵;
- y=zeros(m(k),nm);%重构相矩阵的值yij;
- for j=1:nm
- for i=1:m(k)
- y(i,j)=x(j+(i-1)*t);
- end
- end
- for i=1:nm-1
- for j=i+1:nm
- for kk=1:m(k)
- r(i,j)=r(i,j)+(y(kk,j)-y(kk,i))^2;
- end
- r(i,j)=sqrt(r(i,j));
- tt=tt+1;
- juli(tt)=r(i,j);
- end
- end
- %进行r和cr个数的计算;
- rmin=min(juli);
- rmax=max(juli);
- for i=1:20 %每次把距离间隔分20分来慢慢加;
- rr(i,k)=(rmax-rmin)*(i+1)/21; %距离取法值得研究一下;
- for j=1:nr
- if juli(j)<=rr(i,k)
- cr(i,k)=cr(i,k)+1;
- end
- end
- rr(i,k)=log(rr(i,k));
- cr(i,k)=log(cr(i,k)/nr);
- end
- %rr=rr';
- tt=0;
- for i=1:19
- scope(i)=(cr(i+1,k)-cr(i,k))/(rr(i+1,k)-rr(i,k));%每点的斜率;
- tt=tt+scope(i);
- plot(i,scope(i),'-bd'),hold on;
- end
- tt=tt/19;%各相邻点间斜率平均值;
- tshold=(max(scope)-min(scope))/2;%threshold,阈值;
- for i=1:19
- msr(i)=abs(scope(i)-tt); %各斜率与平均值的均方根,mean square root;
- end
- tt=0;
- for i=2:18
- if (msr(i-1)>tshold & msr(i+1)>tshold)|(msr(i-1)<0.001 & msr(i+1)<0.001)
- continue
- else
- tt=tt+1;
- prr(tt)=rr(i,k);%符合条件的;
- pcr(tt)=cr(i,k);
- end
- end
- p(k,1:2)=polyfit(prr,pcr,1);%线性拟合,p为两个数,p1为斜率,p2为截距;
- end
复制代码 |