SymPy 根据另一个表达变量

SymPy express variable in terms of another

我正在为 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.

由于这是 Google 搜索中出现的第一个结果,我将提供另一种方法,尽管它不是问题的直接答案。

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

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

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

但有时会出现你只有只有一个独立符号x而另一个符号y用[=15=表示],而你想扭转依赖关系——使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