我正在使用Python的SymPy库。
我有两个SymPy符号和绑定它们的表达式:
x = Symbol('x')
y = Symbol('y')
expr = 2 * x - 7 * y
如何用'x'来表示'y',即如何得到等式:
y = (2/7) * x
谢谢。
这是你如何用x
来表示这个方程:
In [1]: from sympy import *
In [2]: x, y = symbols('x, y')
In [3]: expr = 2*x - 7*y
In [4]: solve(expr, y)
Out[4]: [2*x/7]
这是因为如果solve()函数接收到的内容不是一个完整的方程式,它会假设提供的表达式等于零。换句话说,写成: expr = 2*x - 7*y
上面的内容相当于写成:
expr = Eq(2*x - 7*y, 0)
这将告诉SymPy这件事
2x - 7y = 0.
由于这是在谷歌搜索结果中出现的第一个答案,我将提供一种替代方法,尽管它不是对问题的直接回答。
正如其他答案所指出的那样,如果你有两个独立的符号和一个相互关联的方程,你可以使用expr.solve
来用另一个符号表示其中一个符号:
x, y = symbols('x y')
expr = 2*x - 7*y
y = solve(expr, y)[0]
y # outputs 2*x/7
x
,而另一个符号 y
是以 x
表示的,你想要反转依赖关系 - 使 y
成为独立符号。# what we have
y = symbols('y')
x = 7*y/2
# what we want
x = symbols('x')
y = ???
def express(a, b, name):
sym = symbols(name)
sol = solve(a-sym, b)
assert len(sol) == 1
return (sym, sol[0])
a
是我们想要用自由变量b
来表达的因变量。第三个参数name
是我们将给出a
的名称(直到现在它只是一个未命名的表达式)。y = symbols('y')
x = 7*y/2
x, y = express(x, y, 'x')
y # outputs 2*x/7
expr == 0
,所以只需这样做:solve(expr, y)
。 - filmor