#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 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHggKiB4ICogeCAtIDIgKiB4IC0gNTsKfQoKdm9pZCBzZWNhbnRfbWV0aG9kKGRvdWJsZSB4MCwgZG91YmxlIHgxLCBkb3VibGUgdG9sLCBpbnQgbWF4X2l0ZXIpIHsKICAgIGRvdWJsZSB4X25leHQsIGZ4MCwgZngxOwogICAgaW50IGl0ZXIgPSAwOwoKICAgIHByaW50ZigiSXRlcmF0aW9uXHQgeDBcdFx0IHgxXHRcdCB4X25leHRcdFx0IGYoeF9uZXh0KVxuIik7CgogICAgZG8gewogICAgICAgIGZ4MCA9IGYoeDApOwogICAgICAgIGZ4MSA9IGYoeDEpOwoKICAgICAgICBpZiAoZngxIC0gZngwID09IDApIHsKICAgICAgICAgICAgcHJpbnRmKCJNYXRoZW1hdGljYWwgRXJyb3IhIERpdmlzaW9uIGJ5IHplcm8gb2NjdXJyZWQuXG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgeF9uZXh0ID0geDEgLSAoZngxICogKHgxIC0geDApKSAvIChmeDEgLSBmeDApOwogICAgICAgIAogICAgICAgIHByaW50ZigiJWRcdFx0ICVsZlx0ICVsZlx0ICVsZlx0ICVsZlxuIiwgaXRlciArIDEsIHgwLCB4MSwgeF9uZXh0LCBmKHhfbmV4dCkpOwogICAgICAgIAogICAgICAgIHgwID0geDE7CiAgICAgICAgeDEgPSB4X25leHQ7CiAgICAgICAgaXRlcisrOwoKICAgIH0gd2hpbGUgKGZhYnMoZih4X25leHQpKSA+IHRvbCAmJiBpdGVyIDwgbWF4X2l0ZXIpOwoKICAgIGlmIChpdGVyID09IG1heF9pdGVyKSB7CiAgICAgICAgcHJpbnRmKCJcbk1ldGhvZCBkaWQgbm90IGNvbnZlcmdlIHdpdGhpbiAlZCBpdGVyYXRpb25zLlxuIiwgbWF4X2l0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIlxuVGhlIHJvb3Qgb2YgdGhlIGVxdWF0aW9uIGlzOiAlbGZcbiIsIHhfbmV4dCk7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIHgwLCB4MSwgdG9sOwogICAgaW50IG1heF9pdGVyOwoKICAgIHByaW50ZigiRW50ZXIgdHdvIGluaXRpYWwgZ3Vlc3NlcyAoeDAgYW5kIHgxKTogIik7CiAgICBzY2FuZigiJWxmICVsZiIsICZ4MCwgJngxKTsKCiAgICBwcmludGYoIkVudGVyIHRoZSBkZXNpcmVkIHRvbGVyYW5jZTogIik7CiAgICBzY2FuZigiJWxmIiwgJnRvbCk7CgogICAgcHJpbnRmKCJFbnRlciB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uczogIik7CiAgICBzY2FuZigiJWQiLCAmbWF4X2l0ZXIpOwoKICAgIHNlY2FudF9tZXRob2QoeDAsIHgxLCB0b2wsIG1heF9pdGVyKTsKCiAgICByZXR1cm4gMDsKfQ==