Quali sono gli algoritmi efficienti e precisi per la valutazione delle funzioni ipergeometriche?


16

Sono curioso di sapere quali buoni algoritmi numerici esistono per la valutazione della funzione (o serie) ipergeometrica generalizzata , definita come

pFq(un'1,...,un'p;B1,...,Bq;z)=ΣK=0(un'1)K(un'p)K(B1)K(Bq)KzKK!

In generale, questa serie non converrà necessariamente molto velocemente (o per niente), quindi riassumere i termini uno per uno sembra meno che ideale. Esiste un metodo alternativo che funziona meglio? Per essere precisi, sto cercando qualcosa che dia una precisione di 4 o 5 cifre con un numero ragionevole di calcoli.

I casi più comuni che di solito vedo usati sono e , ma nel particolare progetto su cui sto lavorando, ho bisogno di . Ovviamente un algoritmo generale per qualsiasi e è l'ideale, ma mi prendo quello che posso ottenere.p = 2 , q = 1 p = 1 , q = 2 p qp=1,q=1p=2,q=1p=1,q=2pq


Se il tuo caso non è trattato nel Manuale di Abramowitz e Stegun ( people.math.sfu.ca/~cbm/aands/subj.htm ), cosa che non è, sei sostanzialmente condannato a capirlo da solo, io '
Jaime,

Risposte:


15

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 |pq+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


Eccellente! Sfortunatamente non posso davvero essere più specifico sui valori dei parametri perché la funzione si apre in molti punti con vari valori. Sarò sicuramente interessato a utilizzare e / o esaminare la tua implementazione in mpmath ad un certo punto.
David Z,

1
La risposta di Fredrik è corretta. Vorrei solo sottolineare che ho finito per usare un'approssimazione razionale (da Mathematica) per valori speciali dei coefficienti "a" e "b", perché è preciso per tutti gli "z" reali (ho diviso l'asse reale in intervalli e usato una diversa approssimazione razionale su ciascuno) e molto veloce. Ho usato mpmath per verificare l'accuratezza della mia implementazione a doppia precisione in Fortran.
Ondřej Čertík,

2

Il riferimento canonico per tutte le funzioni speciali è Abramowicz e Stegun. Questo è un libro che è in circolazione da circa mezzo secolo presto e se c'è qualcosa che non riesci a trovare in esso, dai un'occhiata alla "seconda edizione aggiornata" che in realtà è un sito web organizzato dal National Institute of Standards (NIST ). Non ho l'URL esatto ma non dovrebbe essere molto difficile da trovare.


2
Ora è chiamata la "Biblioteca digitale di funzioni matematiche"; le funzioni ipergeometriche sono oggetto del capitolo 15 .
Christian Clason,

1
2F11F2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.