Cómo calcular la expresión usando sympy en python
expression (5)
¿Necesito un cálculo a continuación de la expresión usando sympy en python?
exp = ''(a+b)*40-(c-a)/0.5''
En a=6
, b=5
, c=2
este caso, ¿cómo calcular la expresión usando sympy en python? Por favor, ayúdame.
Bueno, sé que eval
es malo , pero si tienes a, byc definidos en tu programa, y puedes asegurarte de que sea seguro hacer la evaluación, no necesitas sympy.
>>> a=5
>>> b=5
>>> c=2
>>> exp = ''(a+b)*40-(c-a)/0.5''
>>> eval(exp)
406.0
La documentación está aquí: http://docs.sympy.org/ . ¡Realmente deberías leerlo!
Para "calcular" tu expresión, escribe algo como esto:
from sympy import Symbol
a = Symbol("a")
b = Symbol("b")
c = Symbol("c")
exp = (a+b)*40-(c-a)/0.5
Y eso es. Si quiso decir algo más con "calcular", también podría resolver exp = 0:
sympy.solve(exp)
> {a: [0.0476190476190476*c - 0.952380952380952*b],
> b: [0.05*c - 1.05*a],
> c: [20.0*b + 21.0*a]}
Para todo lo demás, deberías leer los documentos. Tal vez comience aquí: http://docs.sympy.org/0.7.1/tutorial.html#tutorial
ACTUALIZACIÓN: ya que agregó los valores para a, b, c a la pregunta, puede agregar esto a la solución:
exp.evalf(subs={a:6, b:5, c:2})
Me doy cuenta de que esto ya se respondió anteriormente, pero en el caso de obtener una expresión de cadena con símbolos desconocidos y necesitar acceso a esos símbolos, aquí está el código que usé
# sympy.S is a shortcut to sympify
from sympy import S, Symbol
# load the string as an expression
expression = S(''avar**2 + 3 * (anothervar / athirdvar)'')
# get the symbols from the expression and convert to a list
# all_symbols = [''avar'', ''anothervar'', ''athirdvar'']
all_symbols = [str(x) for x in expression.atoms(Symbol)]
# do something with the symbols to get them into a dictionary of values
# then we can find the result. e.g.
# symbol_vals = {''avar'': 1, ''anothervar'': 2, ''athirdvar'': 99}
result = expression.subs(symbols_vals)
Puede convertir su cadena en una expresión sympy utilizando la función parse_expr()
en el módulo sympy.parsing.sympy_parser
.
>>> from sympy.abc import a, b, c
>>> from sympy.parsing.sympy_parser import parse_expr
>>> sympy_exp = parse_expr(''(a+b)*40-(c-a)/0.5'')
>>> sympy_exp.evalf(subs={a:6, b:5, c:2})
448.000000000000
>>> a, b, c = sympy.symbols(''a b c'')
>>> exp = (a + b) * 40 - (c - a) / 0.5
>>> exp.evalf(6, subs={a:6, b:5, c:2})
448.000