小编典典

用python求解非线性方程组

python

我可以根据python中的参数求解非线性方程组吗?有例子或教程吗?我可以在maple中轻松地做到这一点,但是我特定系统的表达式很大,复制它们非常困难。

例:

sigma*(y-x) = 0
x*(rho-z)-y = 0
x*y-beta*z = 0

您应该获得解决方案:

[[x = 0, y = 0, z = 0], [x = sqrt(beta*rho-beta), y = sqrt(beta*rho-beta), z = rho-1],
[x = -sqrt(beta*rho-beta), y = -sqrt(beta*rho-beta), z = rho-1]]

我问的原因:我有一个大型的非线性ODE系统。我想求解不动点(这是可行的,已经在maple中完成,但是它们又大又丑陋)。我想从固定点创建更多表达式,然后在scipy中使用优化包。我宁愿用python来做所有事情,也不愿来回翻译事情,因为它效率很低并且会出错。


阅读 186

收藏
2021-01-20

共1个答案

小编典典

重申@Russ的答案,这可以在中轻松实现sympy。例如:

In [1]: import sympy as sp
In [2]: x, y, z = sp.symbols('x, y, z')
In [3]: rho, sigma, beta = sp.symbols('rho, sigma, beta')
In [4]: f1 = sigma * (y - x)
In [5]: f2 = x * (rho - z) - y
In [6]: f3 = x * y - beta * z
In [7]: sp.solvers.solve((f1, f2, f3), (x, y, z))
Out[7]: 
[(0, 0, 0),
 (-sqrt(beta*rho - beta), -sqrt(beta*(rho - 1)), rho - 1),
 (sqrt(beta*rho - beta), sqrt(beta*(rho - 1)), rho - 1)]

输出格式为的可能值的3个可能的元组(x, y, z)

2021-01-20