Estou curioso para saber quais são os bons algoritmos numéricos para avaliação da função hipergeométrica generalizada (ou série), definida como
Em geral, essa série não necessariamente convergirá muito rapidamente (ou de modo algum), portanto, resumir termos um por um parece menos do que o ideal. Existe algum método alternativo que funciona melhor? Para ser específico, estou procurando algo que dê 4 ou 5 dígitos de precisão com um número razoável de cálculos.
Os casos mais comuns que eu costumo ver utilizados são e , mas no projeto particular eu estou trabalhando, eu tenho uma necessidade de . Obviamente um algoritmo geral para qualquer e é o ideal, mas eu vou levar o que eu posso começar.
special-functions
David Z
fonte
fonte
Respostas:
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.z umaEu, 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 1F2 uma1 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
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 a2F3
fonte
A referência canônica para todas as funções especiais é Abramowicz e Stegun. Este é um livro que existe há cerca de meio século em breve e, se houver algo que você não consiga encontrar, dê uma olhada na "segunda edição atualizada", que na verdade é um site organizado pelo Instituto Nacional de Padrões (NIST). ) Não tenho o URL exato, mas não deve ser muito difícil de encontrar.
fonte