c-cmethod 相空间重构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

School

% 此程序用来测试CC_method

% 2008-12-01

% zhangli

clear all

clear all

%利用方程获得

% 产生Lorenz 时间序列

% dx/dt = sigma*(y-x)

% dy/dt = r*x - y - x*z

% dz/dt = -b*z + x*y

sigma=16; % Lorenz 方程参数

b=4;

r=45.92;

y=[-1,0,1]; % 起始点(1 x 3 的行向量)

h=0.01; % 积分时间步长

k1=10000; % 前面的迭代点数

k2=3000; % 后面的迭代点数

Z=LorenzData(y,h,k1+k2,sigma,r,b);

X=Z(k1+1:end,1);

max_d=200; % 最大延迟时间

% 调用C_CMethod_inf,求tau

tic

[Smean_inf,Sdeltmean_inf,Scor_inf,tau_inf,tw_inf]=C_CMethod_inf(X,max_d); toc tau_inf

tw_inf

% 相关作图

figure('name','CC法求时间延迟');

plot(1:max_d,Smean_inf,'-b');hold on;

plot(1:max_d,Sdeltmean_inf,'-*c');hold on;

plot(1:max_d,Scor_inf,'-m');hold on;

plot(1:max_d,zeros(1,max_d),'r');

title('C_CMethod_inf');xlabel('Lag');

legend('S(t)平均值','ΔS(t)平均值','Scor_inf');

% 将数据保持下来

fid=fopen('Smean_inf.txt','w');

fprintf(fid,'%f\n',Smean_inf);

fclose(fid);

fid=fopen('Sdeltmean_inf.txt','w');

fprintf(fid,'%f\n',Sdeltmean_inf);

fclose(fid);

fid=fopen('Scor_inf.txt','w');

fprintf(fid,'%f\n',Scor_inf);

fclose(fid);

2.子函数1

function [Smean,Sdeltmean,Scor,tau,tw]=C_CMethod_inf(X,max_d)

% 用于求延迟时间tau

% X为输入时间序列

% max_d为最大时间延迟

% Smean,Sdeltmean,Scor为返回值

% tau为计算得到的延迟时间

% tw为时间窗口

% zhangli

% 2008-11-30

N=length(X);

Smean=zeros(1,max_d);

Scmean=zeros(1,max_d);

Scor=zeros(1,max_d);

delt=std(X);

% 计算Smean,Sdeltmean,Scor

for t=1:max_d

S=zeros(4,4);

Sdelt=zeros(1,4);

for m=2:5

for j=1:4

r=delt*j/2;

Xdt=disjoint(X,N,t); % 将时间序列X分解成t个不相交的时间序列

Xdt=Xdt';

s=0;

for tau=1:t

N_t=floor(N/t); % 分成的子序列长度

Y=Xdt(:,tau); % 每个子序列Cs1(tau)=correlation_integral_inf(Y,N_t,r);% 计算C(1,N/t,r,t) Z=reconstitution(Y,N_t,m,1); % 相空间重构

Z=Z';

M=N_t-(m-1);

Cs(tau)=correlation_integral_inf(Z,M,r); % 计算C(m,N/t,r,t)

s=s+(Cs(tau)-Cs1(tau)^m); % 对t个不相关的时间序列求和

end

S(m-1,j)=s/tau;

end

Sdelt(m-1)=max(S(m-1,:))-min(S(m-1,:)); % 差量计算

end

Smean(t)=mean(mean(S)); % 计算平均值

Sdeltmean(t)=mean(Sdelt); % 计算平均值

Scor(t)=abs(Smean(t))+Sdeltmean(t);

end

% 寻找时间延迟tau:即Sdeltmean第一个极小值点对应的t

for i=2:length(Sdeltmean)-1

if Sdeltmean(i)

break;

end

end

% 寻找时间窗口tw:即Scor最小值对应的t

for i=1:length(Scor)

if Scor(i)==min(Scor)

tw=i;

break;

end

end

3.子函数2

function data_d=disjoint(data,N,t)

% 此函数用于将时间序列分解成t个不相交的时间序列% data:输入时间序列

% N:data的长度

% t:the index lag

% data_d:返回分解后的t个不相交的时间序列

% 2008-11-28

% zhangli

for i=1:t

for j=1:(N/t)

data_d(i,j)=data(i+(j-1)*t);

end

end

4.子函数3

function Data=reconstitution(data,N,m,tau)

% 该函数用来重构相空间

% data为输入时间序列

% N为时间序列长度

% m为嵌入空间维数

% tau为时间延迟

% Y为输出,是M*m维矩阵

% 2008-11-26

% zhangli

M=N-(m-1)*tau;

Data=zeros(m,M);

for i=1:m

Data(i,:)=data([((i-1)*tau+1):1:((i-1)*tau+M)]);

end

5.子函数4

function C=correlation_integral_inf(Y,M,r)

% 此函数用于计算关联积分,取无穷范数

相关文档
最新文档