用 Sympy 求解方程组,python2.7
Solving a system of equation with Sympy, python2.7
我想解一个方程组。但我希望能够将值精确到 "get",并作为 "what".
的函数
为了更好地理解,我以 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))
在
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))
因此,如您所见,我在最后一个等式中将 z 替换为 w 并添加了一个新的精确 z=w。
但是,sympy(在 python 2.7 上)无法求解这个新的方程组!!
所以我的问题是: 如何获得 x、y、z 作为 rho、sigma、beta 函数的结果。更一般地说,我们如何精确变量 "response variable".
我认为这可能非常有帮助,因为通常情况下,您不想在要求 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 (most recent call last):
File "C:\temp\equation1.py", line 37, in f3 = x * y - beta * w NameError: name 'w' is not defined
因此我们从 sympy 符号中提取符号 '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)]
>>>
我想解一个方程组。但我希望能够将值精确到 "get",并作为 "what".
的函数为了更好地理解,我以 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))
在
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))
因此,如您所见,我在最后一个等式中将 z 替换为 w 并添加了一个新的精确 z=w。 但是,sympy(在 python 2.7 上)无法求解这个新的方程组!!
所以我的问题是: 如何获得 x、y、z 作为 rho、sigma、beta 函数的结果。更一般地说,我们如何精确变量 "response variable".
我认为这可能非常有帮助,因为通常情况下,您不想在要求 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 (most recent call last): File "C:\temp\equation1.py", line 37, in f3 = x * y - beta * w NameError: name 'w' is not defined
因此我们从 sympy 符号中提取符号 '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)]
>>>