Ing Mathematik: Approximation und Interpolation
Interpolation
BearbeitenGegeben seien z.B. Messwerte (Stützpunkte). Diese sollen durch eine Funktion (Interpolante, Interpolierende, inter = zwischen, polire = glätten, schleifen) abgebildet werden.
Zu diesem Zweck gibt es eine Reihe von Methoden. Einige davon sollen nun besprochen werden.
Siehe auch Interpolation (Mathematik), Knorrenschild: Seite78ff, Burg, Haf, Wille, Meister: 393ff
Interpolation durch Polynome
BearbeitenExistenz und Eindeutigkeit: Seinen paarweise verschiedene Stützpunkte gegeben. Dann gibt es genau ein Polynom vom Grad maximal , das die Gleichungen erfüllt. Dieses Polynom existiert und ist eindeutig bestimmt.
- n=1: linare Interpolation
- n=2: quadratische Interpolation
- n=3: kubische Interpolation
- etc.
seien die unbekannten Koeffizienten des Interpolationspolynoms, die Stützstellen und die Stützwerte.
Die Matrix in obiger Formel wird auch Vandermonde-Matrix genannt.
Das Problem mittels linearem Gleichungssystem lösen zu wollen. wäre aber unnötig aufwendig (das Problem ist auch schlecht konditioniert). Es gibt effizientere Verfahren, denen wir uns nun widmen wollen.
Siehe auch Polynominterpolation, Vandermonde-Matrix
Lineare Interpolation zwischen zwei Punkten
BearbeitenVorerst wollen wir aber noch ein einfaches Beispiel durchexerzieren. Gegeben seien zwei Stützpunkte. Damit ist das Interpolationspolynom vom Grad 1 (linear, eine Gerade).
Die Gleichungssystem mit der Vandermonde-Matrix ist
Dieses lineare Gleichungssystem lässt sich einfach lösen (z.B. mit dem Gauß-Algorithmus, der cramerschen Regel). Es ergibt sich
und .
.
Das Problem lässt sich aber auch einfach geometrisch lösen.
Aus der Ähnlichkeit der Dreiecke ergibt sich:
.
Und damit wieder die mit der Vandermonde-Matrix hergeleitete Formel: .
Interpolationsformel von Lagrange
Bearbeiten
mit . Dabei ist das Kronecker-Delta . Damit entspricht die Matrix der Einheitsmatrix.
Lösung des Interpolationsproblems:
.
Beispiel:
Gegeben sind die Stützpunkte gemäß folgendem Bild:
Gesucht ist das Interpolationspolynom.
Wie zu erwarten, ist das Interpolationspolynom vom Grad 2 (quadratisch), da drei Stützpunkte vorgegeben sind.
Auch dieses Verfahren ist für den praktischen Einsatz zu aufwändig.
Baryzentrische Interpolationsformel
Bearbeitenfür ,
Baryzentrische Gewichte:
Siehe auch Polynominterpolation#Baryzentrische_Interpolationsformel
Diese Methode ist deutlich effizienter als die Verwendung der lagrangeschen Interpolationsformel. Auch die SciPy-Bibliothek stellt eine entsprechende Funktion barycentric_interpolate
zur Verfügung. Mit dieser ist folgender Python-Code erstellt:
import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import barycentric_interpolate x_mess = (1., 2., 3., 4., 5.) y_mess = (1., 1., 1., 1., 2.) x = np.linspace(min(x_mess), max(x_mess), num=100) y = barycentric_interpolate(x_mess, y_mess, x) plt.plot(x, y, label="baryzentrische Interpolation") plt.plot(x_mess, y_mess, "x", label="Messwerte") plt.legend() plt.show()
Ausgabe:
Newtonsche Interpolationsformel
BearbeitenGegeben sind wieder Stützpunkte .
Newton-Interpolationsformel:
Gleichungssystem:
Es werden nun die dividierten Differenzen berechnet. Diese lassen sich mit einem Dreiecksschema (Neville-Schema) übersichtlich darstellen:
Mit .
Beispiel: Es soll wieder das Interpolationspolynom durch die 3 Stützpunkte gelegt werden.
Mit der Newton-Interpolationsformel ergibt sich wiederum
Mit dem Horner-Schema lässt sich das Interpolationspolynom auswerten (siehe Horner-Schema).
Python-Code zum Horner-Schema:
import numpy as np def horner(a, x0): f = 0 n = np.size(a) for i in np.arange(0, n): f = f*x0 + a[i] return f a = np.array([1/2, -3/2, 2]) h = horner(a, 2.5) print(h)
Ausgabe:
1.375
Siehe auch Polynominterpolation#Newtonscher_Algorithmus, Knorrenschild: Seite 81ff, Burg, Haf, Wille, Meister: Seite: 401ff
Neville-Aitken-Schema
BearbeitenOft interessiert das Interpolationspolynom selbst nicht. Man will nur den Interpolationswert an einer bestimmten Stelle bestimmen. Das kann mit dem Neville-Aitken-Schema effizient gemacht werden.
Hier soll das Verfahren von Neville-Aitken an Hand eines rudimentären Python-Programms dargestellt werden:
import numpy as np x = (1., 2., 3.) # Stützstellen y = (1., 1., 2.) # Stützwerte xinter = 2.5 # Auswertung an der Stelle xinter n = 3 p = np.zeros((n,n)) for i in np.arange(0, n): p[i,0] = y[i] for k in np.arange(1, n): for i in np.arange(0, n-k): p[i,k] = p[i+1,k-1] + (x[i+k]-xinter) / (x[i+k]-x[i]) * (p[i,k-1] - p[i+1,k-1]) print("f(", xinter, ") = ", p[0,n-1])
Ausgabe:
f( 2.5 ) = 1.375
Siehe auch Polynominterpolation#Algorithmus_von_Neville-Aitken, Burg, Haf, Wille, Meister: Seite 401ff, Knorrenschild: Seite 84f
Sonstiges
BearbeitenInterpolationspolynome höherer Ordnung können deutliche Überschwinger aufweisen. Knorrenschild zeigt auf Seite: 88f seines Buches diese Problematik anhand eines Beispiel auf. Aus diesem Grunde ist auch die Extrapolation außerhalb des Stützstellenintervalls kaum möglich. Genaueres siehe auch Polynominterpolation#Runges_Phänomen.
Splines
Bearbeiten-
Isaac Jacob Schoenberg (rumänisch-amerikanischer Mathematiker, 1903-1990)]]
-
Carl-Wilhelm Reinhold de Boor (deutsch-amerikanischer Mathematiker, geb. 1937)
-
Spline mit 8 Knoten
Der Name Spline leitet sich vom englischen Begriff "Spline" für Straklatte ab und kommt aus dem Schiffbau.
Nunmehr wird nicht mehr nur ein Interpolationspolynom durch die Stützpunkte gelegt, sondern es wird das Stützintervall in mehrere Teilintervalle aufgeteilt. In jeweils einem Teilintervall lassen sich dann Interpolationspolynome niedrigeren Grades verwenden (typischerweise kubische Polynome).
Lineare Splines
Bearbeiten
Diese Formel folgt direkt aus derjenigen für die lineare Interpolation zwischen 2 Punkten.
Python-Code (rudimentär):
import numpy as np import matplotlib.pyplot as plt x = (1., 2., 3., 4.) # Stützstellen y = (1., 2., 1., 4.) # Stützwerte xinter = 3.5 # Auswertertung an der Stelle xinter n = 3 yinter = y[n-1] + (xinter - x[n-1]) / (x[n]-x[n-1]) * (y[n]-y[n-1]) print("f(", xinter, ") = ", yinter) plt.plot(x,y) plt.plot(xinter, yinter, "o") plt.grid() plt.show()
Konsolenausgabe:
f( 3.5 ) = 2.5
Kubische Splines
BearbeitenPython-Code:
from scipy.interpolate import CubicSpline import matplotlib.pyplot as plt import numpy as np x = (1., 2., 3., 4.) # Stützstellen y = (1., 2., 1., 4.) # Stützwerte xinter = 2.5 spl = CubicSpline(x, y) s = spl(xinter) print(s) xspline = np.arange(1., 4.1, 0.1) yspline = spl(xspline) plt.plot(x, y, "x", label="Stützpunkte") plt.plot(xspline, yspline, label="kubischer Spline") plt.plot(xinter, s, "o", label="Interpolationspunkt") plt.legend() plt.grid() plt.show()
Konsolenausgabe:
1.375
Siehe auch [1]
Für weitere Details siehe auch Spline, Spline-Interpolation, Hanke-Bourgeois: Seite 355ff, Burg, Haf, Wille, Meister: Seite 410ff, Knorrenschild: Seite 89ff.
Approximation
BearbeitenBernstein-Polynome
BearbeitenSei eine stetige Funktion auf dem Intervall .
Bernsteinpolynome vom Grad n: mit .
Approximation einer Kurve durch Bernstein-Polynome:
Siehe auch Bernsteinpolynom, Burg, Haf, Wille, Meister: Seite 387ff
Padé-Approximation
BearbeitenPadé-Approximation:
.
Beispiel: Gegeben seien 5 Stützstellen der Funktion .
Wir wählen also und haben 5 Gleichungen für die 5 unbekannten Koeffizienten . Wir formen die Gleichung um.
Für erhalten wir . Somit haben wir noch 4 Unbekannte und 4 Gleichungen.
Dies ist ein lineares Gleichungssystem, das auch so gelöst werden kann.
Siehe auch Padé-Approximation, Thuselt, Gennrich: Seite 276ff.
Gedruckte Werke (auszugsweise)
Bearbeiten- Burg, Haf, Wille, Meister: Höhere Mathematik für Ingenieure, Band I: Analysis. 9. Auflage, Vieweg+Teubner, 2011, ISBN 978-3-8348-1218-6
- Hanke-Bourgeois: Grundlagen der Numerischen Mathematik und des Wissenschaftlichen Rechnens. 3. Aufl., Vieweg+Teubner, 2009, ISBN 978-3-8348-0708-3
- Knorrenschild: Numerische Mathematik, Eine beispielorientierte Einführung. 6. Aufl., Hanser, 2017, ISBN 978-3-446-45161-2
- Thuselt, Gennrich: Praktische Mathematik mit MATLAB, Scilab und Octave. Springer, 2013, ISBN 978-3-642-25824-4