web-dev-qa-db-ja.com

python)でsympyを使用して式を計算する方法

Pythonでsympyを使用して以下の式を計算する必要がありますか?

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

a=6b=5c=2この場合、Pythonでsympyを使用して式を計算する方法は?私を助けてください。

19
Zeck

ドキュメントはここにあります: 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})
25
xubuntix

モジュール_sympy.parsing.sympy_parser_parse_expr()関数を使用して、文字列をsympy式に変換できます。

_>>> 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
_
13
jamesadney

これはすでに上記で回答されていることはわかっていますが、不明な記号を含む文字列式を取得し、それらの記号にアクセスする必要がある場合は、次のコードを使用しました

# 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)
7
will-hart
>>> 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
5
Eryk Sun

まあ、私はevalが 悪の、ただし、プログラムでa、b、cが定義されていて、evalを安全に実行できることを確認できる場合は、sympyは必要ありません。

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