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
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.
la source
Réponses:
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.z uneje, bje
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.p ≤ q+ 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.)1F2 une1, 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+ 1 1 / z p > 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
la source
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.
la source