#include <stdio.h>
#include <math.h>
#define EPS 1e-5
double f(double x) {
}
// 二分法
double bisection(double xl, double xr) {
double xi;
int i = 0;
printf("\n=== Bisection Method ===\n"); printf("i\t xl\t\t xi\t\t xr\t\t f(xl)\t\t f(xi)\t\t f(xr)\n");
while (1) {
i++;
xi = (xl + xr) / 2.0;
printf("%d\t %.6f %.6f %.6f %.6f %.6f %.6f\n", i, xl, xi, xr, f(xl), f(xi), f(xr));
printf("→ Root ≈ %.6f\n", xi
); return xi;
}
if (f(xl) * f(xi) < 0)
xr = xi;
else
xl = xi;
}
}
// はさみうち法
double false_position(double xl, double xr) {
double xi;
int i = 0;
printf("\n=== False Position Method ===\n"); printf("i\t xl\t\t xi\t\t xr\t\t f(xl)\t\t f(xi)\t\t f(xr)\n");
while (1) {
i++;
xi = (xl * f(xr) - xr * f(xl)) / (f(xr) - f(xl));
printf("%d\t %.6f %.6f %.6f %.6f %.6f %.6f\n", i, xl, xi, xr, f(xl), f(xi), f(xr));
printf("→ Root ≈ %.6f\n", xi
); return xi;
}
if (f(xl) * f(xi) < 0)
xr = xi;
else
xl = xi;
}
}
int main() {
printf("Solving f(x) = x^2 - 1 - sin(x) = 0\n");
// 二分法
bisection(-1.0, 0.0);
bisection(1.0, 2.0);
// はさみうち法
false_position(-1.0, 0.0);
false_position(1.0, 2.0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQUyAxZS01Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCi8vIOS6jOWIhuazlQpkb3VibGUgYmlzZWN0aW9uKGRvdWJsZSB4bCwgZG91YmxlIHhyKSB7CiAgICBkb3VibGUgeGk7CiAgICBpbnQgaSA9IDA7CgogICAgcHJpbnRmKCJcbj09PSBCaXNlY3Rpb24gTWV0aG9kID09PVxuIik7CiAgICBwcmludGYoImlcdCB4bFx0XHQgeGlcdFx0IHhyXHRcdCBmKHhsKVx0XHQgZih4aSlcdFx0IGYoeHIpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGkrKzsKICAgICAgICB4aSA9ICh4bCArIHhyKSAvIDIuMDsKCiAgICAgICAgcHJpbnRmKCIlZFx0ICUuNmYgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmXG4iLAogICAgICAgICAgICAgICBpLCB4bCwgeGksIHhyLCBmKHhsKSwgZih4aSksIGYoeHIpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4aSkpIDwgRVBTKSB7CiAgICAgICAgICAgIHByaW50Zigi4oaSIFJvb3Qg4omIICUuNmZcbiIsIHhpKTsKICAgICAgICAgICAgcmV0dXJuIHhpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYoeGwpICogZih4aSkgPCAwKQogICAgICAgICAgICB4ciA9IHhpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgeGwgPSB4aTsKICAgIH0KfQoKLy8g44Gv44GV44G/44GG44Gh5rOVCmRvdWJsZSBmYWxzZV9wb3NpdGlvbihkb3VibGUgeGwsIGRvdWJsZSB4cikgewogICAgZG91YmxlIHhpOwogICAgaW50IGkgPSAwOwoKICAgIHByaW50ZigiXG49PT0gRmFsc2UgUG9zaXRpb24gTWV0aG9kID09PVxuIik7CiAgICBwcmludGYoImlcdCB4bFx0XHQgeGlcdFx0IHhyXHRcdCBmKHhsKVx0XHQgZih4aSlcdFx0IGYoeHIpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGkrKzsKCiAgICAgICAgeGkgPSAoeGwgKiBmKHhyKSAtIHhyICogZih4bCkpIC8gKGYoeHIpIC0gZih4bCkpOwoKICAgICAgICBwcmludGYoIiVkXHQgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmICUuNmZcbiIsCiAgICAgICAgICAgICAgIGksIHhsLCB4aSwgeHIsIGYoeGwpLCBmKHhpKSwgZih4cikpOwoKICAgICAgICBpZiAoZmFicyhmKHhpKSkgPCBFUFMpIHsKICAgICAgICAgICAgcHJpbnRmKCLihpIgUm9vdCDiiYggJS42ZlxuIiwgeGkpOwogICAgICAgICAgICByZXR1cm4geGk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZih4bCkgKiBmKHhpKSA8IDApCiAgICAgICAgICAgIHhyID0geGk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB4bCA9IHhpOwogICAgfQp9CgppbnQgbWFpbigpIHsKCiAgICBwcmludGYoIlNvbHZpbmcgZih4KSA9IHheMiAtIDEgLSBzaW4oeCkgPSAwXG4iKTsKCiAgICAvLyDkuozliIbms5UKICAgIGJpc2VjdGlvbigtMS4wLCAwLjApOwogICAgYmlzZWN0aW9uKDEuMCwgMi4wKTsKCiAgICAvLyDjga/jgZXjgb/jgYbjgaHms5UKICAgIGZhbHNlX3Bvc2l0aW9uKC0xLjAsIDAuMCk7CiAgICBmYWxzZV9wb3NpdGlvbigxLjAsIDIuMCk7CgogICAgcmV0dXJuIDA7Cn0K