Ing Mathematik: Approximation und Interpolation


Interpolation

Bearbeiten

Gegeben 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

Bearbeiten

Existenz 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

Bearbeiten

Vorerst 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
 
Joseph-Louis de Lagrange (italienisch-französischer Mathematiker, 1736-1813)

 

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

Bearbeiten

  fü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

Bearbeiten

Gegeben 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

Bearbeiten
 
Alexander Craig Aitken (neuseeländischer Mathematiker, 1895-1967)

Oft 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

Bearbeiten

Interpolationspolynome 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.

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()

Grafikausgabe:  

Konsolenausgabe:

f( 3.5 ) =  2.5

Kubische Splines

Bearbeiten

Python-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()

Grafikausgabe:  

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

Bearbeiten

Bernstein-Polynome

Bearbeiten
 
Sergei Natanowitsch Bernstein (russischer Mathematiker, 1880-1968)

Sei   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

Bearbeiten
 
Henri Eugène Padé (französischer Mathematiker, 1863-1953)

Padé-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