一个简化的混沌同步模型的Matlab程序
混沌同步模型驱动系统和响应系统都是Lorenz System,只不过初值不同。
驱动系统: dx/dt=a*(y-x)
dy/dt=r*x-y-xz
dz/dt=x*y-b*z
初值(0.1,0.1,0.1)
输出信号 令S(t)=x(t)
响应系统:将S(t)代替x(t)作为激励信号
dx/dt=a*(y-x)
dy/dt=r*x-y-xz
dz/dt=x*y-b*z
初值(0.1,0.1,1)
最后求响应系统的输出x(t),y(t),z(t)
程序:
function = Lorenz_response(tspan);%%计算处于响应地位的Lorenz系统的数值解,并由此画出其相图
yinit = ;% 初始化输入
y(1:3) = yinit;
tstart = 0; % 时间初始值
tstep = 1e-1; % 时间步长
wholetimes = 1e2; % 总的循环次数
steps = 1; % 每次演化的步数
iteratetimes = wholetimes/steps; % 演化的次数
S=output;
for i=1:iteratetimes;
tspan = tstart:tstep:(tstart + tstep*steps);
= ode45(@Lorenz_driven, tspan, y);
y = Y1(size(Y1,1),:);
y(1)=S(i,1);
% 重新定义起始时刻
tstart = tstart + tstep*steps;
end
figure(1)
plot3(Y1(:,1),Y1(:,2),Y1(:,3))
function s=output;
tstart = 0; % 时间初始值
tstep = 1e-1; % 时间步长
wholetimes = 1e2; % 总的循环次数
% options = odeset('RelTol',1e-4,'AbsTol',);
tspan=tstart:tstep:wholetimes*tstep
= ode45(@Lorenz_driven,tspan,);
s=Y
figure(3)
plot3(Y(:,1),Y(:,2),Y(:,3))
function dY=Lorenz_driven(t,Y);
a=10;
b=8/3;
r=60;
dY=zeros(3,1);
dY=
画出的两个图,见附件。
问题:1、驱动系统和响应系统取得积分步长是一样的,画出的图差别却很大。
2、在程序中用S(:,1)取代了Y1(:,1),但是显示的Y(:,1)和Y1(:,1)却不相同。
请各位高手指教。:@)
[ 本帖最后由 luran312 于 2008-5-5 16:21 编辑 ] 第一是ode45的用法问题,当ode45只积分一步时它将在积分上下限之间自动取n个结点。
主要问题在于
(1)程序中 时间结点错开了一个位子;
(2)没有注意保存中间结果,程序画出的只是之后一个小时间段结果。
function = Lorenz_response(tspan);%%计算处于响应地位的Lorenz系统的数值解,并由此画出其相图
yinit = ;% 初始化输入
y(1:3) = yinit;
tstart = 0; % 时间初始值
tstep = 1e-1; % 时间步长
wholetimes = 1e2; % 总的循环次数
steps = 1; % 每次演化的步数
iteratetimes = wholetimes/steps; % 演化的次数
S=output;
results=zeros(iteratetimes,3);
error=zeros(iteratetimes,3);
for i=1:iteratetimes;
tspan = tstart:0.5*tstep:(tstart + tstep*steps);
= ode45(@Lorenz_driven, tspan, y);
error(i,2:4)=Y1(3,:)-S(i+1,2:4);
error(i,1)=T(3)-S(i+1,1);
y = Y1(3,:);
y(1)=S(i+1,2);
tstart = tstart + tstep*steps; % 重新定义起始时刻
results(i,:)=Y1(3,:)
end
figure(1)
plot3(results(:,1),results(:,2),results(:,3))
error
function s=output;
tstart = 0; % 时间初始值
tstep = 1e-1; % 时间步长
wholetimes = 1e2; % 总的循环次数
% options = odeset('RelTol',1e-4,'AbsTol',);
tspan=tstart:tstep:wholetimes*tstep
= ode45(@Lorenz_driven,tspan,);
s=;
figure(3)
plot3(Y(:,1),Y(:,2),Y(:,3))
function dY=Lorenz_driven(t,Y);
a=10;
b=8/3;
r=60;
dY=zeros(3,1);
dY=
[ 本帖最后由 eight 于 2008-5-7 10:31 编辑 ] 感激不尽!高手啊,学习了:@) 我也要做混沌控制,但现在还处于基本的混沌识别阶段,向楼主学习。 原帖由 ganux 于 2008-5-6 22:58 发表 http://www.chinavib.com/forum/images/common/back.gif
第一是ode45的用法问题,当ode45只积分一步时它将在积分上下限之间自动取n个结点。
主要问题在于
(1)程序中 时间结点错开了一个位子;
(2)没有注意保存中间结果,程序画出的只是之后一个小时间段结果。
fu ...
高手,学习了! :@) :@) 谢谢楼主的列子 hao :victory: 好晚了,看不会,太辛苦了,呵呵。。。。 不错,学习了。。。我也起步阶段:@) 谢谢各位, 我也做这方面的啊 ,有什么好的学习思路吗,感觉太难了啊 实施上述事实 厉害~~~~~~~~ 我也做这方面的啊 ,有什么好的学习思路吗,感觉太难了啊
我也要做混沌同步,但现在还处于基本的混沌识别阶段,向您学习。
页:
[1]
2