我想接收來自用戶的輸入,解析它,然後對結果表達式執行一些替換。我知道我可以使用sympy.parsing.sympy_parser.parse_expr
解析來自用戶的任意輸入。但是,我在替換函數定義時遇到了問題。是否有可能以這種方式進行替代,如果是這樣,我該怎麼做?替補函數調用sympy
總體目標是讓用戶提供一個函數x
,然後用它來擬合數據。 parse_expr
讓我有95%的路程,但我想提供一些方便的擴展,如下所示。
import sympy
from sympy.parsing.sympy_parser import parse_expr
x,height,mean,sigma = sympy.symbols('x height mean sigma')
gaus = height*sympy.exp(-((x-mean)/sigma)**2/2)
expr = parse_expr('gaus(100, 5, 0.2) + 5')
print expr.subs('gaus',gaus) # prints 'gaus(100, 5, 0.2) + 5'
print expr.subs(sympy.Symbol('gaus'),gaus) # prints 'gaus(100, 5, 0.2) + 5'
print expr.subs(sympy.Symbol('gaus')(height,mean,sigma),gaus) # prints 'gaus(100, 5, 0.2) + 5'
# Desired output: '100 * exp(-((x-5)/0.2)**2/2) + 5'
這是使用python 2.7.9,sympy 0.7.5完成的。