Matlab ode15s:postive dx / dt,递减x(t)

时间:2016-06-07 13:41:38

标签: matlab ode

在我的脚本中,我调用了ODE解算器ode15s,它解决了一个9 ODE的系统。代码的简化结构:

[t, x] = ode15s(@odefun,tini:tend,options)
...


function dx = odefun(t,x)
  r1=... %rate equation 1, dependent on x(1) and x(3) for example
  r2=... %rate equation 2
  ...
  dx(1) = r1+r2-...
  dx(2) = ...
  ...
  dx(9) = ...
end

在审查结果时,我很好奇为什么一个状态变量的轮廓在一定范围内增加。为了研究这个,我在ode函数中使用了条件调试,所以我可以检查所有的速率和所有的dx(i)/ dt方程。

令我惊讶的是,我发现递减状态变量的微分方程是正的。所以,我用F5调试函数模拟了多轮,并注意到状态变量确实一直在减少,而dx(i)/ dt总是保持正数。

有谁能解释一下这是怎么回事?

1 个答案:

答案 0 :(得分:0)

不建议将积分暂停在中间,并检查状态和衍生物。 ode15s并不像简单的ODE解算器那样简单地完成解决方案。它使用半随机状态对ODE函数进行一系列调用,以便计算高阶导数。这些状态不是系统的解决方案,而是由ode15s在内部使用,以便以后获得更准确的解决方案。

如果您想在特定时间获得系统的衍生物,请首先计算整个解决方案,然后在您感兴趣的时候使用该解决方案的片段调用您的ODE函数。