Chebyshev-Polynome sind, wie in einer anderen Antwort erwähnt, die Polynome, bei denen der größte Unterschied zwischen der Funktion und dem Polynom so gering wie möglich ist. Das ist ein ausgezeichneter Start.
In einigen Fällen ist der maximale Fehler nicht das, woran Sie interessiert sind, sondern der maximale relative Fehler. Zum Beispiel sollte für die Sinusfunktion der Fehler in der Nähe von x = 0 viel kleiner sein als für größere Werte; Sie möchten einen kleinen relativen Fehler. Sie würden also das Chebyshev-Polynom für sin x / x berechnen und dieses Polynom mit x multiplizieren.
Als nächstes müssen Sie herausfinden, wie das Polynom ausgewertet wird. Sie möchten es so auswerten, dass die Zwischenwerte klein sind und daher Rundungsfehler klein sind. Andernfalls können die Rundungsfehler viel größer werden als die Fehler im Polynom. Und bei Funktionen wie der Sinusfunktion ist es möglich, dass das Ergebnis, das Sie für sin x berechnen, größer ist als das Ergebnis für sin y, selbst wenn x <y ist, wenn Sie nachlässig sind. Daher ist eine sorgfältige Auswahl der Berechnungsreihenfolge und die Berechnung der Obergrenzen für den Rundungsfehler erforderlich.
Zum Beispiel sin x = x - x ^ 3/6 + x ^ 5/120 - x ^ 7/5040 ... Wenn Sie naiv sin x = x * (1 - x ^ 2/6 + x ^ 4 / berechnen) 120 - x ^ 6/5040 ...), dann nimmt diese Funktion in Klammern ab, und es kommt vor , dass wenn y die nächstgrößere Zahl zu x ist, sin y manchmal kleiner als sin x ist. Berechnen Sie stattdessen sin x = x - x ^ 3 * (1/6 - x ^ 2/120 + x ^ 4/5040 ...), wo dies nicht passieren kann.
Bei der Berechnung von Chebyshev-Polynomen müssen Sie beispielsweise die Koeffizienten normalerweise auf doppelte Genauigkeit runden. Während ein Chebyshev-Polynom optimal ist, ist das Chebyshev-Polynom mit auf doppelte Genauigkeit gerundeten Koeffizienten nicht das optimale Polynom mit Koeffizienten mit doppelter Genauigkeit!
Zum Beispiel für sin (x), wo Sie Koeffizienten für x, x ^ 3, x ^ 5, x ^ 7 usw. benötigen, gehen Sie wie folgt vor: Berechnen Sie die beste Näherung von sin x mit einem Polynom (ax + bx ^ 3 +) cx ^ 5 + dx ^ 7) mit höherer als doppelter Genauigkeit, dann runde a auf doppelte Genauigkeit, was A ergibt. Der Unterschied zwischen a und A wäre ziemlich groß. Berechnen Sie nun die beste Näherung von (sin x - Ax) mit einem Polynom (bx ^ 3 + cx ^ 5 + dx ^ 7). Sie erhalten unterschiedliche Koeffizienten, weil sie sich an die Differenz zwischen a und A anpassen. Runde b mit doppelter Genauigkeit B. Dann approximieren Sie (sin x - Ax - Bx ^ 3) mit einem Polynom cx ^ 5 + dx ^ 7 und so weiter. Sie erhalten ein Polynom, das fast so gut ist wie das ursprüngliche Chebyshev-Polynom, aber viel besser als Chebyshev, das auf doppelte Genauigkeit gerundet ist.
Als nächstes sollten Sie die Rundungsfehler bei der Wahl des Polynoms berücksichtigen. Sie haben ein Polynom mit minimalem Fehler im Polynom gefunden, das Rundungsfehler ignoriert, aber Sie möchten Polynom plus Rundungsfehler optimieren. Sobald Sie das Chebyshev-Polynom haben, können Sie die Grenzen für den Rundungsfehler berechnen. Angenommen, f (x) ist Ihre Funktion, P (x) ist das Polynom und E (x) ist der Rundungsfehler. Sie möchten | nicht optimieren f (x) - P (x) | möchten Sie optimieren | f (x) - P (x) +/- E (x) |. Sie erhalten ein etwas anderes Polynom, das versucht, die Polynomfehler niedrig zu halten, wenn der Rundungsfehler groß ist, und die Polynomfehler ein wenig lockert, wenn der Rundungsfehler klein ist.
All dies führt leicht zu Rundungsfehlern von höchstens dem 0,55-fachen des letzten Bits, wobei +, -, *, / Rundungsfehler von höchstens dem 0,50-fachen des letzten Bits aufweisen.