Интеграция Python с использованием как scipy и sympy - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу иметь пользовательскую функцию Python, которая:

  1. Принимает математическое выражение f(x), границы интеграла x1,x2 и желаемый допуск tol
  2. Использует sympy.integrate(y, x), чтобы проверить, есть ли у него аналитическое / символическое решение, если оно есть, то возвращает результат, используя sympy.integrate(y, (x,x1,x2).evalf())
  3. Если у него нет аналитического решения из 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?

Буду признателен, если вы сообщите мне, если это возможно и как это сделать.

...