SymPy表达式以另一个变量为基础

8

我正在使用Python的SymPy库。

我有两个SymPy符号和绑定它们的表达式:

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

如何用'x'来表示'y',即如何得到等式:

y = (2/7) * x

谢谢。

http://docs.sympy.org/latest/modules/solvers/solvers.html - user2357112
1
详细说明前面的评论,你实际上想解决expr == 0,所以只需这样做:solve(expr, y) - filmor
2个回答

13

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

2

由于这是在谷歌搜索结果中出现的第一个答案,我将提供一种替代方法,尽管它不是对问题的直接回答。

正如其他答案所指出的那样,如果你有两个独立的符号和一个相互关联的方程,你可以使用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 = ???

这就是这个简单的实用函数发挥作用的地方。它让你可以用 b 来表达 a
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接