我觉得做分岔图程序的思路主要分一下的几块:
(1)确定分岔参数的取值范围,并给出变化步长
(2)做一个循环,求解微分方程
(3)可以另做一个判断大小的函数如getmax(),从微分方程的解向量中取出一个极值 ...
第三步:做一个判断大小的函数如getmax(),从微分方程的解向量中取出一个极值 ... ,
这有什么用啊,做分岔图不用这一步应该也可以的啊
很疑惑
回复sssssxxxxx921
这一步是从微分方程的解向量中取一个极值点,并在图中画出来,我是这么做的回复 #18 sssssxxxxx921 的帖子
我也没有看懂,为什么这样做?你知道这样的原因吗?
[ 本帖最后由 xinyuxf 于 2007-7-13 09:21 编辑 ]
回复无水
我把采用这种方法的一个lorenz分岔图的例子列在下面,一看就明白了!function dy = Lorenz(t,y)
global r
dy=zeros(3,1);
dy(1)=-10*(y(1)-y(2));
dy(2)=-y(1)*y(3)+r*y(1)-y(2);
dy(3)=y(1)*y(2)-8*y(3)/3;
下面是求解程序
clear all
global r
t0=;%积分时间
y0=;
%bifurcation
for r=1:0.05:30 %r的变化精度
=ode45('Lorenz',t0,y0);
=getmax(y(:,1));
plot(r,Xmax,'b','markersize',1)
hold on
clear Xmax
end
xlabel('r')
ylabel('Xmax')
下面是getmax程序
function = getmax(y)
a=length(y);
j=1;
for i=(a-1)/2:a
b=(y(i,1)-y(i-2,1))/2;
c=(y(i,1)+y(i-2,1))/2-y(i-1,1);
if y(i-2,1)<=y(i-1,1)&y(i-1,1)>=y(i,1)&c==0
Xmax(j)=y(i-1,1);
j=j+1;
elseif y(i-2,1)<=y(i-1,1)&y(i-1,1)>=y(i,1)
Xmax(j)=y(i-1,1)-b^2/(4*c);
j=j+1;
end
end 原帖由 octopussheng 于 2007-7-12 08:22 发表 http://www.chinavib.com/forum/images/common/back.gif
我把采用这种方法的一个lorenz分岔图的例子列在下面,一看就明白了!
function dy = Lorenz(t,y)
global r
dy=zeros(3,1);
dy(1)=-10*(y(1)-y(2));
dy(2)=-y(1)*y(3)+r*y(1)-y(2);
dy(3)=y(1)*y(2)-8 ...
谢谢
我仔细看一下,这种做法的意思是什么?是否具有通用性? 意思我在前面已经一条一条写了,通用性还是有的,呵呵!无水可以帮助再测试一下哦! 我试了一下,得到的图还可以。就是没有去算其它的系统了。有时间试试! 哦?可以的吧,我现在就在算一个,有结果了马上贴出来!
回复 #19 octopussheng 的帖子
取一个极值点?:@(这有什么原因吗 你为什么取极值点 总有一定的原因吧
或者说引用的出处 能说一下吗 具体出处我也说不上来了,不过可以参考一下闻邦椿的《非线性振动理论中的解析方法及工程应用》 这个大概的意思是:周期运动的话,会出现相同的最大值,其实道理上与 闪频差不多,这是这种方法在系统的解出现跳跃的时候,是不准确的。个人的想法
回复 #15 无水1324 的帖子
请教前辈:我的参数调整后还是老样子,就是一直在算,出来数据,最后死机.到是没有出现错误提示.感觉是不收敛还是怎么的.这是什么原因?其实关于这个问题的混沌判据:如相图\时程图\LYAPUNOV指数等我都已经作出.这是个参数激励问题.只是想仔细了解参数对系统行为的影响过程.请指教.甚谢!!:@)
[ 本帖最后由 无水1324 于 2007-7-12 10:35 编辑 ]
回复 #30 mechanic05 的帖子
你的还是那个问题,计算的速度比较慢,但是还是可以出来结果,matlab出现死机,应该是“未响应”吧 原帖由 mechanic05 于 2007-7-12 10:19 发表 http://www.chinavib.com/forum/images/common/back.gif请教前辈:
我的参数调整后还是老样子,就是一直在算,出来数据,最后死机.到是没有出现错误提示.感觉是不收敛还是怎么的.这是什么原因?其实关于这个问题的混沌判据:如相图\时程图\LYAPUNOV指数 ...
了解参数变化时的影响可以
1、画出参数变化时的LE指数图
2、画出分岔图。
你这里就是计算的速度比较慢了一点。