近期关于分岔图计算的疑问贴比较多,这里以duffing系统为例,把非自治系统分岔图绘制的问题贴出来,有问题的都可以参考该例!
duffing系统:
function dx=duffing(t,X)
global F wd;
r=0.25;
x=X(1);
y=X(2);
psi=X(3);
dx=zeros(3,1);
dx(1)=y;
dx(2)=-r*y-x^3+F*cos(psi);
dx(3)=wd;
分岔图绘制程序:
function duffing_bifur_F
clear;
global F wd;
wd=1.0;
range=[0.1:0.001:0.35];
period=2*pi/wd;
k=0;
YY1=[];
step=2*pi/100; %步长。
for F=range
y0=[0 0.001 0];
F
k=k+1;
% discard the first 60 periodic data;
%除去前面60个周期的数据,并将最后的结果作为下一次积分的初值
tspan=[0:step:60*period];
[t,Y]=ode45(@duffing,tspan,y0);
y0=Y(end,:);
j=1;
for i=60:200
tspan=[i*period:step:(i+1)*period];
[t,Y]=ode45(@duffing,tspan,y0);
YY1(k,j)=Y(end,1); % get the omega data from every period end
j=j+1; %取出每一个周期内的第一个解的最后一个值。
y0=Y(end,:);
end
end
bifdata=YY1(:,end-51:end);
plot(range,bifdata,'k.','markersize',1);
下面的图是其中计算得到的一个结果!
|