1

我是 Mathematica 的新手,正在尝试弄清楚如何动态生成 ODE 系统。例如,我有一个由 100 个方程组成的系统,其中每 10 个方程基本相同,但可以从向量(长度为 10)中读取的参数略有不同。我想写出 10 个方程,然后遍历一些迭代器以生成所有 100 个方程。有没有标准的方法来做到这一点?

例如,这是一个由 30 个方程组成的系统(对于 i 在 1:10):

 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(即给我们三百个 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 回答