`ode45` matlab 错误

Error in `ode45` matlab

ode的主要功能如下

function dxdt = state( t,x,vgth,vgval1,vgval2)
vgval=vgval1+vgval2;
p=1;
k=10^0.7;
window1=1-((2*x)-1).^(2*p); 
dxdt=k*(vgval-vgth+1.2)*window1;  
end

脚本如下。

step=0.01;
t = 0:step:10;
f=4*0.157;
vgate1= @(t) abs(5*sin(2*f*t)).*heaviside(5-t);
vgate2=@(t) -abs(5*sin(2*f*t)).*heaviside(t-5);

函数调用部分如下

x0=0.01;
vgth=1.9;
[t,x] = ode45(@(t,x) state1 (t,x,vgth,vgate1(t),vgate2(t)), t, x0);
plot(t,x)

问题 当我将负号与 vgate2 一起使用时,它会给我错误。 如果我删除 vgate2.

的负号,它工作正常

想要的结果 我希望我的绘图在 vgate2 中带有负号。实际上我想使用两个正弦脉冲和两个负号 pulses.That,这就是我使用负值 vgate2 的原因。

p 阶 ODE 积分器期望微分方程 p+2 次可连续微分,具有适当大小的导数。

任何与此的偏差都被步长适应策略视为 "stiffness",并通过越来越猛烈地减少步长来做出反应。低阶导数中的任何扭结或跳跃都被视为类似于高阶导数中的剧烈振荡,将步长适配器抛出一个循环。

但是,如果积分在发生事件时直接停止,然后使用那里的值作为初始值重新启动,则积分器不会 "see" 该事件,因此无需对其做出反应。