谢谢!对于函数
function xdot=hundun(t,x,flag,f)
mu=0.0002;w0=1;
xdot=;
end
f在哪个范围里讨论关于f的分岔图好呢?
我试了半天也没找到好的讨论范围 回复 16 # chenshumeionly 的帖子
这个我也不熟。我前短时间试过求方程左边一阶导数项系数的分岔图。范围这么选的:从实验数据中求出一个数值,以这个数值为中心扩大范围去求。因为我觉得这样的范围是有实际意义的。但是,图的效果不行。你还可以参照文献里面的取值范围去做。 回复 17 # freedignity 的帖子
你好。我已经通过调整数据把mu调到0.01了,对f换过多组数据,运用了论坛里画分岔图的方法还是做不出漂亮的分岔图,我是学数学的,没有实验可做,只是纯理论。你有什么建议吗? 我看了你程序,没有mu,难道是w?plot(q0(j),x(800:100:4000,1),'linewidth',5)这个有问题。根据该程序上一行,x是2*7000的矩阵,在绘图时应该取x后面的数据,你取的4000我觉得是根据q0(1*4000的数组)的维数取的。也就是说你的图画出来的是x的中间的数据。
以上可能并不是关键问题。我试算过你的程序,计算量大的确是因为f的值。我把f值换过后并且把q0的值扩大到(1,100)再算,出现的是一种类似二周期的图,另算了(100, 200)的区间,变化不大。我不知道你是怎么换f值的。这个例子难道也有物理背景,不然怎么会出现这样大的系数。我觉得如果f值很大,q0值该会比较小的。
其实,你应该比我做的多,做得好。我是工科专业,不是方向的问题也不会涉及到这个,做这个现在还是在摸索,提供的也只是参考意见。还有,我觉得书还是有作用的,凭借理论的东西可以从其他方面认识问题。只注重方法的话可能会进入死角。
回复 19 # freedignity 的帖子
哈哈现在的程序是这个样的:
function dx=duf(t,X)
global F wd;
r=0.01;
x=X(1);
y=X(2);
psi=X(3);
dx=zeros(3,1);
dx(1)=y;
dx(2)=-r*y+x*(1-x^2)+F*sin(psi);
dx(3)=wd;
clear;
global F wd;
wd=1.0;
range=;
period=2*pi/wd; %
k=0;
YY2=[];
step=2*pi/100;%步长。
for F=range
y0=;
F
k=k+1;
% discard the first 60 periodic data;
%除去前面60个周期的数据,并将最后的结果作为下一次积分的初值
tspan=;
=ode45(@duf,tspan,y0);
y0=Y(end,:);
j=1;
for i=60:200
tspan=;
=ode45(@duf,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);
我讨论的是矩形薄板,呵呵,把板长及厚度变了,mu就大了。
谢谢你这么耐心的解答我的疑问,共同进步吧
回复 20 # chenshumeionly 的帖子
这个程序蛮好,昨天稍微看了下思路,上午看了好一会,应该没什么问题啊,系数的问题也不存在。估计就计算量有些大,这也没出好的结果么? 回复 21 # freedignity 的帖子
嗯 没出好结果,可能我选的讨论范围不好吧,这个程序是在liliangbiao的空间找到的。还有另一个程序,请看http://forum.vibunion.com/thread-106323-1-1.html
我把数据调了调,r=0.1了,呵呵 出来的分岔图还行,但是链接里的第一个程序与第二个程序的效果不太一样,我取的f是0.01-10之间,你可以比较一下 建议用fortran做数值计算,matlab耗时间太难以忍受了。
页:
1
[2]