Angewandte Mathematik

Sekantenverfahren

f(x)=x³-x²-x-2

Wie der Name des Verfahrens sagt, wird hierbei jeweils die Sekante (Gerade durch zwei Kurvenpunkte) verwendet, um sich der Nullstelle zu nähern. Der neue x-Wert wird berechnet, indem eine Gerade durch die Kurvenpunkte (x0/f(x0)) und (x1/f(x1)) gelegt wird. Diese wird dann mit der x-Achse geschnitten. Der x-Wert dieses Schnittpunktes wird wie folgt berechnet:

Beispiel:

u.s.w.

 

Wie lauten die ausgehend von den Startwerten x0=2 und x1=3 für die Funktion f(x)=x²-5 mittels des Sekantenverfahrens
berechneten Nährungswerte x0, x1, ... , x4 für die Nullstelle Wurzel aus (5)?

ein kleines Programm zur Simulation.
#include <stdio.h>
#include <math.h>
long double funk(long double);
long double funkstr(long double);
void sekanten(int,long double,long double);
void newton(int,long double);

long double funk(long double x)
{
return (x-exp(-x*x));
}

long double funkstr(long double x)
{
return (1.0+2.0*x*exp(-x*x));
}

void sekanten(int n, long double x0, long double x1)
{
int i;
long double x,xx,xxx;
x=x0;
xx=x1;
for(i=1;i<=n;i++)
{
printf("Die %.2i-te Sekanten-Naeherung lautet: % .12LE.\n",i,xx);
xxx=x;
x=xx;
xx=xxx-(funk(xxx)*(xx-xxx)/(funk(xx)-funk(xxx)));
}
}

void newton(int n, long double x0)
{
int i;
long double x;
x=x0;
for(i=0;i<=n;i++)
{
printf("Die %.2i-te Newton-Naeherung lautet: % .12LE.\n",i,x);
x=x-(funk(x)/funkstr(x));
}
}

/* Hauptprogramm */
int main(void)
{
long double x0=0.0,x1=2.0;
sekanten(10,x0,x1);
printf("\n");
printf("\n");
printf("\n");
newton(10,x0);
printf("\n");
return(0);
}