This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Das Mathematica Buch /  Höhere Mathematik in Mathematica /  Numerische Operationen mit Daten /

KurvenanpassungFouriertransformationen

3.8.2 Näherungsfunktionen und Interpolation

Bei vielen Arten numerischer Berechnungen erweist sich die Einführung von Näherungsfunktionen als nützlich. Näherungsfunktionen können als Verallgemeinerungen von gewöhnlichen reellen Gleitpunktzahlen angesehen werden. Während eine reelle Gleitpunktzahl mit einer gewissen Präzision den Wert einer einzelnen numerischen Größe angibt, liefert eine Näherungsfunktion mit einer gewissen Präzision den Wert einer Größe, die von einem oder mehreren Parametern abhängt. Mathematica verwendet Näherungsfunktionen zum Beispiel, um numerische Lösungen für Differentialgleichungen darzustellen, die mit NDSolve erhalten wurden (siehe Abschnitt 1.6.4).

Näherungsfunktionen werden in Mathematica als InterpolatingFunction-Objekte dargestellt. Diese Objekte funktionieren wie reine Funktionen, die in Abschnitt 2.2.5 behandelt wurden. Die Grundidee ist: Zu einem gegebenen bestimmten Argument findet ein InterpolatingFunction-Objekt den angenäherten Funktionswert, der zu diesem Argument gehört.

Das InterpolatingFunction-Objekt enthält eine Darstellung der angenäherten Funktion, die auf Interpolation basiert. In der Regel enthält es Werte und möglicherweise Ableitungen an einer Folge von Punkten. Es nimmt im Grunde an, daß die Funktion zwischen diesen Punkten glatt verläuft. Wenn Sie also nach dem Funktionswert zu einem bestimmten Argument fragen, kann das InterpolatingFunction-Objekt interpolieren, um eine Annäherung des gewünschten Wertes zu ermitteln.

Konstruktion von Näherungsfunktionen

Hier ist eine Wertetabelle der Sinusfunktion.

In[1]:= Table[{x, Sin[x]}, {x, 0, 2, 0.25}]

Out[1]=

Dies konstruiert eine Näherungsfunktion, die diese Werte repräsentiert.

In[2]:= sin = Interpolation[%]

Out[2]=

Die Näherungsfunktion reproduziert jeden Wert in der ursprünglichen Tabelle.

In[3]:= sin[0.25]

Out[3]=

Mit ihr erhalten Sie auch angenäherte Werte an anderen Punkten.

In[4]:= sin[0.3]

Out[4]=

In diesem Fall ist die Interpolation eine recht gute Näherung an die „wahre" Sinusfunktion.

In[5]:= Sin[0.3]

Out[5]=

Mit Näherungsfunktionen kann genauso wie mit allen anderen Mathematica-Funktionen gearbeitet werden. Von Näherungsfunktionen lassen sich Diagramme erstellen, oder man kann numerische Operationen damit durchführen, sie also integrieren oder ihre Nullstellen suchen.

Wenn Sie ein nicht-numerisches Argument angeben, wird die Näherungsfunktion in symbolischer Form belassen.

In[6]:= sin[x]

Out[6]=

Hier ist ein numerisches Integral der Näherungsfunktion.

In[7]:= NIntegrate[sin[x]^2, {x, 0, Pi/2}]

Out[7]=

Hier ist dasselbe numerische Integral für die eigentliche Sinusfunktion.

In[8]:= NIntegrate[Sin[x]^2, {x, 0, Pi/2}]

Out[8]=

Ein Diagramm der Näherungsfunktion ist von dem der eigentlichen Sinusfunktion im Grunde nicht zu unterscheiden.

In[9]:= Plot[sin[x], {x, 0, 2}]

Out[9]=

Wenn Sie eine Näherungsfunktion ableiten, wird Mathematica die Ableitung durch eine andere Näherungsfunktion darstellen.

Dies ermittelt die Ableitung der angenäherten Sinusfunktion und evaluiert sie in .

In[10]:= sin'[Pi/6]

Out[10]=

Das Ergebnis ist ungefähr gleich dem exakten Wert.

In[11]:= N[Cos[Pi/6]]

Out[11]=

InterpolatingFunction-Objekte enthalten die gesamte Information, die Mathematica über Näherungsfunktionen benötigt. Im Mathematica-Standardausgabeformat wird jedoch nur jener Teil, der den Definitionsbereich des InterpolationFunction-Objektes angibt, explizit gedruckt. Die Listen der eigentlichen Parameter des InterpolatingFunction-Objektes werden nur symbolisch angedeutet.

Im Standardausgabeformat wird explizit nur der Definitionsbereich des InterpolatingFunction-Objektes gedruckt.

In[12]:= sin

Out[12]=

Wenn Sie für einen Wert des Argumentes außerhalb des Definitionsbereiches evaluieren, druckt Mathematica eine Warnung und ermittelt das Ergebnis dann mit Extrapolation.

