Zum Inhalt springen

Ing Mathematik: Approximation und Interpolation

Aus Wikibooks


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.

Splines

[Bearbeiten]

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