我在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行。我在“事件”中搜索了很多这个问题。但没有找到解决方案。有人可以帮助我吗?