我想解决一个方程组。但是我希望能够将价值精确到"得到",并作为"什么"。
的函数。为了更好地理解,我从here中得到了一个例子,我改编了:
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))
in
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的结果作为rho,sigma,beta的函数。更一般地说,我们如何精确变量"响应变量"。
我认为这可能非常有用,因为在要求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 儿子我应该得到同样的答案!
答案 0 :(得分:1)
您的代码出现以下错误:
追踪(最近一次通话): 文件“C:\ temp \ equation1.py”,第37行,在f3 = x * y - beta * w NameError:名称'w'未定义
因此我们从同情符号中拉出符号'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)]
>>>