求解变量方程

Solving an equation for a variable

我怎样才能得到这个给我 x = z*y/a ?

from sympy import *

x,y,a,z = symbols('x y a z')
z = a*x/y

solve(z,x) # returns 0!
           # would like to get z*y/a

不要分配 z = a*x/y,也不要将 z 传递给 solve

solve(expr, symbol) 确定 symbol 的哪些值会使 expr 等于 0。如果您想知道 x 的哪些值会使 z 等于a*x/y,你希望 z - a*x/y 等于 0:

solve(z - a*x/y, x)

不想分配z = a*x/y= 与相等完全不同。

solve(z,x) 正确 returns 0 因为您的代码实际上是在询问:

What's the value of x that would cause z to become 0?

您真正想做的(如 here 所述)是解决 a*x/y==z,可以按如下方式完成:

from sympy import *

x,y,a,z = symbols('x y a z')
equation = a*x/y

new_eq = solve(equation - z, x)  # its value is [y*z/a]

我认为 this question 的答案会有所帮助。应用于您的示例,这给出:

>>> from sympy import *
>>> x,y,a,z = symbols('x y a z')
>>> l = z
>>> r = a*x/y
>>> solve(l-r,x)
[y*z/a]

由于所有其他答案都指出了解决方案,
我想在这里强调 Eq 个实例的使用。
Eq 对象表示 An equal relation between two objects.

要使用 Eq 对象,您的代码应如下所示:

In []: a, x, y, z = symbols('a, x, y, z')  
In []: foo = Eq(z, a*x/y)
In []: solve(foo, x)
Out[]: [y*z/a]