如何在python中使用sympy计算表达式

时间:2011-08-10 06:18:26

标签: python expression sympy

我需要在python中使用sympy计算下面的表达式?

exp = '(a+b)*40-(c-a)/0.5'

a=6b=5c=2这个案例中如何使用python中的sympy计算表达式?请帮帮我。

5 个答案:

答案 0 :(得分:24)

文档在这里:http://docs.sympy.org/。你应该读它!

要“计算”你的表达,写下这样的东西:

from sympy import Symbol
a = Symbol("a")
b = Symbol("b")
c = Symbol("c")
exp = (a+b)*40-(c-a)/0.5

就是这样。如果您通过“计算”表示其他内容,您也可以解决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]}

对于其他一切,你应该真正阅读文档。也许从这里开始:http://docs.sympy.org/0.7.1/tutorial.html#tutorial

更新:由于您在问题中添加了a,b,c的值,因此可以将其添加到解决方案中:

exp.evalf(subs={a:6, b:5, c:2})

答案 1 :(得分:13)

您可以使用the parse_expr() function in the module 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

答案 2 :(得分:7)

我意识到这已经在上面回答了,但是在获取带有未知符号的字符串表达式并需要访问这些符号的情况下,这是我使用的代码

# 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)

答案 3 :(得分:5)

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

答案 4 :(得分:3)

嗯,我知道eval 邪恶,但是如果你的程序中定义了a,b和c,你可以确保eval是安全的,你不需要同情。

>>> a=5
>>> b=5
>>> c=2
>>> exp = '(a+b)*40-(c-a)/0.5'
>>> eval(exp)
406.0