将运行时参数传递给 odeint 集成器
Passing runtime parameters to odeint integrator
我想使用 odeint boost 积分器查看克尔时空中的测地线曲线。这需要 运行 为各种参数值设置一个积分器(我有初始条件和初始动量向量,因此系统的 angular 动量将根据我想如何启动它而变化)
我一直在关注此处列出的优秀示例
http://headmyshoulder.github.io/odeint-v2/examples.html
特别是洛伦兹吸引子示例。
我注意到的第一件事(在我的 Kerr 系统中,而不是 Lorenz)是对于某些初始条件,我在 t=0 时间点之后得到 NaN(尽管毫无疑问这表明某处存在更深层次的错误)。为了进一步探索这一点,我希望能够更改系统的参数,而不必每次都重新编译。这相当于想要更改,比如 R 或 sigma 而无需重新编译。据我所知,没有直接的方法可以将额外的参数传递给集成函数,除了这里的第二个代码块
http://headmyshoulder.github.io/odeint-v2/doc/boost_numeric_odeint/tutorial/harmonic_oscillator.html
我承认,由于我缺乏C++知识,我不是很明白。
我希望知道如何接收 运行 时间参数并将它们传递给这个求解器,这样我就可以 运行 一堆批次而无需每次编译。
您可以将运行时参数传递给定义 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 );
我运行陷入了类似的问题。我所做的是定义全局变量,以便我的函数可以访问我通过 argvs 传递的变量。如果您需要示例,请告诉我。
我想使用 odeint boost 积分器查看克尔时空中的测地线曲线。这需要 运行 为各种参数值设置一个积分器(我有初始条件和初始动量向量,因此系统的 angular 动量将根据我想如何启动它而变化)
我一直在关注此处列出的优秀示例
http://headmyshoulder.github.io/odeint-v2/examples.html
特别是洛伦兹吸引子示例。
我注意到的第一件事(在我的 Kerr 系统中,而不是 Lorenz)是对于某些初始条件,我在 t=0 时间点之后得到 NaN(尽管毫无疑问这表明某处存在更深层次的错误)。为了进一步探索这一点,我希望能够更改系统的参数,而不必每次都重新编译。这相当于想要更改,比如 R 或 sigma 而无需重新编译。据我所知,没有直接的方法可以将额外的参数传递给集成函数,除了这里的第二个代码块
http://headmyshoulder.github.io/odeint-v2/doc/boost_numeric_odeint/tutorial/harmonic_oscillator.html
我承认,由于我缺乏C++知识,我不是很明白。
我希望知道如何接收 运行 时间参数并将它们传递给这个求解器,这样我就可以 运行 一堆批次而无需每次编译。
您可以将运行时参数传递给定义 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 );
我运行陷入了类似的问题。我所做的是定义全局变量,以便我的函数可以访问我通过 argvs 传递的变量。如果您需要示例,请告诉我。