原文地址:[分享] dfa(detrended fl ct ation analysis) matlab 程序作者:沙海陶the method of detrended fl ct ation analysis has proven sef l in revealing the extent of long-range correlations in time series. dfa 是检测时间序列长程相关的范围的有效方法. 网上有很多源代码.但matlab的代码不多.我从mathworks下载了一个,并改造了一番,分享来用. 附件中三个文件,一个是dfa.m,是用来计算对应给定时间间隔n的f(n)值;另一个是r ndfa.m,用来执行计算的,其中调用了前面的dfa函数,这个要根据你的需要自己稍作修改,其中我在这里将时间取值设置为log坐标下等距,让画出来的图形更好看;另一个是data.mat,是演示数据. 进入包含着三个文件的目录,在matlab命令窗口,直接输入r ndfa,就可以得到结果.  r ndfa.m  f nction f_n=dfa(data,win_length,order) n=length(data); n=floor(nwin_length); n1=n*win_length; y=zeros(n1,1); yn=zeros(n1,1); fitcoef=zeros(n,order+1); mean1=mean(data(1:n1)); for i=1:n1 y(i)=s m(data(1:i)-mean1); end y=y ; for j=1:n fitcoef(j,:)=polyfit(1:win_length,yj-1)*win_length+1):j*win_length),order); end for j=1:n ynj-1)*win_length+1):j*win_length)=polyval(fitcoef(j,:),1:win_length); end s m1=s m((y -yn).^2)n1; s m1=sqrt(s m1); f_n=s m1; - r ndfa.m  %导入演示数据 load data %设置时间 t=1:0.05:3; n=zeros(1,length(t)); for i=1:length(t) n(i)=10^t(i); end n=floor(n); n=n ; %初始化 len=length(n); f_n=zeros(len,1); %对每个n值求f_n for i=1:len f_n(i)=dfa(data,n(i),1); end %线性拟合 p=polyfit(log10(n),log10(f_n),1); %画图 plot(n,f_n(:,1), o ); %画拟合直线 x=n; y=p(2)+p(1)*log10(x); for i=1:len y(i)=10^y(i); end hold on plot(x,y, black ); %设置坐标 axis([8 1200 0.003 0.5]) set(gca, xscale , log ); set(gca, yscale , log );