王瑛 发表于 2013-6-28 18:46

rossler分岔图讨论

控制参数c在区间之间,程序可以很好的运行。但是超过8,例如当区间取到,程序就会出错。错误如下:
Error using vertcat
CAT arguments dimensions are not consistent.


Error in rossler_bif (line 29)
rosler=;



程序如下:
%%rossler方程%
function u =rosser(t,x)
globalc
a=0.2; b=0.2;
u =[-x(2)-x(3), x(1)+a*x(2), b+x(3)*(x(1)-c)]';


%%求分岔图的程序%
clear all
global c
rosler=[];
M=;
counter=1;                                                      
for counter=1:length(M)
       c=M(counter);
    i=2;
xmax=0;
xmaxold=0;
frmdata=[];
error=0;
tspan=;
var=1;
y0=;
=ode45(@rosser,tspan,y0);
while i < size(x,1)
      if x(i-1,var) < x(i,var) & x(i+1,var) <= x(i,var)
            xmax=x(i,var);
            if xmaxold ~= 0
                frmdata=;                  
            end
                xmaxold=xmax;
      end
      i=i+1;
end
r= length(frmdata)-20:length(frmdata);
fradata1(1,r)=frmdata(r,1);
rosler=;
end
plot(M,rosler,'b.','markersize',1);
      xlabel(sprintf('c'));
ylabel(sprintf('x'))






麻烦大家帮我看一下,谢谢大家!

ChaChing 发表于 2013-7-1 15:18

个人水平/时间有限, 要看清LZ的程序真有些吃力, 仅试试断点看看
为省时间修改M=;

1.程式报错中断后, 建议看下workspace! 不难发现rosler为15*50;而fradata1为1*51; 当然会报错dimensions are not consistent
2.问题可能出在那个while loop, 初看好像在找极大值! 可以参考这些帖
一种有效的包络线算法 http://forum.vibunion.com/thread-32967-1-1.html
   求画出振荡的包络线图 http://forum.vibunion.com/thread-28736-1-1.html
   http://www.mathworks.com/matlabcentral/fileexchange/24902-envelope
求非线性曲线波峰和波谷的坐标 http://forum.vibunion.com/thread-95495-1-1.html
Detect zero level crossing of signals http://www.mathworks.com/matlabcentral/fileexchange/2432
找函数极大值点的再讨论 http://forum.vibunion.com/thread-86242-1-1.html

3.归总, LZ可确认每一counter所算出的x有一样的个数吗? 不然就会报这个错

王瑛 发表于 2013-7-2 15:11

ChaChing 发表于 2013-7-1 15:18 static/image/common/back.gif
个人水平/时间有限, 要看清LZ的程序真有些吃力, 仅试试断点看看
为省时间修改M=;



谢谢你,确实是这个问题,已经解决。每次算完一组数据就进行画图,然后将rosler重新赋予空数组,这样就不会限制他的维数了。因为也是初学这个,很多问题都发现不了,也意识不到,所以有问题还需要多多请教。谢谢
页: [1]
查看完整版本: rossler分岔图讨论