Quels sont les algorithmes efficaces et précis pour l'évaluation des fonctions hypergéométriques?

16

Je suis curieux de savoir quels sont les bons algorithmes numériques pour évaluer la fonction hypergéométrique généralisée (ou série), définie comme

pFq(a1,,ap;b1,,bq;z)=k=0(a1)k(ap)k(b1)k(bq)kzkk!

En général, cette série ne va pas nécessairement converger très rapidement (ou pas du tout), donc résumer les termes un par un semble moins qu'idéal. Existe-t-il une autre méthode qui fonctionne mieux? Pour être précis, je recherche quelque chose qui donnera 4 ou 5 chiffres de précision avec un nombre raisonnable de calculs.

Les cas les plus courants que je vois habituellement utilisés sont et p = 2 , q = 1 , mais dans le projet particulier sur lequel je travaille, j'ai besoin de p = 1 , q = 2 . Évidemment, un algorithme général pour tout p et q est idéal, mais je vais prendre ce que je peux obtenir.p=1,q=1p=2,q=1p=1,q=2pq

David Z
la source
Si votre cas n'est pas couvert dans le manuel d'Abramowitz et Stegun ( people.math.sfu.ca/~cbm/aands/subj.htm ), ce qui n'est pas le cas, vous êtes essentiellement condamné à le découvrir par vous-même, je '' m peur ...
Jaime

Réponses:

15

Dans une seule application, il est plutôt probable que vous n'ayez besoin que d'un petit sous-ensemble de tous les extrêmes possibles de la fonction hypergéométrique généralisée. C'est une fonction très générale, après tout. Avoir une idée de la plage de et des paramètres a i , b i permettrait de donner des conseils plus spécifiques.zai,bi

En général, la méthode standard, en supposant que , consiste bien entendu à utiliser la série de puissances définie lorsque | z | est petite. Si p < q + 1 , il est préférable de passer à une expansion asymptotique lorsque | z | est grande, soit parce que la série Taylor converge trop lentement et / ou parce qu'elle devient trop imprécise en raison d'une annulation catastrophique. La meilleure coupure entre ces algorithmes dépend des paramètres et des exigences de précision.pq+1|z|p<q+1|z|

Pour la série asymptotique est donnée parhttp://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/Elle a l'air plutôt horrible, mais si vos a 1 , b 1 , b 2 sont fixes, vous pouvez calculer à l'avance les valeurs numériques des coefficients. Les formules générales se trouvent dans le DLMF:http://dlmf.nist.gov/16.11(Notez qu'un certain soin est requis pour sélectionner les coupes de branche correctes.)1F2a1,b1,b2

S'il existe une plage dans laquelle ni la série Taylor ni la série asymptotique ne fonctionnent assez bien, des «extensions exponentiellement améliorées» pourraient être utiles. Une autre possibilité à noter est que vous pouvez simplement connecter l'équation différentielle hypergéométrique à un solveur ODE à usage général. Cela devrait très bien fonctionner, surtout si vous n'avez besoin que de 4 à 5 chiffres. Cela peut être utilisé pour effectuer une continuation analytique d'un petit (où la série de puissance fonctionne bien) à un plus grand, ou à l'inverse d'une valeur obtenue via une série asymptotique (vous devrez peut-être faire un peu plus de travail pour obtenir tous les dérivés nécessaires comme valeurs initiales).z

Si vous avez besoin de fonctions avec sur tout le plan complexe, des formules de transformation 1 / z peuvent être utilisées pour mapper l'extérieur du disque unitaire à l'intérieur. Un algorithme d'accélération de convergence ou une autre méthode, comme l'intégration numérique de l'ODE, doit être utilisé à proximité du cercle unitaire. Si p > q + 1 le rayon est convergence est nul, donc si la fonction que vous souhaitez évaluer est donnée par une série aussi divergente, vous devrez peut-être appliquer une transformation de Borel (numériquement ou symboliquement) pour la réduire à une série convergente.p=q+11/zp>q+1

Pour une implémentation complète, il y a d'autres problèmes à considérer également (par exemple, traiter des paramètres qui sont extrêmement grands ou très proches d'entiers négatifs). Pour des paramètres suffisamment mauvais, il sera très difficile d'obtenir des valeurs précises avec une double précision, quoi que vous fassiez, donc une arithmétique de précision arbitraire peut être nécessaire.

Je dois noter que j'ai écrit une implémentation numérique presque complète de la fonction hypergéométrique généralisée pour la bibliothèque mpmath (il manque actuellement une série asymptotique pour les fonctions supérieures à 2F3

Fredrik Johansson
la source
Excellent! Malheureusement, je ne peux pas vraiment être plus précis sur les valeurs des paramètres, car la fonction apparaît à de nombreux endroits avec différentes valeurs. Je serai certainement intéressé à utiliser et / ou à regarder votre implémentation dans mpmath à un moment donné.
David Z
1
La réponse de Fredrik est correcte. Je voudrais seulement souligner que j'ai fini par utiliser une approximation rationnelle (de Mathematica) pour les valeurs spéciales des coefficients "a" et "b", car elle est précise pour tous les "z" réels (je divise l'axe réel en intervalles et utilisé une approximation rationnelle différente sur chacun) et très rapide. J'ai utilisé mpmath pour vérifier l'exactitude de mon implémentation en double précision dans Fortran.
Ondřej Čertík
2

La référence canonique pour toutes les fonctions spéciales est Abramowicz et Stegun. Ceci est un livre qui existe depuis environ un demi-siècle bientôt et s'il y a quelque chose que vous ne pouvez pas y trouver, jetez un œil à la "deuxième édition mise à jour" qui est en fait un site Web organisé par le National Institute of Standards (NIST) ). Je n'ai pas l'URL exacte mais cela ne devrait pas être très difficile à trouver.

Wolfgang Bangerth
la source
2
On l'appelle maintenant la "Bibliothèque numérique des fonctions mathématiques"; les fonctions hypergéométriques font l'objet du chapitre 15 .
Christian Clason
1
2F11F2