Python 使用Symphy替换odeint的初始条件(如果存在)
我试图在python中使用odeint解决一组耦合的ODE;我最初创建了一个程序来解3个指定的方程(我使用sympy.subs来表示我知道存在的每个值),但现在我希望解N个耦合的ODE。我遇到的问题是,如果我不知道存在哪些值(即,哪些值必须被替换),如何正确地替换给定这些方程的初始条件 例如:对于3x3矩阵的输入,我拥有的ODE集为:Python 使用Symphy替换odeint的初始条件(如果存在),python,numpy,scipy,enthought,sympy,Python,Numpy,Scipy,Enthought,Sympy,我试图在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
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
v0-v8
所有函数都是同一个自变量吗?对不起,我不完全理解你的要求。v0'-v8'是上面方程式的函数(隐式),我将编辑上面的帖子,将它们显示为方程式。你能发布将v0-v8定义为sympy符号的代码吗?@silvado我将其编辑到帖子底部。不清楚你在问什么。例如,这意味着什么:是否有一种方法可以在不知道v0-v8的哪些值存在的情况下替换v0-v8的值
?此外,还不清楚您是如何将scipy.odeint
和sympy
混合在一起的。最后,为什么要使用交换=False
?