In una singola applicazione, è piuttosto probabile che sia necessario solo un piccolo sottoinsieme di tutti i possibili estremi della funzione ipergeometrica generalizzata. Dopotutto è una funzione molto generale. Avendo un'idea dell'intervallo di e dei parametri consentirebbe di fornire consigli più specifici.a i , b izun'io, bio
In generale, il metodo standard, supponendo , è ovviamente quello di usare le serie di potenze che definiscono quandoè piccolo. Se , è meglio passare a un'espansione asintotica quandoè grande, o perché la serie Taylor converge troppo lentamente e / o perché diventa troppo imprecisa a causa della cancellazione catastrofica. Il migliore taglio tra questi algoritmi dipende dai parametri e dai requisiti di precisione.| z | p < q + 1 | z |p ≤ q+ 1| z|p < q+ 1| z|
Per la serie asintotica è data da http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/ Sembra piuttosto orribile, ma se sono fissi, puoi calcolare numerico valori per i coefficienti in anticipo. Le formule generali si trovano nel DLMF: http://dlmf.nist.gov/16.11 (Notare che è necessario prestare attenzione per selezionare i tagli dei rami corretti.)a 1 , b 1 , b 21F2un'1, b1, b2
Se esiste un intervallo in cui né la serie Taylor né la serie asintotica funzionano abbastanza bene, "espansioni esponenzialmente migliorate" potrebbero essere utili. Un'altra possibilità degna di nota è che potresti semplicemente collegare l'equazione differenziale ipergeometrica in un solutore ODE generico. Questo dovrebbe funzionare abbastanza bene soprattutto se hai bisogno solo di 4-5 cifre. Questo può essere usato per fare la continuazione analitica da una piccola (dove la serie di potenze funziona bene) a una più grande, o al contrario da un valore ottenuto tramite una serie asintotica (potrebbe essere necessario fare un po 'più di lavoro per ottenere tutto il derivati necessari come valori iniziali).z
Se sono necessarie funzioni con sull'intero piano complesso , è possibile utilizzare le formule di trasformazione per mappare l'esterno del disco dell'unità all'interno. Alcuni algoritmi di accelerazione della convergenza o altri metodi, come l'integrazione numerica dell'ODE, devono essere usati vicino al cerchio unitario. Se il raggio è di convergenza pari a zero, quindi se la funzione che si desidera valutare è data da una serie così divergente, potrebbe essere necessario applicare una trasformazione di Borel (numericamente o simbolicamente) per ridurla a una serie convergente.1 / z p > q + 1p = q+ 11 / zp > q+ 1
Per un'implementazione completa, ci sono anche altri problemi da considerare (ad esempio, gestire parametri estremamente grandi o molto vicini a numeri interi negativi). Per parametri sufficientemente sbagliati, sarà molto difficile ottenere valori precisi con doppia precisione, qualunque cosa tu faccia, quindi potrebbe essere necessaria un'aritmetica di precisione arbitraria.
Dovrei notare che ho scritto un'implementazione numerica quasi completa della funzione ipergeometrica generalizzata per la libreria mpmath (al momento mancano serie asintotiche per funzioni superiori a ), che potrebbero essere utili per studiare o eseguire test contro (assumendolo non è già abbastanza veloce per i tuoi scopi).2F3