3 Scilab |
Theoretische Grundlagen zur Interpolation |
Befehle splin() und interp() |
Ist eine Folge von Punkten mit streng monoton wachsenden
x-Werten gegeben (d.h. jeder x-Wert ist größer als
der vorangegangene), kann Scilab eine Kurveninterpolation
durchführen.
Dabei wird jedes Intervall zwischen 2 jeweils benachbarten Punkten
Pi und Pi+1 durch
ein Polynom dritten Grades
beschrieben.
Dieses Verfahren wird auch als "Stückweises Polynom" (engl:
piecewise polynomial, pp) bezeichnet.
Für n Punkte ergeben sich n-1 Intervalle, d.h.
n-1 Polynome. Da für jedes Polynom 4 Koeffizienten
ai, bi,
ci und di
verwendet werden, müssen insgesamt 4(n-1) Koeffizienten
bestimmt werden, hierzu werden 4(n-1) Bedingungen
(Gleichungen benötigt).
Die Koeffizienten müssen so gewählt werden, dass folgende Bedingungen erfüllt sind.
Dies ergibt bis jetzt 4n-6 Gleichungen. Die noch fehlenden zwei Gleichungen werden in Scilab durch den type-Parameter des splin()-Befehls ("not_a_knot", "natural", "clamped") bestimmt, siehe unten.
In Scilab wird für die Polynome die Hermite-Form verwendet. Es
werden nicht alle Polynom-Koeffizienten gespeichert, sondern die
Werte für die ersten Ableitungen in den zuvor gegebenen Punkten.
Daraus können die Polynomkoeffizienten zurückgewonnen werden.
Mit den Angaben "fast" bzw. "fast_periodic" für den
type-Parameter wird nicht das o.g. Gleichungssystem gelöst.
Stattdessen werden immer durch jeweils 3 benachbarte Punkte
Polynome zweiten Grades gelegt. Mit Hilfe des Polynomes wird der
Anstieg für den jeweils mittleren Punkt berechnet. Für "fast" wird
der Anstieg im Anfangs- bzw. Endpunkt mit Hilfe des ersten bzw.
letzten dieser quadratischen Polynome berechnet.
Mit
d = splin(x, y [, type [, der]]);
wird ein Spline berechnet. Dabei sind x und y zwei gleich große Vektoren mit den x- und y-Werten der Punkte. Beide Vektoren müssen mindestens zwei Elemente haben, jedes x-Element muss größer sein als das vorangegangene Element.
Mit dem Parameter type können Einstellungen zum Spline-Typ vorgenommen werden:
Name | Bedeutung |
---|---|
not_a_knot | Am zweiten und am vorletzten Punkt ist die dritte Ableitung des linken und rechten Polynoms gleich. Dies ist die Standardeinstellung. |
natural | Natural spline. Am Anfangs- und Endpunkt ist die zweite Ableitung 0. |
clamped | Das argument der enthält zwei Elemente: die erste Ableitung im Anfangspunkt und im Endpunkt. |
periodic | Erste und zweite Ableitung von Anfangs- und Endpunkt sind gleich. Voraussetzung für die Nutzung von periodic ist, dass auch der y-Wert von Anfangs- und Endpunkt gleich ist. |
monotone | Alle Intervalle zwischen zwei jeweils benachbarten Punkten sind monoton, d.h. lokale Extrema können nur an den gegebenen Punkten auftreten. |
fast | Schnelle Berechnung der Anstiege für
innere Punkte i, indem ein Polynom dritten Grades durch
Vorgängerpunkt, Punkt i und Nachfolger gelegt wird und der
Anstieg dieses Polynoms im Punkt i verwendet wird. Für Start- bzw. Endpunkt wird ein Polynom durch die ersten bzw. letzten drei Punkte gelegt. |
fast_periodic | Kombination von fast und periodic |
Die Scilab-Online-Hilfe empfiehlt clamped, wenn die erste
Ableitung in Anfangs- und Endpunkt gegeben ist, ansonsten
not_a_knot.
Natural Splines (natural) sollten nur verwendet werden, wenn
sicher ist, dass die zweite Ableitung der Kurve im Anfangs- und
Endpunkt 0 ist.
Mit
[yp [, ypabl1 [, ypabl2 [, ypabl3]]]] = interp(xp, x, y, d [, mode]);
können Werte für weitere Punkte xp berechnet werden,
sowohl Funkionswerte yp als auch erste, zweite und dritte
Ableitung (ypabl1, ypabl2 und ypabl3).
Dabei ist xp ein Vektor oder eine Matrix mit den
x-Werten, für die Berechnungen vorgenommen werden
sollen.
x und y sind die Vektoren mit den Daten für die
gegebenen Punkten, wie sie für splin() als Argumente
verwendet wurden, d ist der von splin() als Ergebnis
gelieferte Vektor mit den ersten Ableitungen.
Der Parameter mode gibt an, wie für x-Werte verfahren
wird, die außerhalb des gegebenen x-Vektors liegen:
Name | Bedeutung |
---|---|
by_zero | 0 |
by_nan | nicht definiert |
C0 | y-Startwert für alle x, die kleiner sind als der x-Startwert. y-Endwert für alle x, die größer sind als der x-Endwert |
natural | Das erste Polynom wird für alle x-Werte benutzt, die vor dem gegebenen x-Vektor liegen. Das letzte Polynom wird benutzt für alle x-Werte, die nach dem gegebenen x-Vektor liegen. |
linear | Vor und nach dem gegebenen x-Vektor wird die Kurve linear fortgeführt. |
Siehe auch Beispiel Permanentmagnet.