Когда boost odeint на самом деле вызывает наблюдателя? - PullRequest
0 голосов
/ 29 октября 2018

Я строю класс C ++, использующий boost :: odeint для интеграции большой биологической имитационной модели.Я использую степпер Рунге-Кутта-4 и наблюдателя.

Я понимаю, что наблюдатель вызывается на каждом временном шаге, тогда как степлер RK вызывает производную функцию 4 раза на каждом временном шаге, а затем вычисляет конечное состояние на основе этих 4 результатов.

Я не могу найти нигде в документации или в Интернете, но есть ли наблюдатель называется

  1. после ЧЕТВЕРТЫХ 4 RK-вызовов для каждого временного шага (в этот момент производная еще невычислено), или
  2. после ПЕРВЫХ 4 РК звонков для каждого временного шага (в какой момент он имеет)?

Кто-нибудь знает ответ на этот вопрос?

Я хочу сообщить о производной от наблюдателя, но я не хочу делать дополнительный избыточный вызов производной функции, чтобы сделать это.

Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Наблюдатель вызывается после (в конце) каждого шага, что означает, что в общем случае производная не готова, в частности, для RK4 производная еще не вычислена. Если вы беспокоитесь о пересчете производной, odeint позволяет передать производную в низкоуровневые do_step функции степперов - так что вы можете вычислить и использовать производную снаружи, а затем передать ее внутрь. Но это означает, что вы не может использовать удобные функции интегрирования.

...