En una sola aplicación, es bastante probable que solo necesite un pequeño subconjunto de todos los extremos posibles de la función hipergeométrica generalizada. Es una función muy general, después de todo. Teniendo una idea sobre el rango de y de los parámetros permitiría dar consejos más específicos.zunyo, byo
En general, el método estándar, suponiendo que , es utilizar la serie de potencia definitoria cuandoes pequeño. Si , es mejor cambiar a una expansión asintótica cuandoes grande, ya sea porque la serie Taylor converge muy lentamente y / o porque se vuelve demasiado imprecisa debido a una cancelación catastrófica. El mejor límite entre estos algoritmos depende de los parámetros y los requisitos de precisión.p ≤ q+ 1El | zEl |p < q+ 1El | zEl |
Para la serie asintótica está dada por http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/ Parece bastante horrible, pero si su son fijos, puede calcular números valores para los coeficientes por adelantado. Las fórmulas generales se encuentran en el DLMF: http://dlmf.nist.gov/16.11 (Tenga en cuenta que se requiere cierto cuidado para seleccionar los cortes de rama correctos).1F2un1, b1, b2
Si hay un rango en el que ni la serie Taylor ni la serie asintótica funcionan lo suficientemente bien, las "expansiones exponencialmente mejoradas" podrían ser útiles. Otra posibilidad que vale la pena mencionar es que simplemente puede conectar la ecuación diferencial hipergeométrica en un solucionador de ODE de uso general. Esto debería funcionar bastante bien, especialmente si solo necesita 4-5 dígitos. Esto se puede usar para hacer una continuación analítica de una pequeña (donde la serie de potencia funciona bien) a una más grande, o al revés de un valor obtenido a través de una serie asintótica (es posible que deba hacer un poco más de trabajo para obtener todo el derivados necesarios como valores iniciales).z
Si necesita funciones con en todo el plano complejo, entonces las fórmulas de transformación se pueden utilizar para asignar el exterior del disco de la unidad al interior. Algún algoritmo de aceleración de convergencia u otro método, como la integración numérica del ODE, debe usarse cerca del círculo unitario. Si el radio es la convergencia es cero, por lo que si la función que desea evaluar está dada por una serie tan divergente, es posible que deba aplicar una transformación de Borel (numérica o simbólicamente) para reducirla a una serie convergente.p = q+ 11 / zp > q+ 1
Para una implementación completa, también hay otros problemas a considerar (por ejemplo, tratar con parámetros que son extremadamente grandes o muy cercanos a enteros negativos). Para parámetros suficientemente malos, será muy difícil obtener valores precisos con doble precisión, sin importar lo que haga, por lo que podría ser necesaria una aritmética de precisión arbitraria.
Debo señalar que he escrito una implementación numérica casi completa de la función hipergeométrica generalizada para la biblioteca mpmath (actualmente faltan series asintóticas para funciones superiores a ), lo que podría ser útil para estudiar o ejecutar pruebas (suponiendo que ya no es lo suficientemente rápido para sus propósitos).2F3