SymPy表达另一个变量

时间:2015-04-15 09:03:37

标签: python sympy

我正在使用SymPy lib for Python。 我有两个同情符号和表达方式将它们绑定在一起:

x = Symbol('x')
y = Symbol('y')
expr = 2 * x - 7 * y

我如何用'x'来表达'y',即获得平等:

y = (2/7) * x

感谢。

2 个答案:

答案 0 :(得分:9)

这就是你如何用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.

答案 1 :(得分:0)

由于这是在Google搜索中显示的第一个结果,因此我将提供一种替代方法,即使它不是问题的直接答案。

正如另一个答案所指出的,如果您有两个独立的符号和一个与它们相关的方程式,则可以使用expr.solve来用另一个符号来表达它们:

x, y = symbols('x y')
expr = 2*x - 7*y

y = solve(expr, y)[0]
y # outputs 2*x/7

但是有时候会发生,您只有仅一个独立符号x ,而另一个符号yx表示,并且您想要反转依赖关系– y设为独立符号

# what we have
y = symbols('y')
x = 7*y/2

# what we want
x = symbols('x')
y = ???

在这里,这个简单的实用工具便派上了用场。它使您可以用a来表达b

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