#include <stdio.h>
#include <math.h>
float f(float x) {
return 3*x
- 14 + exp(x
) - exp(-x
); }
float secant_method(float (*f)(float), float a, float b, float tol, int max_iter) {
float x0 = a, x1 = b, x_new;
for (int i = 0; i < max_iter; i++) {
float f_x0 = f(x0);
float f_x1 = f(x1);
if (fabs(f_x1
) < tol
) return x1
; x_new = x1 - f_x1 * (x1 - x0) / (f_x1 - f_x0);
if (fabs(x_new
- x1
) < tol
) return x_new
; x0 = x1;
x1 = x_new;
}
return x1;
}
int main() {
float a = 1.0f, b = 3.0f, tol = 1e-6f;
int max_iter = 100;
float root = secant_method(f, a, b, tol, max_iter);
printf("\nответ: %6.6f\n", root
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgpmbG9hdCBmKGZsb2F0IHgpIHsKICAgIHJldHVybiAzKnggLSAxNCArIGV4cCh4KSAtIGV4cCgteCk7Cn0KCmZsb2F0IHNlY2FudF9tZXRob2QoZmxvYXQgKCpmKShmbG9hdCksIGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHRvbCwgaW50IG1heF9pdGVyKSB7CiAgICBmbG9hdCB4MCA9IGEsIHgxID0gYiwgeF9uZXc7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heF9pdGVyOyBpKyspIHsKICAgICAgICBmbG9hdCBmX3gwID0gZih4MCk7CiAgICAgICAgZmxvYXQgZl94MSA9IGYoeDEpOwogICAgICAgIGlmIChmYWJzKGZfeDEpIDwgdG9sKSByZXR1cm4geDE7CiAgICAgICAgeF9uZXcgPSB4MSAtIGZfeDEgKiAoeDEgLSB4MCkgLyAoZl94MSAtIGZfeDApOwogICAgICAgIGlmIChmYWJzKHhfbmV3IC0geDEpIDwgdG9sKSByZXR1cm4geF9uZXc7CiAgICAgICAgeDAgPSB4MTsKICAgICAgICB4MSA9IHhfbmV3OwogICAgfQogICAgcmV0dXJuIHgxOwp9CgppbnQgbWFpbigpIHsKICAgIGZsb2F0IGEgPSAxLjBmLCBiID0gMy4wZiwgdG9sID0gMWUtNmY7CiAgICBpbnQgbWF4X2l0ZXIgPSAxMDA7CiAgICBmbG9hdCByb290ID0gc2VjYW50X21ldGhvZChmLCBhLCBiLCB0b2wsIG1heF9pdGVyKTsKICAgIHByaW50ZigiXG7QvtGC0LLQtdGCOiAlNi42ZlxuIiwgcm9vdCk7CiAgICByZXR1cm4gMDsKfQo=