Implémentation open source de l'approximation rationnelle d'une fonction


15

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.

Réponses:



10

Faire les meilleures approximations rationnelles ponctuelles peut souvent être accompli par des itérations "manuelles" de l' algorithme de Remez : interpoler une approximation rationnelle avec des erreurs de signe alternées (relatives ou absolues) lors d'une estimation initiale des points d'interpolation, localiser un (ou plusieurs) points où l'erreur réelle dépasse celle des points d'interpolation et du pivot (échange d'un ou plusieurs des points devinés pour ceux-ci, d'une manière qui préserve les erreurs de signe alternées). C'est un bon moyen de comprendre la théorie de fond en comble. Lorsque la précision requise est modeste, je trouve qu'une implémentation de feuille de calcul m'aide à me débrouiller dans les calculs et à adapter les problèmes grâce au copier-coller.

y=1/X1X2entrez la description de l'image ici

Si nous abaissons la droite de la moitié de la distance au point "d'erreur maximale", nous aurons alors trois points d'erreur absolue "équi-oscillatoires" comptant les deux points d'extrémité et ce point critique à l'intérieur. Ainsi, une meilleure approximation polynomiale linéaire d'une fonction convexe lisse peut être trouvée presque par inspection.

Le logiciel Chebfun lui-même est open source ( licence de style BSD ) depuis la v4.0. Je ne sais pas pourquoi les liens vers leur site peuvent avoir renvoyé une erreur 404 à ce moment-là, mais ils sont maintenant à la version 5.2.1. (Ils ont également un référentiel GitHub .) Le projet Chebfun vise plus que les meilleures approximations rationnelles, le concept central étant une syntaxe de type vecteur Matlab pour les fonctions (réelles univariées) sur un intervalle.

Pour terminer le cercle, il faudrait le faire fonctionner sous Octave plutôt que sous Matlab. Il y avait un fil conducteur Octave à ce sujet commencé en 2010. Un article de 2012 par les mainteneurs / auteurs de Chebfun suggère qu'un certain effort a été investi dans la compatibilité Octave de leur côté.

L' examen de la page des projets liés à Chebfun suggère que, comme le logiciel Chebfun est open source, il pourrait être possible de faire ce port, ou d'utiliser l'un des packages open source répertoriés ici, comme Olivier Verdier pychebfun, a Python Chebyshev Functions projet hébergé chez GitHub.


1
Ce lien sur le site Web de Chebfun contient de la documentation pour faire des approximations rationnelles en l'utilisant: chebfun.org/docs/guide/guide04.html
Ondřej Čertík
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.