Em uma única aplicação, é bem provável que você precise apenas de um pequeno subconjunto de todos os extremos possíveis da função hipergeométrica generalizada. Afinal, é uma função muito geral. Ter uma idéia sobre o intervalo de e dos parâmetros a i , b i permitiria dar conselhos mais específicos.zumaEu, bEu
Em geral, o método padrão, assumindo que , é obviamente o uso da série de potências definidora quando | z | é pequeno. Se p < q + 1 , é melhor alternar para uma expansão assintótica quando | z | é grande, porque a série Taylor converge muito lentamente e / ou se torna imprecisa devido ao cancelamento catastrófico. O melhor ponto de corte entre esses algoritmos depende dos parâmetros e dos requisitos de precisão.p ≤ q+ 1| z|p < q+ 1| z|
Para a série assintótica é dada porhttp://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/Parece um pouco horrível, mas se o seu a 1 , b 1 , b 2 estiver fixo, você poderá calcular valores numéricos para os coeficientes com antecedência. Fórmulas gerais são encontradas no DLMF:http://dlmf.nist.gov/16.11(Observe que são necessários alguns cuidados para selecionar os cortes de ramificação corretos).1 1F2uma1 1, b1 1, b2
Se houver um intervalo em que nem a série Taylor nem a série assintótica funcionem suficientemente bem, "expansões exponencialmente melhoradas" podem ser úteis. Outra possibilidade que vale a pena mencionar é que você pode simplesmente conectar a equação diferencial hipergeométrica a um solucionador de ODE de uso geral. Isso deve funcionar muito bem, especialmente se você precisar de apenas 4-5 dígitos. Isso pode ser usado para fazer a continuação analítica de um pequeno (onde a série de potência funciona bem) para um maior, ou ao contrário de um valor obtido por meio de uma série assintótica (você pode precisar trabalhar um pouco mais para obter todo o derivados necessários como valores iniciais).z
p = q+ 11 / zp > q+ 1
Para uma implementação completa, há outros problemas a serem considerados (por exemplo, lidar com parâmetros extremamente grandes ou muito próximos de números inteiros negativos). Para parâmetros suficientemente ruins, será muito difícil obter valores precisos com precisão dupla, não importa o que você faça; portanto, pode ser necessária uma aritmética de precisão arbitrária.
Devo observar que escrevi uma implementação numérica quase completa da função hipergeométrica generalizada para a biblioteca mpmath (atualmente está faltando séries assintóticas para funções superiores a 2F3