4

使用 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 的初始值是一个向量或数组,由 N 个均匀生成的随机数组成,介于 0 到 2*pi 之间。我想使用 odeint 的 runge_kutta 步进器整合上述方程?

我可以通过写上面的eqn来解决它。在两个一阶微分方程中,但在那种情况下,如何编写或修改 odeint 步进器?

4

1 回答 1

4

只需将您的方程转换为一阶 ODE 并使用 length 状态类型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 );
于 2014-02-03T14:16:56.377 回答