В одном приложении весьма вероятно, что вам понадобится лишь небольшое подмножество всех возможных крайностей обобщенной гипергеометрической функции. В конце концов, это очень общая функция. Имея представление о диапазоне и параметрах позволит дать более конкретный совет.a i , b izai,bi
В общем, стандартный метод, предполагающий , конечно, использует определяющий степенной ряд, когдамаленький. Если , то лучше перейти к асимптотическому разложению, когдавелика либо потому, что ряд Тейлора сходится слишком медленно, и / или потому, что он становится слишком неточным из-за катастрофической отмены. Наилучшее ограничение между этими алгоритмами зависит от параметров и требований к точности.| z | р < q + 1 | z |p≤q+1|z|p<q+1|z|
Для асимптотический ряд задается http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/ Это выглядит довольно ужасно, но если ваши исправлены, вы можете вычислить числовое значение Значения для коэффициентов заранее. Общие формулы можно найти в DLMF: http://dlmf.nist.gov/16.11 (Обратите внимание, что для выбора правильных срезов ответвления требуется некоторая осторожность.)a 1 , b 1 , b 21F2a1,b1,b2
Если существует диапазон, в котором ни ряд Тейлора, ни асимптотический ряд не работают достаточно хорошо, «экспоненциально улучшенные разложения» могут быть полезны. Другая возможность, о которой стоит упомянуть, это то, что вы можете просто подключить гипергеометрическое дифференциальное уравнение к универсальному решателю ODE. Это должно работать довольно хорошо, особенно если вам нужно только 4-5 цифр. Это может быть использовано для аналитического продолжения от малого (где степенной ряд работает хорошо) к большему или наоборот от значения, полученного с помощью асимптотического ряда (вам может потребоваться немного больше работы, чтобы получить все производные нужны в качестве начальных значений).z
Если вам нужны функции с на всей комплексной плоскости, то формулы преобразования можно использовать для сопоставления внешнего вида единичного диска с внутренним. Некоторые алгоритмы ускорения сходимости или другие методы, такие как численное интегрирование ОДУ, должны использоваться рядом с единичной окружностью. Если радиус сходимости равен нулю, поэтому, если функция, которую вы хотите оценить, задается таким расходящимся рядом, вам может потребоваться применить преобразование Бореля (числовое или символическое), чтобы свести его к сходящемуся ряду.1 / z p > q + 1p=q+11/zp>q+1
Для полной реализации необходимо рассмотреть и другие вопросы (например, работа с параметрами, которые чрезвычайно велики или очень близки к отрицательным целым числам). Для достаточно плохих параметров будет очень трудно получить точные значения с двойной точностью, независимо от того, что вы делаете, поэтому может потребоваться арифметика с произвольной точностью.
Я должен отметить, что я написал почти полную численную реализацию обобщенной гипергеометрической функции для библиотеки mpmath (в настоящее время в ней отсутствуют асимптотические ряды для функций выше, чем ), что может быть полезно для изучения или запуска тестов (при условии, что это не достаточно быстро уже для ваших целей).2F3