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); } |