4

boost c++ odeint ライブラリを使用して、次のように定義された 2 次微分方程式を解くことは可能ですか?

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 の初期値は、0 から 2*pi までの一様に生成された N 個の乱数のベクトルまたは配列です。odeint の runge_kutta ステッパーを使用して上記の方程式を統合したいですか?

eqnの上に書くことで解決できます。2つの一次微分方程式で、しかしその場合、odeintステッパーはどのように書かれたり修正されたりするでしょうか?

4

1 に答える 1

4

方程式を一次 ODE に変換し、長さの状態タイプを使用するだけ2 Nです。最初の N エントリは のみx[i]を処理し、2 番目の 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 に答える