#include <stdio.h>
#include <math.h>
double f( double x) {
return x * x * x - 2 * x - 5 ;
}
void secant_method( double x0, double x1, double tol, int max_iter) {
double x_next, fx0, fx1;
int iter = 0 ;
printf ( "Iteration\t x0\t \t x1\t \t x_next\t \t f(x_next)\n " ) ;
do {
fx0 = f( x0) ;
fx1 = f( x1) ;
if ( fx1 - fx0 == 0 ) {
printf ( "Mathematical Error! Division by zero occurred.\n " ) ; return ;
}
x_next = x1 - ( fx1 * ( x1 - x0) ) / ( fx1 - fx0) ;
printf ( "%d\t \t %lf\t %lf\t %lf\t %lf\n " , iter
+ 1 , x0
, x1
, x_next
, f
( x_next
) ) ;
x0 = x1;
x1 = x_next;
iter++;
} while ( fabs ( f
( x_next
) ) > tol
&& iter
< max_iter
) ;
if ( iter == max_iter) {
printf ( "\n Method did not converge within %d iterations.\n " , max_iter
) ; } else {
printf ( "\n The root of the equation is: %lf\n " , x_next
) ; }
}
int main( ) {
double x0, x1, tol;
int max_iter;
printf ( "Enter two initial guesses (x0 and x1): " ) ; scanf ( "%lf %lf" , & x0
, & x1
) ;
printf ( "Enter the desired tolerance: " ) ;
printf ( "Enter the maximum number of iterations: " ) ;
secant_method( x0, x1, tol, max_iter) ;
return 0 ;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8bWF0aC5oPgoKZG91YmxlIGYoZG91YmxlIHgpIHsKICAgIHJldHVybiB4ICogeCAqIHggLSAyICogeCAtIDU7Cn0KCnZvaWQgc2VjYW50X21ldGhvZChkb3VibGUgeDAsIGRvdWJsZSB4MSwgZG91YmxlIHRvbCwgaW50IG1heF9pdGVyKSB7CiAgICBkb3VibGUgeF9uZXh0LCBmeDAsIGZ4MTsKICAgIGludCBpdGVyID0gMDsKCiAgICBwcmludGYoIkl0ZXJhdGlvblx0IHgwXHRcdCB4MVx0XHQgeF9uZXh0XHRcdCBmKHhfbmV4dClcbiIpOwoKICAgIGRvIHsKICAgICAgICBmeDAgPSBmKHgwKTsKICAgICAgICBmeDEgPSBmKHgxKTsKCiAgICAgICAgaWYgKGZ4MSAtIGZ4MCA9PSAwKSB7CiAgICAgICAgICAgIHByaW50ZigiTWF0aGVtYXRpY2FsIEVycm9yISBEaXZpc2lvbiBieSB6ZXJvIG9jY3VycmVkLlxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHhfbmV4dCA9IHgxIC0gKGZ4MSAqICh4MSAtIHgwKSkgLyAoZngxIC0gZngwKTsKICAgICAgICAKICAgICAgICBwcmludGYoIiVkXHRcdCAlbGZcdCAlbGZcdCAlbGZcdCAlbGZcbiIsIGl0ZXIgKyAxLCB4MCwgeDEsIHhfbmV4dCwgZih4X25leHQpKTsKICAgICAgICAKICAgICAgICB4MCA9IHgxOwogICAgICAgIHgxID0geF9uZXh0OwogICAgICAgIGl0ZXIrKzsKCiAgICB9IHdoaWxlIChmYWJzKGYoeF9uZXh0KSkgPiB0b2wgJiYgaXRlciA8IG1heF9pdGVyKTsKCiAgICBpZiAoaXRlciA9PSBtYXhfaXRlcikgewogICAgICAgIHByaW50ZigiXG5NZXRob2QgZGlkIG5vdCBjb252ZXJnZSB3aXRoaW4gJWQgaXRlcmF0aW9ucy5cbiIsIG1heF9pdGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJcblRoZSByb290IG9mIHRoZSBlcXVhdGlvbiBpczogJWxmXG4iLCB4X25leHQpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB4MCwgeDEsIHRvbDsKICAgIGludCBtYXhfaXRlcjsKCiAgICBwcmludGYoIkVudGVyIHR3byBpbml0aWFsIGd1ZXNzZXMgKHgwIGFuZCB4MSk6ICIpOwogICAgc2NhbmYoIiVsZiAlbGYiLCAmeDAsICZ4MSk7CgogICAgcHJpbnRmKCJFbnRlciB0aGUgZGVzaXJlZCB0b2xlcmFuY2U6ICIpOwogICAgc2NhbmYoIiVsZiIsICZ0b2wpOwoKICAgIHByaW50ZigiRW50ZXIgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnM6ICIpOwogICAgc2NhbmYoIiVkIiwgJm1heF9pdGVyKTsKCiAgICBzZWNhbnRfbWV0aG9kKHgwLCB4MSwgdG9sLCBtYXhfaXRlcik7CgogICAgcmV0dXJuIDA7Cn0K