Angewandte Mathematik

Trapez Regel

Bestimmte Integrale, deren Stammfunktion sich nicht mittels elementarer Funktionen darstellen lassen, sollen näherungsweise bestimmt werden. Dieselbe Prozedur kann auch auf
Funktionen, die nur Punktweise bekannt sind, angewandt werden. Grundgedanke dieser numerischen Verfahren ist es, die zu integrierende Funktion durch einfachere Funktionen – meist Polygonzüge, Polynome oder Splines – zu approximieren. Exemplarisch sei hier das einfachste Verfahren vorgestellt.

Man ersetzt die Funktionskurve durch die Verbindungsgerade zwischen den
Punkten (a | f(a)) und (b | f(b)). Die Fläche des entstehenden Trapezes ist die Näherung für das gesuchte Integral.

 

N-Fache Trapez Regel

Für bessere Näherungen unterteilen wir das Grundintervall [a; b] in n gleich lange Teilintervalle [xk-1; xk] k = 1; 2; : : : n. (äquidistante Unterteilung)
In jedem Teilintervall wird die Funktion durch ihre Sehne approximiert. Die Fläche unterhalb der Trapeze ergibt näherungsweise das gesuchte Integral.
Ist h = xk - xk-1 die Breite der Teilintervalle, so ergibt sich für die Summe der Trapezflächen

Dieser Ausdruck kann auch als gewichtetes Mittel der Funktionswerte an den Stützstellen, multipliziert mit der Intervall-Länge interpretiert werden.

Dabei erhalten die beiden Randpunkte das halbe Gewicht der inneren Punkte. Benutzt man an Stelle des Polygonzugs für je 3 Stützstellen ein Interpolationspolynom zweiter Ordnung, so ergibt sich die wesentlich genauere Simpson-Formel. Sehr effektive Verfahren ergeben sich auch durch Extrapolation der Trapez-Regel (Romberg-Verfahren).

 

Integrand f(x) =

Untere Intervallgrenze a =

Obere Intervallgrenze b =

Streifenzahl n =

 

ein kleines Programm zur Simulation.

#include <stdio.h>
#include <math.h>
double funk(double);
void ittrapez(int,double,double);
void itsimpson(int,double,double);

double funk(double x)
{
return (exp(x));
}

void ittrapez(int N, double a, double b)
{
int I;
double sum;
sum=0.5*(funk(a)+funk(b));
for(I=1;I<=N-1;I++) sum=sum+funk(a+(I*(b-a)/N));
sum=sum*(b-a)/N;
printf("Die %.2i-te iterierte Trapez-Naeherung lautet: % .12E.\n",N,sum);
}

void itsimpson(int N, double a, double b)
{
int I;
double sum;
sum=(funk(a)+funk(b))/3.0;
for(I=0;I<=N-1;I++) sum=sum+(4.0*funk(a+((2.0*I+1.0)*(b-a)/(2.0*N)))/3.0);
for(I=1;I<=N-1;I++) sum=sum+(2.0*funk(a+(2.0*I*(b-a)/(2.0*N)))/3.0);
sum=sum*(b-a)/(2.0*N);
printf("Die %.2i-te iterierte Simpson-Naeherung lautet: % .12E.\n",N,sum);
}

/* Hauptprogramm */
int main(void)
{
double a,b;
a=0.0;
b=1.0;
printf("\n");
ittrapez(1,a,b);
ittrapez(4,a,b);
ittrapez(8,a,b);
ittrapez(20,a,b);
printf("\n");
printf("\n");
itsimpson(1,a,b);
itsimpson(4,a,b);
itsimpson(8,a,b);
itsimpson(20,a,b);
printf("\n");
return(0);
}