/* * fpi.c : Fixpunktiteration zur Lösung von * * x = exp( - x / 2 ) =: phi( x ) * * x0 ..... Startwert * xacc ... Genauigkeit der Näherungslösung */ #include #include #include #define MAXITER 30 /* * Iterationsfunktion phi(x) */ double phi( double x ) { return( exp(-0.5 * x) ); } int main( void ) { double x0, xacc, x, xn; int j; printf("x0 : "); scanf("%lf", &x0); printf("xacc : "); scanf("%lf", &xacc); x = x0; /* Iterationsschleife */ for (j = 1; j <= MAXITER; j++) { xn = phi( x ); printf("x = %14.7e |xn - x| = %14.7e\n", x, fabs(xn - x)); if (fabs(xn - x) < xacc) { printf("s = %14.7e\n", x); break; } x = xn; } if (j > MAXITER) { printf("fpi: MAXITER ueberschritten\n"); exit(1); } return(0); }