Kubischer Spline

Eine substantielle Verbesserung der Option “Linie glätten” (engl. “Smoothed line”), der ich mich immer noch widme, hängt an einer Modifikation der Definition der Steigung. Dass diese insbesondere an den Enden verbesserungswürdig ist, habe ich in Linie glätten 3 dargelegt. Die Straklatte stellt für mich dafür den Idealfall dar. Wenn man dies für eine Funktion erfüllen will, dann drängt sich der kubische Spline förmlich auf!
Bei meinen Recherchen traf ich auf Arndt Brünners Kubische Splines. Erklärung und Herleitung haben mich gefesselt! Der Rechner als Java-Applet lädt zum Spielen ein, wobei augenscheinlich deutlich wird, dass die Veränderung jedes Punktes logischerweise Auswirkungen auf den gesamten Spline hat. Der Einfluss ebbt allerdings mit der Entfernung deutlich ab. Es könnte also sehr wohl zielführend sein, “nur” die beiden unmittelbaren Nachbarpunkte zur Definition der Steigung heranzuziehen. Im Gegensatz zu Microsoft nehme man aber nicht den “simplen” Richtungsvektor durch diese beiden Punkte, sondern einen “viferen” kubischen Spline, der durch die 3 Punkte die simpelste Variante einer Straklatte darstellt.
Professor Brünner hat den natürlichen Spline umgesetzt, der in den Endpunkten die Krümmung = 0 aufweist, wobei er beliebige Eingaben der 2. Ableitung offeriert. Ich wollte aber auch Steigungen vorgeben können, was zum vollständigen Spline führt. Überdies wäre es für den periodischen Fall nötig, dass die Endpunkte gleiche 1. und 2. Ableitung aufweisen.
Die folgende Excel-Datei enthält die Berechnung eines kubischen Splines für bis zu max. 52 Knoten {x, S(x)}. Die Restriktion galt für Matrix-Funktionen (z. B. MINV) bis Version 2003. Wer mit 2007 ff. werkt, kann das einfache Prinzip relativ leicht erweitern: Die Steigungen S'(x) an den Knoten ergeben sich als Vektor zufolge Multiplikation einer invertierten tridiagonalen Matrix mit einem Vektor. Das Funktionieren der Matrix- und Vektor-Formel bedingt dabei, dass bezogene Werte und die Formeln selbst nicht in der 1. Zeile beginnen!
Neben diesen ausgeblendeten Spalten findet sich die Auswahl des Typs: natürlich, vollständig und periodisch. Je nach Typ können S'(x) oder S”(x) festgelegt werden. Die Wahl von “periodisch” führt zu gleichen 1. und 2. Ableitungen und damit zu identischer Steigungen und Krümmungen. Im Falle unsinnigerweise ungleicher Ordinaten der Endpunkte wird diese Wahl mittels Bedingter Formatierung durchgestrichen.
Die Anzahl der Zwischenpunkte kann ausgehend von 0 (deckungsgleich mit geglätteter Linie) so eingestellt werden, dass der durch eine benutzerdefinierte Funktion SPLINE(X_Werte; S_Werte; Ss_Werte; [n_ZW]) realisierte Verlauf “rund” wird. X_Werte (Abszisse) und S_Werte (Ordinate) sind die vorgegebenen Knoten, Ss_Werte die errechneten Steigungen und n_ZW (optional mit Default = 0) die Anzahl der Zwischenpunkte.
Darunter können S(x), S'(x) und S”(x) für einen beliebigen x-Werte abgefragt werden. Das Diagramm zeigt sehr schön den Unterschied zwischen Microsoft’scher Methode und kubischem Spline, insbesondere die gekünstelt wirkende Dämpfung durch das Glätten, von den hässlichen Enden gar nicht zu sprechen. Für erste Spielereien sind die Ordinaten Zufallszahlen, die mit F9 zum Leben erweckt werden können:

PS: Die beim Öffnen auftretende Fehlermeldung ist scheinbar unvermeidlich.