假设我有以下方程组:
x = 1/y + b
y = 2*x
遵循b = x-1/(2*x)
如果我尝试在SymPy中定义这些表达式,
from sympy import *
b = symbols('b')
x = 1/y + b
y = 2*x
它给了我
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-4-5a9b5f6b923e> in <module>()
1 from sympy import *
2 b = symbols('b')
----> 3 x = 1/y + b
4 y = 2*x
5
NameError: name 'y' is not defined
设置这组方程式的正确方法是什么,以便我可以解决x?扩展一下,如何对它进行evalf?
答案 0 :(得分:3)
您可以使用solve
来解决方程式。
In [1]: from sympy import *
In [2]: from sympy.abc import x, y, b
In [3]: eq1 = Eq(x - 1/y - b, 0)
In [4]: eq2 = Eq(2*x - y, 0)
In [5]: solve([eq1, eq2], b)
Out[5]: {b: x - 1/y}
答案 1 :(得分:2)
=
表达不符合你的想法。
在常规python语法中,=
运算符用于变量赋值。
您应该在符号中定义所有内容,然后将等式转换为等于零并求解。
主要问题是缺乏一般的程序编程知识。
您应该使用solvers
,要求公式表示如下。
x = 1/y + b
x - 1/y - b = 0
代码可以写成如下。
from sympy.solvers import solve
from sympy import symbols
b = symbols('b')
x = symbols('x')
y = 2 * x
solve(x - 1/y - b, b)
然后输出将是您想要看到的。
>>> [x - 1/(2*x)]
如果您想以y
表示b,可以使用以下代码。
from sympy.solvers import solve
from sympy import symbols
b = symbols('b')
y = symbols('y')
x = y/2
solve(x - 1/y - b, b)
然后输出将是:
>>> [y/2 - 1/y]
如果你想用x和y来表达b,你可以使用以下(感谢Sudhanshu Mishra的答案):
from sympy.solvers import solve
from sympy import symbols, Eq
b = symbols('b')
y = symbols('y')
x = symbols('x')
eq1 = Eq(1/y + b, x)
eq2 = Eq(2 * x, y)
solve([eq1, eq2], b)
结果将是:
>>> {b: x - 1/y}