|
楼主 |
发表于 2010-11-28 16:44
|
显示全部楼层
3. 关于小数据量法
a. delta_t的意义
delta_t是采样时间,在帖子中看到有取值为1也有其他值,书上也没有太明确的说明。可否将其理解为是计算微分方程时的时间步长step呢,另外书中提到“只要delta_t小到能确定一个吸引子的轨道上的最小点的数目,大约在n到10n之间”就能得到满意结果,是否可以认为delta_t越小越好。
b. 小数据量法程序
在帖子中主要找到两个程序,分别是lambda_1=largest_lyapunov_exponent(data,N,m,tau,P)以及lambda_1=largest_lyapunov_p3(data,N,m,tau,P,delt_t),其中应用前者计算一组从帖子中得到的数据耗时大约为2秒;而后者在10分钟后依然提示“busy”。将二者贴出,希望指出是哪个环节导致如此:
-
- function lambda_1=largest_lyapunov_exponent(data,N,m,tau,P)
- %the function is used to calcultate largest lyapunov exponent with the
- %mended algorithm,which put forward by lv jing hu.
- %data:the time series
- %N:the length of data
- %m:enbedding dimention
- %tau:time delay
- %P:the mean period of the time series,calculated with FFT
- %lambda_1:return the largest lyapunov exponent
- %skyhawk
- load data.txt;
-
- N=length(data);
- P=38;
- m=5;
- tau=3;
- delt_t=1;
- Y=reconstitution(data,N,m,tau );%reconstitute state space
- M=N-(m-1)*tau;%M is the number of embedded points in m-dimensional space
- for j=1:M
- d_max=1e+100;
- for jj=1:M %寻找相空间中每个点的最近距离点,并记下
- d_s=0; %该点下标
- if abs(j-jj)>P %限制短暂分离
- for i=1:m
- d_s=d_s+(Y(i,j)-Y(i,jj))*(Y(i,j)-Y(i,jj));
- d_min=d_max;
- if d_s<d_min
- d_min=d_s;
- idx_j=jj;
- end
- end
- end
- end
- % index(j)=idx_j;
- max_i=min((M-j),(M-idx_j));%计算点j的最大演化时间步长i
- for k=1:max_i %计算点j与其最近邻点在i个离散步后的距离
- d_j_i=0;
- for kk=1:m
- d_j_i=d_j_i+(Y(kk,j+k)-Y(kk,idx_j+k))*(Y(kk,j+k)-Y(kk,idx_j+k));
- d(k,j)=d_j_i;
- end
- end
- end
-
- %对每个演化时间步长i,求所有的j的lnd(i,j)平均
- [l_i,l_j]=size(d);
- for i=1:l_i
- q=0;
- y_s=0;
- for j=1:l_j
- if d(i,j)~=0
- q=q+1;
- y_s=y_s+log(d(i,j));
- end
- end
- y(i)=y_s/(q*delt_t);
- end
- x=1:length(y);
- y
- pp=polyfit(x,y,1);
- lambda_1=pp(1);
- yp=polyval(pp,x);
- plot(x,y,'-o',x,yp,'--')
- function X=reconstitution(data,N,m,tau)
- %该函数用来重构相空间
- % m为嵌入空间维数
- % tau为时间延迟
- % data为输入时间序列
- % N为时间序列长度
- % X为输出,是m*n维矩阵
- M=N-(m-1)*tau;%相空间中点的个数
- for j=1:M %相空间重构
- for i=1:m
- X(i,j)=data((i-1)*tau+j);
- end
- end
复制代码 |
|