In[13]:= sin[3]

Out[13]=

Je mehr Information über die Funktion, die approximiert werden soll, angegeben wird, desto besser kann die von Mathematica konstruierte Approximation sein. Sie können zum Beispiel nicht nur die Funktionswerte für eine Punktfolge spezifizieren, sondern auch Ableitungen.

Konstruktion von Näherungsfunktionen mit spezifizierten Ableitungen

Interpolation paßt zwischen den angegebenen Punkten Polynomkurven an. Mit der Option InterpolationOrder kann der Grad dieser Polynome angegeben werden. Die Voreinstellung ist InterpolationOrder -> 3, die kubische Kurven ergibt.

Dies erstellt eine Wertetabelle der Kosinusfunktion.

In[14]:= tab = Table[{x, Cos[x]}, {x, 0, 6}] ;

Dies erzeugt eine Näherungsfunktion mittels linearer Interpolation zwischen den Tabellenwerten.

In[15]:= Interpolation[tab, InterpolationOrder -> 1]

Out[15]=

Die Näherungsfunktion besteht aus einem Satz Geradensegmente.

In[16]:= Plot[%[x], {x, 0, 6}]

Out[16]=

Mit der Voreinstellung InterpolationOrder -> 3 werden kubische Kurven verwendet, und die Funktion sieht glatt aus.

In[17]:= Plot[Evaluate[Interpolation[tab]][x], {x, 0, 6}]

Out[17]=

Wird die Einstellung von InterpolationOrder erhöht, so führt dies in der Regel zu glatteren Näherungsfunktionen. Wird der Einstellwert jedoch zu sehr erhöht, so kann es zu unechtem Hin- und Herschwanken kommen.

Interpolation mehrdimensionaler Daten-Arrays

Dies interpoliert ein Werte-Array auf ganzzahligen Rasterpunkten.

In[18]:= ListInterpolation[
Table[1.5/(x^2 + y^3), {x, 10}, {y, 15}]]

Out[18]=

Hier ist der Wert an einer bestimmten Position.

In[19]:= %[6.5, 7.2]

Out[19]=

Hier ist ein anderes Werte-Array.

In[20]:= tab = Table[1.5/(x^2 + y^3),
{x, 5.5, 7.2, .2}, {y, 2.3, 8.9, .1}] ;

Zur Interpolation dieses Arrays müssen Sie Mathematica explizit den abgedeckten Definitionsbereich mitteilen.

In[21]:= ListInterpolation[tab, {{5.5, 7.2}, {2.3, 8.9}}]

Out[21]=

ListInterpolation funktioniert mit Arrays jeder Dimension, und es produziert in jedem Fall ein InterpolatingFunction-Objekt, das die geeignete Anzahl Argumente akzeptiert.

Hier wird ein dreidimensionales Array interpoliert.

In[22]:= ListInterpolation[
Array[#1^2 + #2^2 - #3^2 &, {10, 10, 10}]] ;

Das sich ergebende InterpolatingFunction-Objekt akzeptiert drei Argumente.

In[23]:= %[3.4, 7.8, 2.6]

Out[23]=

Mathematica kann nicht nur rein numerische Näherungsfunktionen bearbeiten, sondern auch solche, die symbolische Parameter enthalten.

Dies erzeugt eine InterpolatingFunction, die von den Parametern a und b abhängt.

In[24]:= sfun = ListInterpolation[{1 + a, 2, 3, 4 + b, 5}]

Out[24]=

Dies zeigt, wie der interpolierte Wert im Punkt 2.2 von den Parametern abhängt.

In[25]:= sfun[2.2] // Simplify

Out[25]=

Mit der für InterpolationOrder verwendeten Voreinstellung hängt der Wert an diesem Punkt nicht mehr von a ab.

In[26]:= sfun[3.8] // Simplify

Out[26]=

Bei der Arbeit mit Näherungsfunktionen erhält man am Ende häufig komplizierte Kombinationen von InterpolatingFunction-Objekten. Mit FunctionInterpolation kann Mathematica immer angewiesen werden, ein einzelnes InterpolatingFunction-Objekt zu erzeugen, das für einen bestimmten Definitionsbereich gilt.

Hiermit wird ein neues InterpolatingFunction-Objekt erzeugt, das im Definitionsbereich 0 bis 1 gilt.

In[27]:= FunctionInterpolation[x + sin[x^2], {x, 0, 1}]

Out[27]=

Dies erzeugt ein verschachteltes InterpolatingFunction-Objekt.

In[28]:= ListInterpolation[{3, 4, 5, sin[a], 6}]

Out[28]=

Dies produziert ein rein zweidimensionales InterpolatingFunction-Objekt.

In[29]:= FunctionInterpolation[a^2 + %[x], {x, 1, 3}, {a, 0, 1.5}]

Out[29]=

Konstruktion von Näherungsfunktionen durch Evaluierung von Ausdrücken

KurvenanpassungFouriertransformationen