A.1.9 Einfache Integration

Es ist eine beliebige Funktion $f(x)$ zu integrieren, indem ein gegebener Bereich $[a,b]$ der Funktion in eine Anzahl von Streifen zerlegt wird, und die Flächen aller Streifen aufsummiert werden (sinnvollerweise kann man als Höhe jeden Streifens den Funktionswert in der Mitte des Streifens verwenden).

Abbildung: Einfache Integration durch Näherung mit Rechtecken
\includegraphics[width=14cm]{uebungen/einfache_integration.eps}

Mit $\Delta x$ für die Streifenbreite und $n$ für die Anzahl der Streifen ist eine Näherung des Integrals damit:

\begin{displaymath}
\int_{b}^{b} f(x) \approx \sum_{i=1}^{n} f(x_{i}) \times \Delta x
\end{displaymath} (A.1)

Dabei soll ein vernünftiger Weg umgesetzt werden, die zu integrierende Funktion von der Berechnung des Integrals zu trennen. Das heißt, die zu integrierende Funktion soll möglichst leicht austauschbar sein, ohne das Integrieren an sich ändern zu müssen.

Hinweis Java: Man kann eine abstrakte Basisklasse definieren, in der alles zum Integrieren Nötige implementiert wird; nur eine Methode darin steht für die zu integrierende Funktion und ist nur deklariert. In einer davon abgeleiteten Klasse wird dann genau diese Methode überschrieben mit der tatsächlich zu integrierenden Funktion. Um jetzt andere Funktionen zu integrieren, bildet man von der abstrakten Basisklasse weitere Ableitungen, in denen diese Methode entsprechend implementiert wird.

Alternativ könnte man ein sogenanntes Funktionales Objekt verwenden. Das ist ein Objekt einer Klasse, die typischerweise keine (oder nur wenig) Daten enthält, sondern vielmehr nur eine Methode (oder bei Bedarf auch mehrere) beinhaltet. Die Klasse, in der die eigentlich Integration implementiert ist, bekommt über den Konstruktor oder spätestens zum Start der Rechnung ein solches Objekt übergeben, und holt sich über die darin definierte Methode die Funktionswerte.

Hinweis C/C++: Die integrierende Funktion/Methode kann eine Adresse einer anderen Funktion als Parameter übergeben bekommen, die wiederum die zu integrierende Funktion repräsentiert, ähnlich wie die Funktion bsearch() (zur binären Suche, siehe C/C++-Version (verallgemeinert) und [KW-C]) aus der Standardbibliothek eine Vergleichsfunktion übergeben bekommt. Beim Aufruf der Funktion zum Integrieren übergibt man dann einfach die zu integrierende Funktion als Parameter.
In C++ könnte man alternativ ebenfalls Funktionsobjekte verwenden, die aber etwas umständlicher zu handhaben sind (und auch etwas mehr Rechenzeit kosten); siehe dazu auch [KW-C++].

(Anmerkung: Um wirklich sinnvoll zu integrieren, ist dieses einfache Verfahren sicher nicht optimal. Bessere Verfahren finden sich beispielsweise in [Muellges/R.].)

www.wachtler.de