求解变量的方程

时间:2016-03-04 23:27:27

标签: python sympy

我怎样才能得到这个给我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

4 个答案:

答案 0 :(得分:6)

solve(z,x)正确返回0,因为你的代码有效地询问“x的值是什么导致z变为0?”。

您真正想要做的事情(如this example in the sympy docs中所述)是解决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]

答案 1 :(得分:4)

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

solve(expr, symbol)确定symbol的哪些值会使expr等于0.如果您想确定x使z的值a*x/y等于{{} 1}},您希望z - a*x/y等于0:

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

想要分配z = a*x/y=意味着与平等完全不同的东西。

答案 2 :(得分:1)

我认为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]

答案 3 :(得分:0)

正如所有其他答案都指出了解决方案,
我想强调在这里使用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]