Ich bin auf der Suche nach einer Open-Source-Implementierung (Python, C, C ++ oder Fortran) für die rationale Annäherung an eine Funktion. Etwas im Artikel [1]. Ich gebe ihm eine Funktion und er gibt mir zwei Polynome zurück, deren Verhältnis die Annäherung an das gegebene Intervall ist und deren Fehler mit der gleichen Amplitude schwingt und eine optimale Annäherung ist oder dieser nahekommt.
Folgendes habe ich gefunden:
Es sieht so aus, als ob chebfun das kann, aber ich habe keinen Zugang zu Matlab *.
Es gibt ein einfaches Programm in Abschnitt 5-13 "Rationale Chebyshev-Approximation" in Numerical Recipes (NR).
Mathematica verfügt über EconomizedRationalApproximation und MiniMaxApproximation
Ich habe mich gefragt, ob es etwas Neues gibt (möglicherweise besser getestet) als den NR-Code.
Meine Anwendung ist, dass ich eine Reihe von Sonderfunktionen habe, ungefähr 10, die entweder als hypergeometrische Reihe angegeben sind, oder eine Formel, die numerische Auslöschungen aufweist, und ich möchte eine robuste, schnelle und genaue Auswertungsfunktion, die aufgerufen wird Die innerste Schleife zum Berechnen zweier Partikelmatrixelemente in Hartree Fock-Berechnungen. Ich habe ein einfaches Beispiel für eine Funktion angegeben, die für mich bei [2] funktioniert. Wie Sie sehen, wird entweder eine direkte Formel oder eine Reihe um x = 0 verwendet, die ich mit SymPy berechnet habe. Es funktioniert irgendwie, aber die Genauigkeit ist nicht großartig, bei x = 1 geht ungefähr die Hälfte der signifikanten Stellen verloren (aber für x = 0.1 und x = 1e5 ist es auf fast alle signifikanten Stellen genau). Ich suche eine bessere Annäherung.
[1] Deun, J. & Trefethen, LN (2011). Eine robuste Implementierung der Carathéodory-Fejér-Methode zur rationalen Approximation. BIT Numerical Mathematics, 51 (4), 1039–1050. doi: 10.1007 / s10543-011-0331-7 ( e-print vom Juni 2010 )
[2] https://gist.github.com/3831580
(*) Auch nicht auf der chebfun-Website, die mir 404 gibt, aber Pedro schlug vor, dass dies mein Providerproblem sein muss.
quelle
Einmalige rationale Näherungen können oft durch "manuelle" Iterationen des Remez-Algorithmus erreicht werden : Interpolieren Sie eine rationale Näherung mit (relativen oder absoluten) Vorzeichenfehlern, wobei Sie einen (oder mehrere) Punkte ermitteln, an denen Der tatsächliche Fehler übersteigt den der Interpolationspunkte und des Pivots (Vertauschen eines oder mehrerer der erratenen Punkte für diese auf eine Weise, die Wechselzeichenfehler bewahrt). Es ist eine gute Möglichkeit, die Theorie von Grund auf zu verstehen. Wenn die erforderliche Genauigkeit gering ist, kann ich mich anhand einer Tabellenkalkulationsimplementierung durch die Berechnungen orientieren und Probleme durch Ausschneiden und Einfügen anpassen.
Wenn wir die Gerade am Punkt des "maximalen Fehlers" um die Hälfte absenken, erhalten wir drei "gleichschwingende" absolute Fehlerpunkte, wobei die beiden Endpunkte und dieser kritische Punkt im Inneren gezählt werden. Somit kann eine beste lineare Polynomapproximation zu einer glatten konvexen Funktion fast durch Inspektion gefunden werden.
Die Chebfun-Software selbst ist seit v4.0 Open Source ( BSD-Lizenz ). Sie sind sich nicht sicher, warum Links zu ihrer Site zu diesem Zeitpunkt möglicherweise einen 404-Fehler verursacht haben, haben aber jetzt die Version 5.2.1. (Sie haben auch ein GitHub-Repository .) Das Chebfun-Projekt zielt auf mehr als die besten rationalen Annäherungen ab, wobei das zentrale Konzept eine Matlab-Vektor-ähnliche Syntax für (univariate reelle) Funktionen in einem Intervall ist.
Um den Kreis zu schließen, müsste es unter Octave und nicht unter Matlab funktionieren . Es gab einen Octave-Maintainer-Thread zu diesem Thema, der im Jahr 2010 gestartet wurde. Eine Veröffentlichung von Chebfun-Maintainern / Autoren aus dem Jahr 2012 legt nahe, dass einige Anstrengungen unternommen wurden, um die Octave-Kompatibilität von ihrer Seite aus zu gewährleisten.
Ein Blick auf die Seite mit den Chebfun-Projekten legt nahe, dass es aufgrund der Open Source-Software von Chebfun möglich ist, diesen Port zu verwenden oder eines der dort aufgelisteten Open Source-Pakete zu verwenden, z. B. Olivier Verdiers
pychebfun
, a Python Chebyshev Functions Projekt bei GitHub gehostet.quelle