2

我正在尝试在 python 中使用 odeint 解决一组耦合 ODE;我最初创建程序来求解 3 个指定的方程(我对我知道存在的每个值都使用 sympy.subs),但现在我希望求解 N 个耦合 ODE。我遇到的问题是如何在给定这些方程的情况下正确替换初始条件,我知道存在哪些值(即必须替换哪些值)。

例如:对于 3x3 矩阵的输入,我拥有的 ODE 集是:

v0' = -6*v1*v3 - 12*v2*v6
v1' = -3*v1*(6 + v4) - 9*v2*v7 + 3*(3 + v0)*v1
v2' = -6*v2*(9 + v8) + 6*(3 + v0)*v2
v3' = 3*v3*(3 + v0) - 9*v5*v6 - 3*(6 + v4)*v3
v4' = 6*v3*v1 - 6*v5*v7
v5' = 9*v3*v2 - 3*v5*(9 + v8) + 3*(6 + v4)*v5
v6' = 6*v6*(3 + v0) - 6*(9 + v8)*v6
v7' = 9*v6*v1 + 3*v7*(6 + v4) - 3*(9 + v8)*v7
v8' = 12*v6*v2 + 6*v7*v5

我在向量中有 v0-v8 的初始值(其中 v0-v8 通过 SymPy 设置为符号),但没有手动替换每个值,我不知道如何解决这个问题。

有没有办法在不知道存在哪些 v0-v8 值的情况下替换 v0-v8 的值。(对于不同大小的矩阵,初始值的数量也会发生变化——即 4x4 有 v0-v15)

编辑:编辑后 v0'-v8' 显示为耦合 ODE 的函数。但是,当在 odeint 中输入它们时,方程只是隐含地等于 v0'-v8',因为它们在向量中的位置。

v0-v8 由以下人员创建:

v = sy.symbols('v0:%d'%matSize, commutative=False)

其中 matSize 是与输入矩阵的大小相关的输入 int。

4

0 回答 0