scipy.interpolate.BSpline.

from_power_basis#

classmethod BSpline.from_power_basis(pp, bc_type='not-a-knot')[Quelle]#

Konstruiere ein Polynom in der B-Spline-Basis aus einem stückweisen Polynom in der Potenzbasis.

Derzeit werden nur CubicSpline-Instanzen akzeptiert.

Parameter:
ppCubicSpline

Ein stückweises Polynom in der Potenzbasis, wie es von CubicSpline erstellt wurde.

bc_typeString, optional

Randbedingungstyp wie in CubicSpline: einer von not-a-knot, natural, clamped oder periodic. Notwendig für die Konstruktion einer Instanz der Klasse BSpline. Standard ist not-a-knot.

Rückgabe:
bBSpline-Objekt

Eine neue Instanz, die das ursprüngliche Polynom in der B-Spline-Basis darstellt.

Hinweise

Hinzugefügt in Version 1.8.0.

Akzeptiert vorerst nur CubicSpline-Instanzen.

Der Algorithmus folgt der Ableitung der Marsden-Identität [1]: Jeder der Koeffizienten der Spline-Interpolationsfunktion in der B-Spline-Basis wird wie folgt berechnet:

\[c_j = \sum_{m=0}^{k} \frac{(k-m)!}{k!} c_{m,i} (-1)^{k-m} D^m p_{j,k}(x_i)\]

\(c_{m, i}\) - ein Koeffizient von CubicSpline, \(D^m p_{j, k}(x_i)\) - eine m-te Ableitung eines dualen Polynoms in \(x_i\).

k ist derzeit immer gleich 3.

Die ersten n - 2 Koeffizienten werden in \(x_i = x_j\) berechnet, z.B.

\[c_1 = \sum_{m=0}^{k} \frac{(k-1)!}{k!} c_{m,1} D^m p_{j,3}(x_1)\]

Die letzten nod + 2 Koeffizienten werden in x[-2] berechnet, nod - Anzahl der Ableitungen an den Enden.

Betrachten Sie zum Beispiel \(x = [0, 1, 2, 3, 4]\), \(y = [1, 1, 1, 1, 1]\) und bc_type = natural.

Die Koeffizienten von CubicSpline in der Potenzbasis

\([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]\)

Der Knotenvektor: \(t = [0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4]\)

In diesem Fall

\[c_j = \frac{0!}{k!} c_{3, i} k! = c_{3, i} = 1,~j = 0, ..., 6\]

Referenzen

[1]

Tom Lyche und Knut Morken, Spline Methods, 2005, Abschnitt 3.1.2