octave ode45' events'错误

时间:2015-01-31 09:04:30

标签: matlab octave

我在Octave中运行使用odepkg 0.8.4的代码。第一个.m文件名为' poin2.m'用于获取庞加莱地块。此文件中的ode45命令调用' spp.m'功能

clc;clear;
OMEG=1.02;
trans=2000;
N=2000;
xfin=zeros(N+1,2);
options=odeset('RelTol',1e-9,'AbsTol',1e-9,'events','on');
 xin=0.2;
 xdin=-0.2;
for i=1:trans
    if rem(i,50)==0 
       disp(i);
   end
    [t,x,te,xe,ie]=ode45('spp',[0 2*pi/OMEG],[xin xdin],options);
    xin=x(end,1);
    xdin=x(end,2);
end
 xfin(1,1)=xin;
 xfin(1,2)=xdin;
disp('Steady state starts');
for i=1:N
   if rem(i,50)==0 
       disp(i);
   end
[t,x,te,xe,ie]=ode45('spp',[0 2*pi/OMEG],[xin xdin],options);

xin=x(end,1);
xdin=x(end,2);
xfin(i+1,1)=x(end,1);
xfin(i+1,2)=x(end,2);
end

功能' spp.m'包含要与所需事件相结合的分段线性ODE'功能

function [xdot,isterminal,dircn]=spp(t,x,flag)
omega=1.02;
alpha=-0.01;q0=0.01;zhi=0.07;epsilon1=0.7;epsilon2=0.005;%epsilon2=0;temp=1;
if nargin<3 || isempty(flag)
if x(1)>1
    fh=x(1)-(1-alpha);
elseif x(1)<-1
    fh=x(1)+(1-alpha);
else
  fh=alpha*x(1);
end
xdot=[x(2);-2*zhi*x(2)-(1+2*epsilon2*cos(omega*t))*fh+q0+(omega^2)*epsilon1*cos(omega*t);]; 
else
        switch flag
        case 'events'
        xdot=x(1)^2-1;
        isterminal=0;
        dircn=0;
        otherwise
        error('function not programmed');
        end;
end;

代码在MATLAB中运行良好,但在Octave中出现以下错误:

error: Unknown parameter name "events"
error: called from:
error:   C:\Software\Octave-3.6.4\share\octave\packages\odepkg-0.8.4\odepkg_stru
cture_check.m at line 308, column 11
error:   C:\Software\Octave-3.6.4\share\octave\packages\odepkg-0.8.4\odeset.m at
 line 104, column 10
error:   C:\Software\Octave-3.6.4\share\octave\packages\odepkg-0.8.4\poin2.m at
line 12, column 8

第12行&#39; poin2.m&#39;实际上是发布的第一个代码中的第6行。我在“事件”中搜索了很多这个问题。但没有找到解决方案。有人可以帮助我吗?

0 个答案:

没有答案