1

私はMathematicaに不慣れで、ODEのシステムを動的に生成する方法を理解しようとしています。たとえば、100の方程式のシステムがあり、10ごとに基本的に同じですが、ベクトル(長さ10)から読み取ることができるパラメーターがわずかに異なります。10個の方程式を書き出してから、イテレータをループして100個すべての方程式を生成したいと思います。これを行うための標準的な方法はありますか?

たとえば、これは30の方程式のシステムです(1:10のiの場合)。

 dX_i/dt = -\beta*X_i*Y_i + \delta_{i-1}*X_{i-1} - \delta_i*X_{i}
 dY_i/dt = \beta*X_i*Y_i - \gamma_i*Y_i + \delta_{i-1}*Y_{i-1} - \delta_i*Y_{i} 
 dZ_i/dt = \gamma_i*Y_i + \delta_{i-1}*Z_{i-1} - \delta_i*Z_{i} 

iを100に増やすと、新しい方程式をコピーして貼り付けるのは冗長に思えます(つまり、300のODEが得られます)。

4

1 に答える 1

2

ここに行きますが、おそらく Mathematica はそれを解くことができません(係数によって異なります)

Table[(delta[i] = i; gamma[i] = -i), {i, 0, 10}];
b = 1;
DSolve[Flatten@Table[{
    x[i]'[t] == -b x[i][t] y[i][t] + delta[i - 1] x[i - 1][t] - delta[i] x[i][t],
    y[i]'[t] == -b x[i][t] y[i][t] - gamma[i] y[i][t] + delta[i - 1] y[i - 1][t] - delta[i] y[i][t],
    z[i]'[t] ==  gamma[i] y[i][t] + delta[i - 1] z[i - 1][t] - delta[i] z[i][t]}, {i, 1, 10}], 
 Flatten[Table[{x[i][t], y[i][t], z[i][t]}, {i, 1, 10}]], t]
于 2012-09-18T16:03:08.117 に答える