Python: символическое использование hyp2f1 с sympy

В Python я хочу использовать гипергеометрическую функцию hyp2f1, сохраняя хотя бы один символьный аргумент. Однако есть TypeError

не может создать mpf из d

где d - (последний) аргумент гипергеометрической функции.

Кто-то задал похожий вопрос

sympy и mpmath выдают ошибку TypeError: Невозможно создать mpf при использовании функции erf () в программе solutionset ()

столкнувшись с той же проблемой с функцией ошибки erf. Предлагаемое решение заключалось в использовании библиотеки mpmath вместо библиотеки sympy, но mpmath нельзя использовать, сохраняя символические аргументы.

Я также попытался импортировать mpmath и sympy вместе, как было предложено в документации sympy:

from sympy.mpmath import *

https://docs.sympy.org/0.7.6/modules/mpmath/functions/hypergeometric.html#common-hypergeometric-series

Но это не принято, поскольку на выходе получается:

ModuleNotFoundError: нет модуля с именем `sympy.mpmath '

Мой код

from sympy import *

d = Symbol('d')

hyp2f1(1,1,1,d)

Я надеялся получить упрощение до 1 / (1 -d) или, по крайней мере, надеялся, что Python сможет «хранить» hyp2f1 (1,1,1, d) для символических манипуляций.

Я получаю ошибку

TypeError: невозможно создать mpf из d

Суть в том, что с импортированным sympy Python не может использовать hyp2f1 с символьными аргументами.


person Vinsanity    schedule 20.05.2019    source источник
comment
Вы связались с документацией 0.7.6. Текущая версия sympy - 1.4. docs.sympy.org/latest/install.html#mpmath   -  person hpaulj    schedule 20.05.2019
comment
mpmath не является символьным математическим пакетом, с sympy или без него. И не было так через 0,7,6 дня.   -  person hpaulj    schedule 20.05.2019
comment
Решение в stackoverflow.com/questions/37759214/ должен был использовать sympy.erf вместо mpmath.erf.   -  person hpaulj    schedule 20.05.2019


Ответы (1)


Используйте функцию SymPy hyper:

In [4]: from sympy import hyper, simplify, Symbol                                                                                 

In [5]: d = Symbol('d')                                                                                                           

In [6]: f = hyper([1, 1], [1], d)                                                                                                 

In [7]: f                                                                                                                         
Out[7]: 
 ┌─  ⎛1, 1 │  ⎞
 ├─  ⎜     │ d⎟
2╵ 1 ⎝ 1   │  ⎠

In [8]: simplify(f)                                                                                                               
Out[8]: 
  1  
─────
1 - d
person Oscar Benjamin    schedule 27.05.2019