Angewandte Mathematik

Numerische Differentiation

Es sei f n-mal differenzierbar in a€R und h>0 hinreichend klein, dann gilt

Die Berechnung der dividierten Differenzen erfolgt dabei mit dem Dividierten -Differenzen -Algorithmus bzw. - bei Handrechnung - mit dem Dividierte -Differenzen -Schema

Beispiel
Berechnen Sie für die Funktion f, f(x):=ln*x, Näherungen für f'(1), f''(1) und f'''(1) mit dem Algorithmus zur numerischen Differentiation sowie Schrittweite
h1=0.1,
h2=0.0,
h3=0.001.
Vergleichen Sie mit den Exakten Resultaten!

 

ein kleines Programm zur Simulation.

#include <stdio.h>
#include <math.h>

typedef double feldfeld[11][11];
double funk(double);
int fak(int);
void divdif(int,double,double);

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

int fak(int n)
{
int k,m;
m=1;
for(k=1;k<=n;k++) m=m*k;
return(m);
}

void divdif(int n, double a, double h)
{
int k,l;
double abl;
feldfeld dd;
/* Initialisierung */
for(k=0;k<=n;k++) dd[0][k]=funk(a+k*h);
/* Eigentliche Rechnung */
for(l=1;l<=n;l++)
{
for(k=0;k<=n-l;k++)
   dd[l][k]=(dd[l-1][k+1]-dd[l-1][k])/(l*h);
}
/* Ausgabe */
printf("Das Dividierte-Differenzen-Schema lautet:\n");
printf("\n");
for(k=0;k<=n;k++)
{
for(l=0;l<=n-k;l++) printf("% .12E",dd[l][k]);
printf("\n");
}
printf("\n");
printf("\n");
printf("\n");
for(l=0;l<=n;l++)
{
abl=fak(l)*dd[l][0];
printf("Die Naeherung fuer die %i-te Ableitung lautet:% .12E.\n",l,abl);
}
}

/* Hauptprogramm */
int main(void)
{
int n;
double a,h;
n=3;
a=1.0;
h=0.1;
divdif(n,a,h);
printf("\n");
printf("\n");
h=0.01;
divdif(n,a,h);
printf("\n");
printf("\n");
h=0.001;
divdif(n,a,h);
printf("\n");
return(0);
}