复杂非线性系统的平衡

时间:2018-02-27 15:24:25

标签: python sympy

当我运行以下代码时,我得到了

TypeError:  can't multiply sequence by non-int of type "Add'

有谁可以解释为什么我会收到此错误?

from sympy.core.symbol import symbols
from sympy.solvers.solveset import nonlinsolve

x, y, z, r, R, a, m, n, b, k1, k2 = symbols('x,y,z,r,R,a,m,n,b,k1,k2', positive=True)

f1 = r * x * (1 - x / k1) - (a * z * x ** (n + 1)) / (x ** n + y ** n)
f2 = R * y * (1 - y / k2) - (b * z * y ** (n + 1)) / (x ** n + y ** n)
f3 = z * (a * x ** (n + 1) + b * y ** (n + 1)) / (x ** n + y ** n) - m * z
f = [f1, f2, f3]
nonlinsolve(f, [x, y, z])

1 个答案:

答案 0 :(得分:0)

错误消息不是真正描述性的,但完整的堆栈跟踪指示问题所在:SymPy尝试使用表达式,就好像它是多项式一样,并且发现这是不可能的,因为指数n是符号而不是具体的整数。

简单地说,SymPy没有用于解决类似系统的算法(而且我不确定CAS是否有)。

当以多项式形式写入时,系统具有总次数n + 2的单项式。因此,对于n = 1,这已经完全没有希望了:具有三个未知数的三个三次方程组。 SymPy可以解决n = 0的情况,我不会期待更多的东西。