Ich muss die Funktionen berechnen: und g(x)=sinax
Ich muss die Funktionen berechnen: und g(x)=sinax
Antworten:
Wenn Sie eine Polynomerweiterung (a la l'Hopital-Regel) für Enumerator und Nenner durchführen, erhalten Sie eine rationale Funktion, die für kleines die Funktion gut approximiert.
Als Beispiel:
Mein Ansatz ist es, Software wie SymPy wie folgt zu verwenden:
from sympy import var, sin, S
var("x a")
g = sin(a*x)/sin(x)
gseries = g.series(x, 0, 10).removeO()
s = {x: S(1)/100, a: S(1)/2}
print gseries.subs(s).n(30)
print g.subs(s).n(30)
print "%.17f" % g.subs({x: 1./100, a: 1./2})
welche druckt:
0.500006250065104828565736800905
0.500006250065104828565736868886
0.50000625006510480
Die erste Zahl ist eine Taylorreihenerweiterung, die bei 10 Termen abgeschnitten ist, die zweite Zahl ist die genaue Bewertung. SymPy verwendet exakte Arithmetik. In diesem Beispiel habe ich x = 1/100 und a = 1/2 verwendet, aber damit können Sie spielen. Schließlich bewerte ich es mit 30 Dezimalstellen, damit man die Zahlen leicht vergleichen kann. Die dritte Zahl ist eine Bewertung mit doppelter Genauigkeit unter Verwendung der Python-Floats.
In diesem Fall scheint es mir keine Stornierung zu geben. Bei anderen Ausdrücken ist die direkte Bewertung mit doppelter Genauigkeit möglicherweise nicht genau genug, und die Serienerweiterung ist eine Möglichkeit, sie zu bewerten. Die andere ist die rationale Annäherung, die ich MiniMaxApproximation
in der Vergangenheit in Mathematica mit großem Erfolg verwendet habe.