混沌时间序列怎么生成
最近在做C-C算法,参考文献是H.S. Kim的Nolinear dynamics,delay times, and embedding windows里面讲到Lorenz方程来生成时间序列,方程为: dx/dt=-a(x-y); dy/dt=-xz+cx-y; dz/dt=xy-bz;
其中参数a=16,b=4.0,c=45.92,采样周期为0.01,取x变量的一维时间序列。我采用的是ODE45,里面的
odeset设为1e-3,舍去前面部分值,再每隔10个取一个点,但好像得到的数据用来做C-C中的data不行哟。下面是程序,产生100个点。麻烦高手指教一下,怎么实现可以得到文章所要的数据。请不要说用龙格库塔法(个人觉得ODE45本来就是用这方法来实现的)。
function dxdt=Lorenz(t,x)
a=16;b=4;c=45.92;
%**********************************************
dxdt=zeros(3,1);
dxdt(1)=a*(x(2)-x(1));
dxdt(2)=c*x(1)-x(1)*x(3)-x(2);
dxdt(3)=-b*x(3)+x(1)*x(2);
% function data_sample
options = odeset('RelTol',1e-3,'AbsTol',);
t0=;
x0=;
=ode45('Lorenz',t0,x0,options);
%*****************************************************
n=length(t);
n1=round(1*n/10);
%*****************************************************
figure(1);
plot(t(n1:n),x(n1:n,1));
figure(2);
data=x(n1:100:n,1);
plot(t(n1:100:n),data);
data_sample=data(1:100);
回复 楼主 liuminghua2000 的帖子
其它参数不变,用如下程序得到3000个数据t0=0;
tf=1000;
=ode45(@Lorenz,,[-1,0,1]);
Lorenz_data=x(53001:56000,1); 谢谢,解决了。
再次感谢yuling和振动论坛
页:
[1]