Quais são os algoritmos eficientes e precisos para avaliação das funções hipergeométricas?

16

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

pFq(uma1 1,...,umap;b1 1,...,bq;z)=k=0 0(uma1 1)k(umap)k(b1 1)k(bq)kzkk!

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.p=1 1,q=1 1p=2,q=1 1p=1 1,q=2pq

David Z
fonte
Se o seu caso não estiver coberto no Manual de Abramowitz e Stegun ( people.math.sfu.ca/~cbm/aands/subj.htm ), o que não é, você está basicamente fadado a descobrir por conta própria, eu ' m medo ...
Jaime

Respostas:

15

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.pq+1 1|z|p<q+1 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+1 11 1/zp>q+1 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

Fredrik Johansson
fonte
Excelente! Infelizmente, não posso realmente ser mais específico sobre os valores dos parâmetros porque a função aparece em muitos lugares com vários valores. Definitivamente, estarei interessado em usar e / ou analisar sua implementação no mpmath em algum momento.
David Z
11
A resposta de Fredrik está correta. Gostaria apenas de salientar que acabei usando uma aproximação racional (do Mathematica) para valores especiais dos coeficientes "a" e "b", porque é preciso para todo o "z" real (dividi o eixo real em intervalos e usou uma aproximação racional diferente em cada uma) e muito rápido. Usei o mpmath para verificar a precisão da minha implementação de precisão dupla no Fortran.
Ondřej Čertík 11/12/12
2

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.

Wolfgang Bangerth
fonte
2
Agora é chamada de "Biblioteca Digital de Funções Matemáticas"; as funções hipergeométricas são objeto do capítulo 15 .
Christian Clason
11
2F1 11 1F2