scipy.interpolate.

approximate_taylor_polynomial#

scipy.interpolate.approximate_taylor_polynomial(f, x, degree, scale, order=None)[Quelle]#

Schätzt das Taylor-Polynom von f an der Stelle x durch Polynomanpassung.

Parameter:
faufrufbar

Die Funktion, deren Taylor-Polynom gesucht wird. Sollte einen Vektor von x-Werten akzeptieren.

xSkalar

Der Punkt, an dem das Polynom ausgewertet werden soll.

degreeint

Der Grad des Taylor-Polynoms

scaleSkalar

Die Breite des Intervalls, das zur Auswertung des Taylor-Polynoms verwendet wird. Funktionswerte, die sich über diesen Bereich erstrecken, werden zur Anpassung des Polynoms verwendet. Muss sorgfältig gewählt werden.

orderint oder None, optional

Die Ordnung des Polynoms, das für die Anpassung verwendet wird; f wird order+1 Mal ausgewertet. Wenn None, wird degree verwendet.

Rückgabe:
ppoly1d-Instanz

Das Taylor-Polynom (verschoben zum Ursprung, so dass z.B. p(0)=f(x)).

Hinweise

Die geeignete Wahl von „scale“ ist ein Kompromiss; zu groß und die Funktion unterscheidet sich zu sehr von ihrem Taylor-Polynom, um ein gutes Ergebnis zu erzielen, zu klein und Rundungsfehler überwältigen die Terme höherer Ordnung. Der verwendete Algorithmus wird um Ordnung 30 herum auch unter idealen Umständen numerisch instabil.

Die Wahl von order etwas größer als degree kann die Terme höherer Ordnung verbessern.

Beispiele

Wir können Taylor-Approximationspolynome der Sinusfunktion mit verschiedenen Graden berechnen

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.interpolate import approximate_taylor_polynomial
>>> x = np.linspace(-10.0, 10.0, num=100)
>>> plt.plot(x, np.sin(x), label="sin curve")
>>> for degree in np.arange(1, 15, step=2):
...     sin_taylor = approximate_taylor_polynomial(np.sin, 0, degree, 1,
...                                                order=degree + 2)
...     plt.plot(x, sin_taylor(x), label=f"degree={degree}")
>>> plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left',
...            borderaxespad=0.0, shadow=True)
>>> plt.tight_layout()
>>> plt.axis([-10, 10, -10, 10])
>>> plt.show()
../../_images/scipy-interpolate-approximate_taylor_polynomial-1.png