我有 9 个非线性 ODE 系统要解决。我想确定地方性平衡点。
我该怎么做?
我尝试了手动计算,但它变得很麻烦。软件可以用于此目的吗?
我有 9 个非线性 ODE 系统要解决。我想确定地方性平衡点。
我该怎么做?
我尝试了手动计算,但它变得很麻烦。软件可以用于此目的吗?
如果您想找到平衡点,您需要将系统编写为一阶系统
并求解非线性方程组
这可能无法通过分析解决。之后,您需要在每个平衡点周围找到雅可比矩阵的特征值,. 您可以使用计算机代数系统 (CAS)来完成这项工作。SymPy、Maxima、Mathematica 和 Maple 就是一些例子。
下面是使用 SymPy 的 Lotka-Volterra 模型的一个示例
from sympy import symbols, Matrix, solve, diff
x, y = symbols("x y")
alpha, beta, gamma, delta = symbols("alpha beta gamma delta")
dXdt = Matrix([alpha*x - beta*x*y, delta*x*y -gamma*y])
eqpts = solve(dXdt, [x, y])
J = Matrix(2, 2, lambda i, j: diff(dXdt[i], [x, y][j]))
vals1 = J.subs({x: eqpts[0][0], y: eqpts[0][1]}).eigenvals()
vals2 = J.subs({x: eqpts[1][0], y: eqpts[1][1]}).eigenvals()
print(vals1)
print(vals2)
带输出
{-gamma: 1, alpha: 1}
{sqrt(-alpha*gamma): 1, -sqrt(-alpha*gamma): 1}
在这里你应该考虑两件事: