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.zuneje, 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.)1F2une1, 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