Передача параметров времени выполнения интегратору odeint

Я хотел бы использовать интегратор повышения odeint для просмотра геодезических кривых в пространстве-времени Керра. Это требует запуска интегратора для различных значений параметров (у меня есть начальные условия и векторы начального импульса, поэтому угловой момент системы будет меняться в зависимости от того, как я хотел бы его запустить)

Я следовал за прекрасными примерами, изложенными здесь

http://headmyshoulder.github.io/odeint-v2/examples.html

в частности, пример аттрактора Лоренца.

Первое, что я отмечаю (в моей системе Керра, а не в Лоренце), что для некоторых начальных условий я получаю NaN после момента времени t = 0 (хотя, без сомнения, это предполагает более глубокую ошибку где-то). Чтобы изучить это подробнее, я хотел бы иметь возможность изменять параметры системы без необходимости каждый раз перекомпилировать. Это эквивалентно желанию изменить, скажем, R или сигма без перекомпиляции. Насколько я могу судить, прямого способа передать дополнительные аргументы в функцию интегрирования нет, за исключением, возможно, второго блока кода здесь.

http://headmyshoulder.github.io/odeint-v2/doc/boost_numeric_odeint/tutorial/harmonic_oscillator.html

что я признаюсь, из-за моего отсутствия знаний C ++, я не совсем понимаю.

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

2

Решение

Вы можете передать параметры времени выполнения системной функции, определяющей ваш ODE:

struct ode
{
double param;
ode( double param ) : m_param( param ) {}

void operator()( state_type const& x , state_type& dxdt , time_type t ) const
{
// your ode
}
};

integrate_const( stepper {} , ode { 0.1 } , x , t_start , t_end , dt , observer );
2

Другие решения

Я столкнулся с подобной проблемой. То, что я сделал, определило глобальные переменные, чтобы моя функция могла получить доступ к переменной, которую я передал через argvs. Дайте мне знать, если вам нужен пример.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector