Это не то, для чего предназначен SymPy. «Sym» в SymPy означает «символический», а не «числовой». Вы хотите числовые вычисления. Используйте SciPy quad
и некоторые процедуры поиска корней, такие как root
или fsolve
. Например:
import numpy as np
from scipy import integrate, optimize
target = 0.221745186045595
f = lambda u: np.sqrt(np.sin(u)**2 + 1)
x = optimize.root(lambda b: integrate.quad(f, 0, b)[0] - target, 0).x
возвращает x
как array([0.22])
.
Разбор пользовательского ввода
Для преобразования пользовательского ввода в вызываемую функцию, такую как f
выше, SymPy может использовать lambdify
. Пример:
from sympy import sympify, lambdify
f_string = "sqrt(sin(u)**2+1)" # user input
f_expr = sympify(f_string)
sym = next(iter(f_expr.free_symbols))
f = lambdify(sym, f_expr, "numpy")
Здесь f_expr
- это выражение SymPy, проанализированное из строки, sym
- это символ SymPy (аргумент функции), а f
- это функция Python, созданная lambdify
. Это f
затем используется, как указано выше.