使用 boost c++ odeint 库,是否可以求解定义如下的二阶微分方程?
m*x''[i] + x'[i] = K*\sum{j=1,N} sin(x[j] - x[i]), where i = 1,2,3..N.
m = 1, K = 1
其中 x 的初始值是一个 vector 或由 N 个在 0 到 2*pi 之间均匀生成的随机数组成的数组。
我想使用 odeint 的 runge_kutta stepper 对上述方程进行积分?
我可以通过写上面的 eqn 来解决它。在两个一阶微分方程中,但
那么在这种情况下,如何编写或修改 odeint 步进器?
最佳答案
只需将您的方程转换为一阶 ODE 并使用长度为 2 N
的状态类型。前 N 个条目现在仅处理 x[i]
而后 N 个条目指的是速度 x'[i]
void ode( state_type const& x , state_type &dxdt , double t )
{
for( size_t i=0 ; i<N ; ++i )
{
double sum = 0.0;
// calculate sum
dxdt[i] = x[i+N];
dxdt[i+N] = K * sum;
}
}
一个完整的例子可能看起来像
size_t N = 512;
typedef std::vector< double > state_type;
state_type x( 2 * N );
// initialize x
double t_start = 0.0 , t_end = 10.0 , dt = 0.01;
odeint::integrate( ode , x , t_start , t_end , dt );
关于c++ - 使用 C++ Boost odeint 库的二阶微分方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21525964/