2016-03-04 101 views
2

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

我强烈建议你[使用IDE(http://sopython.com/维基/ Python_IDEs)。它可以帮助你更快地学习python,并帮助避免微不足道的错误,如user2357112 [在他的回答](http://stackoverflow.com/a/35808171/4230591)中描述的为名称'z'分配新值。 (你使'z'成为一个符号,然后通过做'z = ...'它不再是那个符号)。虽然这个错误与你的实际问题有些无关。 –

回答

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] 
4

不分配z = a*x/y,并且不通过zsolve

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=意味着与平等完全不同的东西。

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] 
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]