boost odeint 什么时候真正调用观察者?

When does boost odeint actually call the observer?

我正在构建一个 C++ class 使用 boost::odeint 来集成一个大型生物模拟模型。我正在使用 Runge-Kutta-4 步进器和观察器。

我理解每个时间步调用观察者,而RK步进器在每个时间步调用导数函数4次,然后根据这4次结果计算最终状态。

我在文档或互联网上找不到任何地方,但是观察者是否被称为

  1. 在每个时间步的 4 个 RK 调用中的第四个之后(此时尚未计算导数),或
  2. 在每个时间步的 4 个 RK 调用中的第一个之后(此时它有)?

有人知道这个问题的答案吗?

我想报告来自观察者的导数,但我不想对导数函数进行额外的冗余调用来完成它。

谢谢

观察者在每一步之后(结束时)被调用,这意味着通常导数还没有准备好,特别是对于 RK4 导数还没有计算。 如果您担心重新计算导数,odeint 允许将导数传入步进器的低级 do_step 函数 - 因此您可以在外部计算和使用导数,然后将其传入。但这意味着您可以'不要使用方便的集成功能。