`ode45` matlab出错

时间:2015-11-05 07:57:56

标签: matlab ode matlab-deployment differential-equations

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中带有负号。实际上我想使用两个正的正弦脉冲和两个负号脉冲。这就是我使用vgate2的负值的原因。

1 个答案:

答案 0 :(得分:2)

订单p的ODE积分器期望微分方程为p+2次,可以通过适当大小的导数连续微分。

任何偏离都被视为"刚度"通过步长适应策略,并通过逐步减少步长来应对。低阶导数中的任何扭结或跳跃都被视为类似于高阶导数中的狂野振荡,抛出步长适配器进行循环。

但是,如果直接在某个事件中停止集成,然后使用这些值作为初始值重新启动,则集成商不会看到"事件,因此无需对此作出反应。