Comment puis-je obtenir cela pour me donner 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
3
confusedDespiteKnowingBetter 5 mars 2016 à 02:27

4 réponses

Meilleure réponse

solve(z,x) renvoie correctement 0 car votre code demande effectivement "quelle est la valeur de x qui ferait que z devienne 0?".

Ce que vous voulez vraiment faire (comme décrit dans cet exemple dans la sympy docs) est de résoudre a*x/y==z ce qui peut être fait comme suit

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]
6
Fermi paradox 10 mars 2016 à 12:47

N'attribuez pas z = a*x/y et ne passez pas z à solve.

solve(expr, symbol) détermine quelles valeurs de symbol feront expr égal à 0. Si vous voulez savoir quelle valeur de x rend z égal a*x/y , vous voulez que z - a*x/y soit égal à 0:

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

Vous ne souhaitez pas affecter z = a*x/y. = signifie quelque chose de complètement différent de l'égalité.

4
user2357112 supports Monica 5 mars 2016 à 00:01

Je pense que la réponse à cette question peut être utile. Appliqué à votre exemple, cela donne:

>>> 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]
1
Community 23 mai 2017 à 12:01

Comme toutes les autres réponses indiquent la solution,
Je voudrais insister sur l'utilisation des Eq instances ici.
Un objet Eq représente An equal relation between two objects.

Pour utiliser un objet Eq, votre code devrait ressembler à ceci:

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]
0
Fermi paradox 4 janv. 2017 à 12:10