boost odeint 什么时候真正调用观察者?
When does boost odeint actually call the observer?
我正在构建一个 C++ class 使用 boost::odeint 来集成一个大型生物模拟模型。我正在使用 Runge-Kutta-4 步进器和观察器。
我理解每个时间步调用观察者,而RK步进器在每个时间步调用导数函数4次,然后根据这4次结果计算最终状态。
我在文档或互联网上找不到任何地方,但是观察者是否被称为
- 在每个时间步的 4 个 RK 调用中的第四个之后(此时尚未计算导数),或
- 在每个时间步的 4 个 RK 调用中的第一个之后(此时它有)?
有人知道这个问题的答案吗?
我想报告来自观察者的导数,但我不想对导数函数进行额外的冗余调用来完成它。
谢谢
观察者在每一步之后(结束时)被调用,这意味着通常导数还没有准备好,特别是对于 RK4 导数还没有计算。
如果您担心重新计算导数,odeint 允许将导数传入步进器的低级 do_step 函数 - 因此您可以在外部计算和使用导数,然后将其传入。但这意味着您可以'不要使用方便的集成功能。
我正在构建一个 C++ class 使用 boost::odeint 来集成一个大型生物模拟模型。我正在使用 Runge-Kutta-4 步进器和观察器。
我理解每个时间步调用观察者,而RK步进器在每个时间步调用导数函数4次,然后根据这4次结果计算最终状态。
我在文档或互联网上找不到任何地方,但是观察者是否被称为
- 在每个时间步的 4 个 RK 调用中的第四个之后(此时尚未计算导数),或
- 在每个时间步的 4 个 RK 调用中的第一个之后(此时它有)?
有人知道这个问题的答案吗?
我想报告来自观察者的导数,但我不想对导数函数进行额外的冗余调用来完成它。
谢谢
观察者在每一步之后(结束时)被调用,这意味着通常导数还没有准备好,特别是对于 RK4 导数还没有计算。 如果您担心重新计算导数,odeint 允许将导数传入步进器的低级 do_step 函数 - 因此您可以在外部计算和使用导数,然后将其传入。但这意味着您可以'不要使用方便的集成功能。