Я изо всех сил пытался взять ввод текста уравнения и оценить его как определенный интеграл. Мне нужна вызываемая функция, чтобы перейти к scipy.integrate.
scipy.integrate
eq = "x**2" func = lambda x: eq func(2) # outputs: # x**2 # but if I: func = lambda x: x**2 func(2) # outputs: # 4
Не уверен, но, возможно, вы ищете
eq = "x**2" func = eval("lambda x: " + eq)
Обратите внимание, что использование eval() опасно, если eq из ненадежного источника (например, пользовательский ввод).
eval()
eq
sympify может быть тем, что вы ищете.Он преобразует строковое выражение в объект sympy.
Например:
import sympy as sp f=sp.sympify('x**2+sin(y)')
И вы можете использовать autowrap для преобразования объекта sympy в вызываемую функцию.
Вам нужно использовать eval для запуска eq как кода, а не обрабатывать его как строку.
eq = "x**2" func = lambda x: eval(eq) func(2) # outputs: # 4
Попробуйте asteval или Numberxpr , чтобы найти более безопасные альтернативы eval () и Sympy.sympify (). Evalf ().
Я постоянно получал синтаксическую ошибку для следующего и неустанно пытался выяснить, почему:
E="2x+1" F=lambda x: (x, eval(E)) # to get an xy coordinate
Но проблема сработала, как и ожидалось, когда я изменил E на:
E="2*x+1"
Ошибка новичка. :)