Я хочу иметь пользовательскую функцию Python, которая:
- Принимает математическое выражение
f(x)
, границы интеграла x1,x2
и желаемый допуск tol
- Использует
sympy.integrate(y, x)
, чтобы проверить, есть ли у него аналитическое / символическое решение, если оно есть, то возвращает результат, используя sympy.integrate(y, (x,x1,x2).evalf())
- Если у него нет аналитического решения из
sympy
, то для вычисления интеграла используются scipy.integrate.quad
или другие числовые функции .
Причина в том, что этот метод будет, вероятно, быстрее и точнее, поскольку большинство математических выражений, с которыми я работаю, имеют аналитические интегралы.
Но у меня есть некоторые проблемы
- прежде всего
scipy.integrate.quad
и sympy.integrate
две очень разные формы функций. Сципи принимает функции python def y(x): return f(x)
или lambda y=lambda x: f(x)
. Но sympy принимает выражения mathematica y=f(x)
, где x
обозначено sympy.Symbol('x')
. Мне нужно найти способ преобразовать симпатичное символическое математическое выражение в функцию python / lambda или наоборот.
- Моя вторая проблема заключается в том, что sympy не выдает никакой ошибки, если выражение не имеет аналитического интеграла. это просто печатает интеграл! (для этой проблемы я разместил другой вопрос здесь )
- И последнее, я не знаю, как контролировать толерантность у Симпи
evalf()
. Я думаю, что для scipy.integrate.quad
можно управлять допуском с помощью ввода epsabs
?
Буду признателен, если вы сообщите мне, если это возможно и как это сделать.