Je recherche une implémentation open source (n'importe laquelle de Python, C, C ++, Fortran est très bien) d'approximation rationnelle d'une fonction. Quelque chose le long de l'article [1]. Je lui donne une fonction et ça me rend deux polynômes, dont le rapport est l'approximation sur l'intervalle donné et l'erreur oscille avec la même amplitude et c'est une approximation optimale, ou proche de celle-ci.
Voici ce que j'ai trouvé:
Il semble que chebfun puisse le faire, mais je n'ai pas accès à Matlab *.
Il existe un programme simple dans la section 5-13 "Approximation rationnelle de Chebyshev" dans Recettes numériques (NR).
Mathematica a EconomizedRationalApproximation et MiniMaxApproximation
Je me demandais s'il y avait quelque chose de plus récent (peut-être mieux testé) que le code NR.
Mon application est que j'ai un ensemble de fonctions spéciales, environ 10, qui sont données soit sous forme de séries hypergéométriques, soit d'une formule qui a des annulations numériques, et je veux avoir une fonction d'évaluation robuste, rapide et précise, qui est appelée dans la boucle la plus interne du calcul de deux éléments de matrice de particules dans les calculs de Hartree Fock. J'ai mis un exemple simple d'une fonction qui fonctionne pour moi à [2]. Comme vous pouvez le voir, c'est soit en utilisant une formule directe, soit une série autour de x = 0, que j'ai calculée en utilisant SymPy. Cela fonctionne en quelque sorte, mais la précision n'est pas grande, environ x = 1 environ la moitié des chiffres significatifs sont perdus (mais pour x = 0,1 ainsi que x = 1e5, il est précis pour presque tous les chiffres significatifs). Je cherche une meilleure approximation.
[1] Deun, J. et Trefethen, LN (2011). Une implémentation robuste de la méthode Carathéodory-Fejér pour l'approximation rationnelle. BIT Numerical Mathematics, 51 (4), 1039–1050. doi: 10.1007 / s10543-011-0331-7 ( impression électronique de juin 2010 )
[2] https://gist.github.com/3831580
(*) Ni sur le site chebfun, qui me donne 404, mais Pedro a suggéré que cela devait être mon problème de fournisseur.