¿Cuáles son los algoritmos eficientes y precisos para la evaluación de funciones hipergeométricas?


16

Tengo curiosidad por saber qué buenos algoritmos numéricos existen para la evaluación de la función hipergeométrica generalizada (o serie), definida como

pagFq(un1,...,unpag;si1,...,siq;z)=k=0 0(un1)k(unpag)k(si1)k(siq)kzkk!

En general, esta serie no necesariamente va a converger muy rápido (o en absoluto), por lo que resumir los términos uno por uno parece menos que ideal. ¿Hay algún método alternativo que funcione mejor? Para ser específicos, estoy buscando algo que dé 4 o 5 dígitos de precisión con un número razonable de cálculos.

Los casos más comunes que generalmente veo utilizados son y , pero en el proyecto particular en el que estoy trabajando, necesito . Obviamente, un algoritmo general para cualquier y es ideal, pero tomaré lo que pueda obtener.pag=1,q=1pag=2,q=1pag=1,q=2pagq


Si su caso no está cubierto en el Manual de Abramowitz y Stegun ( people.math.sfu.ca/~cbm/aands/subj.htm ), que no está, básicamente está condenado a resolverlo por su cuenta, yo ' tengo miedo ...
Jaime

Respuestas:


15

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,siyo

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.pagq+1El |zEl |pag<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,si1,si2

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.pag=q+11/ /zpag>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


¡Excelente! Desafortunadamente, no puedo ser más específico sobre los valores de los parámetros porque la función aparece en muchos lugares con varios valores. Definitivamente estaré interesado en usar y / o mirar su implementación en mpmath en algún momento.
David Z

1
La respuesta de Fredrik es correcta. Solo señalaría que terminé usando una aproximación racional (de Mathematica) para valores especiales de los coeficientes "a" y "b", porque es precisa para todas las "z" reales (divido el eje real en intervalos y usó una aproximación racional diferente en cada uno) y muy rápido. Usé mpmath para verificar la precisión de mi implementación de doble precisión en Fortran.
Ondřej Čertík

2

La referencia canónica para todas las funciones especiales es Abramowicz y Stegun. Este es un libro que se publicará hace aproximadamente medio siglo y si hay algo que no puede encontrar en él, eche un vistazo a la "segunda edición actualizada", que de hecho es un sitio web organizado por el Instituto Nacional de Normas (NIST) ) No tengo la URL exacta, pero no debería ser muy difícil de encontrar.


2
Ahora se llama la "Biblioteca digital de funciones matemáticas"; Las funciones hipergeométricas son el tema del Capítulo 15 .
Christian Clason

1
2F11F2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.