如何得到非线性系统方程的所有解

问题描述 投票:0回答:1

我正在尝试获取 SIR 模型的以下 ODE 系统的稳态点(稳态点是系统方程为零时的解):

import sympy as sp
S, I, R, b, g = sp.symbols('S I R b g')
dSdt = -b * S * I
dIdt = b * S * I - g * I
dRdt = g * I
steady_states = sp.solve([dSdt, dIdt, dRdt], [S, I, R])
steady_states

当我为

b
g
设置数值时,它会显示所有解决方案,但是当我将它们保留为符号时,它只显示此解决方案:

[(S,0,R)]

另一个解决方案应该是:

[(g/b,0,R)]

两个都可以吗?也许是 sympy 中的另一个函数?预先感谢。

python sympy ode
1个回答
0
投票

S = g/b
的解是多余的,因为使
I
的方程为0的唯一方法是当
I=0
时(因为它是可以使最后一个方程为零的唯一因素)。对于
I=0
S
是什么并不重要。如果您想查看每个方程的单独解是什么,请针对每个变量单独求解它们:

>>> ...
>>> e,v=([dSdt, dIdt, dRdt], [S, I, R])
>>> [{vi:(solve(ei,vi) or [vi])[0] for vi in v} for ei in e]
[{S: 0, I: 0, R: R}, {S: g/b, I: 0, R: R}, {S: S, I: 0, R: R}]
© www.soinside.com 2019 - 2024. All rights reserved.