如何跟踪 ode 求解器的显式状态?

How do I track explicit states for ode solvers?

提问人:lee 提问时间:8/15/2023 更新时间:8/15/2023 访问量:20

问:

在我的导数函数中,我有一个导数列表,这些导数依赖于当前时间步长的值。但是,我也有一些中间状态对这个导数有贡献。例如:这是我意思的一个简单的例子。我还想跟踪每个时间点的这个状态变量的中间值。这怎么能做到?这些状态没有导数。现在我的(伪代码)模式如下:dy/dtSTATE(i)=2-RATE(i);

partition t manually
for 1:length(t)-1
  compute states(i)
  rates(i+1) = ode(dydt with updated states(i), [t(i), t(i+1)], rates(i))
end
plot rates
plot states 

通常,你会把所有状态都放在导数函数中。但我也想跟踪它以进行绘图+分析。

MATLAB 闭包 ODE

评论

1赞 Lutz Lehmann 8/15/2023
你没有。求解器计算常微分方程函数的点与输出中报告的值没有任何关系(几乎,几乎从不)。因此,如果您的 ODE 函数是 ,那么获取 的值的最正确方法是根据输出值重新计算它们。如果您的模型具有在某些情况下会发生变化的分段常量参数,则需要使用某种事件机制来停止集成、重新计算参数并重新启动集成。f(t,x) = g(t,x,s(t,x))s
1赞 Lutz Lehmann 8/15/2023
有关此主题的先前讨论,请参阅 stackoverflow.com/questions/60619524/...,毕竟,搜索结果中没有那么多关于“[ode] intermediate”的有用内容。我的印象是我在这个话题上写了更多。

答: 暂无答案