Для использования integrate
f
должен быть символом SymPy c функция, которая запрещает ваше конкретное использование int
. int(x)
, где x
- Symbol
, всегда будет приводить к ошибке типа, однако вы можете представить это символически, используя функцию floor
:
def f(x):
return sympy.exp(sympy.floor(x))
Однако использование floor
может привести к поражению некоторых из цель использования SymPy в первую очередь, потому что это, вероятно, предотвратит обнаружение решения аналити c, как демонстрирует следующий сеанс python:
>>> from sympy import *
>>> x = symbols("x")
>>> integrate(exp(floor(x)), (x, 0, 2)) # use of floor prevents evaluated result
Integral(exp(floor(x)), (x, 0, 2))
Хотя вы можете использовать метод evalf
для вычислить результат numeri c (который в конечном итоге выполняется mpmath):
>>> integrate(exp(floor(x)), (x, 0, 2)).evalf()
3.7
( возможно, этот результат предполагает, что sympy может лучше обработать этот интеграл? Wolfram Alpha вычисляет это как 1 + e = 3.71828...
поэтому я полагаю, что здесь тоже есть как минимум ошибка точности с плавающей запятой - см. комментарий re ceiling
)
В любом случае, я не знаю, считаете ли вы этот результат подходящим, учитывая версию f
без floor
:
>>> integrate(exp(x), (x, 0, 2))
-1 + exp(2)
>>> _.evalf()
6.38905609893065