mechanic05 发表于 2009-3-22 01:45

最大值法和Poincare法画的分岔图为何不对呢

最大值法,程序是根据OCT前辈给的程序改造来的。
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
%%%%%%%%%%%%%%%%%下面是方程
function dx=hrfunyasuo(t,x,flag,a,b,c,d,r,s,xo,k,xxmax,xmin)
G=k*(xxmax-x(1))*heaviside(x(1)-xxmax)-k*(x(1)-xmin)*heaviside(xmin-x(1));
dx=[x(2)-a*x(1)^3+b*x(1)^2-x(3)+3+G;
c-d*x(1)^2-x(2);
r*(s*(x(1)-xo)-x(3))];
%%%%%%%%下面是最大值法分岔程序
function hr_fc_getmax
% 最大值法求解分岔图
clear all
t0=;%积分时间
%bifurcation
tic,
a=1;b=3;c=1;d=5;r=0.006;s=4;xo=-1.6;k=3;xxmax=1.2;
for xmin=linspace(-1.3,-0.4,30);%xmin的变化精度
    =ode45('hrfunyasuo',t0,,[],a,b,c,d,r,s,xo,k,xxmax,xmin);
    =getmax(y(:,1));
    plot(xmin,xmax,'b','markersize',1)
    hold on
    clear xmax
end
toc

mechanic05 发表于 2009-3-22 01:48

最大值法和Poincare法画的分岔图为何不对呢

Poincare法程序:
function hr_fc_poincaremethod
Z=[];
a=1;b=3;c=1;d=5;r=0.006;s=4;xo=-1.6;k=3;xxmax=1.2;
for xmin=linspace(-1.2,-0.5,20);
    % 舍弃前面迭带的结果,用后面的结果画图
    =ode45('hrfunyasuo',,,[],a,b,c,d,r,s,xo,k,xxmax,xmin);
    length(Y)
    =ode45('hrfunyasuo',,Y(length(Y),:),[],a,b,c,d,r,s,xo,k,xxmax,xmin);
    Y(:,1)=Y(:,2)-Y(:,1);
    % 对计算结果进行判断,如果点满足x=y,则取点
    for k=2:length(Y)
      f=k-1;
      if Y(k,1)<0   
            if Y(f,1)>0
                y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));
                Z=;
            end
      else   
            if Y(f,1)<0
                y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));   
                Z=;   
            end
      end
    end
end
plot(Z,'.','markersize',1)
title('hr映射分岔图')
xlabel('xmin'),ylabel('|y| where x=y')
两个程序都能通,但是结果很奇怪!望高人指点、指正。谢谢!

胡晓宇 发表于 2009-3-25 09:53

回复 沙发 mechanic05 的帖子

能否把你两个图贴出来,可以看到在哪些地方不同。

sorrow 发表于 2018-4-13 20:06

请问楼主这个问题后来解决了吗?我现在也遇到了和你一样的问题。
页: [1]
查看完整版本: 最大值法和Poincare法画的分岔图为何不对呢