Implementazione open source di approssimazione razionale a una funzione


15

Sto cercando un'implementazione open source (qualsiasi di Python, C, C ++, Fortran va bene) di approssimazione razionale a una funzione. Qualcosa lungo l'articolo [1]. Gli do una funzione e mi restituisce due polinomi, il cui rapporto è l'approssimazione sull'intervallo dato e l'errore oscilla con la stessa ampiezza ed è un'approssimazione ottimale, o vicino ad esso.

Ecco cosa ho trovato:

  • Sembra che Chebfun possa farlo, ma non ho accesso a Matlab *.

  • Esiste un semplice programma nella sezione 5-13 "Approssimazione di Chebyshev razionale" in Ricette numeriche (NR).

  • Mathematica ha EconomizedRationalApproximation e MiniMaxApproximation

Mi chiedevo se c'è qualcosa di più nuovo (forse meglio testato) del codice NR.

La mia applicazione è che ho una serie di funzioni speciali, circa 10, che vengono fornite come serie ipergeometriche o una formula con annullamenti numerici e desidero disporre di una funzione di valutazione solida, rapida e accurata, che viene chiamata in l'anello più interno del calcolo di due elementi della matrice di particelle nei calcoli di Hartree Fock. Ho messo un semplice esempio di una funzione che funziona per me in [2]. Come puoi vedere, ho calcolato con SymPy sia una formula diretta, sia una serie attorno a x = 0. Funziona in qualche modo, ma l'accuratezza non è eccezionale, circa x = 1 si perde circa la metà delle cifre significative (ma per x = 0.1 e x = 1e5 è preciso a quasi tutte le cifre significative). Sto cercando una migliore approssimazione.

[1] Deun, J., & Trefethen, LN (2011). Una solida implementazione del metodo Carathéodory-Fejér per l'approssimazione razionale. Matematica numerica BIT, 51 (4), 1039-1050. doi: 10.1007 / s10543-011-0331-7 ( e-print di giugno 2010 )

[2] https://gist.github.com/3831580

(*) Né sul sito Web di Chebfun, che mi dà 404, ma Pedro ha suggerito che deve essere il problema del mio fornitore.

Risposte:



10

Fare le migliori approssimazioni razionali una tantum può spesso essere realizzato da iterazioni "manuali" dell'algoritmo di Remez : interpolare un'approssimazione razionale con errori di segno alternati (relativi o assoluti) in un'ipotesi iniziale per punti di interpolazione, individuare uno (o più) punti in cui l'errore reale supera quello dei punti di interpolazione e pivot (sostituendo uno o più dei punti ipotizzati per questi, in modo da preservare gli errori di segno alternato). È un buon modo per comprendere la teoria da zero. Quando l'accuratezza richiesta è modesta, trovo che un'implementazione del foglio di calcolo mi aiuti a farmi strada attraverso i calcoli e ad adattare i problemi con il taglia e incolla.

y=1/X1X2inserisci qui la descrizione dell'immagine

Se abbassiamo la linea retta della metà della distanza nel punto di "errore massimo", avremo tre punti "equi-oscillatori" di errore assoluto contando i due punti finali e questo punto critico all'interno. Quindi una migliore approssimazione polinomiale lineare a una funzione convessa liscia può essere trovata quasi mediante ispezione.

Il software Chebfun stesso è open source ( licenza in stile BSD ) dalla v4.0. Non sono sicuro del motivo per cui i collegamenti al loro sito potrebbero aver restituito un errore 404 in quel momento, ma ora sono alla v5.2.1. (Hanno anche un repository GitHub .) Il progetto Chebfun mira a qualcosa di più delle migliori approssimazioni razionali, con il concetto centrale di essere una sintassi simile a un vettore Matlab per funzioni (univariate reali) su un intervallo.

Per completare il cerchio sarebbe necessario farlo funzionare sotto Octave piuttosto che Matlab. A questo proposito è stato avviato un thread di manutentori di Ottava nel 2010. Un documento del 2012 di manutentori / autori di Chebfun suggerisce che alcuni sforzi sono stati fatti per la compatibilità di Octave dalla loro parte.

Guardando la pagina dei progetti relativi a Chebfun suggerisce che, poiché il software Chebfun è open source, potrebbe essere possibile eseguire questa porta o utilizzare uno dei pacchetti open source elencati lì, come Olivier Verdier pychebfun, un Python Chebyshev Functions progetto ospitato presso GitHub.


1
Questo link sul sito Web di Chebfun ha la documentazione su come fare approssimazioni razionali usando esso: chebfun.org/docs/guide/guide04.html
Ondřej Čertík,
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.