用Sympy求解一个方程组,python2.7



我想解一个方程组。但是我希望能够精确地得到"get"的值,并作为"what"的函数。

为了更好地理解,我从这里举一个例子,我修改了:

import sympy as sp
x, y, z = sp.symbols('x, y, z')
rho, sigma, beta = sp.symbols('rho, sigma, beta')
f1 = sigma * (y - x)
f2 = x * (rho - z) - y
f3 = x * y - beta * z
print sp.solvers.solve((f1, f2, f3), (x, y, z))

import sympy as sp
x, y, z, w = sp.symbols('x, y, z, w')
rho, sigma, beta = sp.symbols('rho, sigma, beta')
f1 = sigma * (y - x)
f2 = x * (rho - z) - y
f3 = x * y - beta * w
f4 = z - w
print sp.solvers.solve((f1, f2, f3, f4), (x, y, z))
因此,正如您所看到的,我在最后一个方程中用w替换了z,并添加了一个新的精确z = w。但是,sympy(在python 2.7上)无法解决这个新的方程系统!!

我的问题是:如何得到x y z作为的函数。更一般地说,我们如何精确定义变量"响应变量"。

我认为这可能非常有帮助,因为通常情况下,你不想在让python解决它之前开发你的方程系统。

同样,如果我举一个更复杂的例子:

import sympy as sp
x, y, z, w, u = sp.symbols('x, y, z, w, u')
rho, sigma, beta = sp.symbols('rho, sigma, beta')
f1 = sigma * (y - x)
f2 = x * (rho - u) - y
f3 = x * y - beta * w
f4 = z - w
f5 = w - u
print sp.solvers.solve((f1, f2, f3, f4, f5), (x, y, z))

我得到的响应是:

[]

但正如你看到的,我有z = w = u儿子,我应该得到同样的答案!

您的代码给出以下错误:

Traceback(最近一次调用):文件"C:tempequation1.py",第37行,在f3 = x * y - beta * w NameError: name 'w' is not defined

因此,我们从符号中提取符号"w",如下所示x, y, z, w = sp.symbols('x, y, z, w')

您还提到您正在尝试添加z = w,因此一旦我们将其添加到您的代码中,它就可以工作了。

工作代码:

import sympy as sp
x, y, z, w = sp.symbols('x, y, z, w')
rho, sigma, beta = sp.symbols('rho, sigma, beta')
z = w
f1 = sigma * (y - x)
f2 = x * (rho - z) - y
f3 = x * y - beta * w
f4 = z - w
print sp.solvers.solve((f1, f2, f3, f4), (x, y, z, w))
输出:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
[(0, 0, 0), (-sqrt(beta*rho - beta), -sqrt(beta*(rho - 1)), rho - 1), (sqrt(beta*rho - beta), sqrt(beta*(rho - 1)), rho - 1)]
>>> 

最新更新