#include <stdio.h>
#include <math.h>
#define EPS 1e-5
// Function
double f(double x) {
}
// Bisection Method (二分法)
double bisection(double a, double b, int *iterations) {
double mid;
*iterations = 0;
while (1) {
(*iterations)++;
mid = (a + b) / 2.0;
if (fabs(f
(mid
)) < EPS
) return mid
;
if (f(a) * f(mid) < 0)
b = mid;
else
a = mid;
}
}
// False Position Method (はさみうち法)
double false_position(double a, double b, int *iterations) {
double x;
*iterations = 0;
while (1) {
(*iterations)++;
x = (a * f(b) - b * f(a)) / (f(b) - f(a));
if (fabs(f
(x
)) < EPS
) return x
;
if (f(a) * f(x) < 0)
b = x;
else
a = x;
}
}
int main() {
double r1, r2;
int it1, it2;
printf("========================================\n"); printf(" Solving f(x) = x^2 - 1 - sin(x) = 0\n"); printf("========================================\n");
// ---- Bisection ----
printf("\n[ Bisection Method ]\n");
r1 = bisection(-1.0, 0.0, &it1);
printf("Interval [-1,0]: Root = %.6f, Iterations = %d\n", r1
, it1
);
r2 = bisection(1.0, 2.0, &it2);
printf("Interval [1,2]: Root = %.6f, Iterations = %d\n", r2
, it2
);
// ---- False Position ----
printf("\n[ False Position Method ]\n");
r1 = false_position(-1.0, 0.0, &it1);
printf("Interval [-1,0]: Root = %.6f, Iterations = %d\n", r1
, it1
);
r2 = false_position(1.0, 2.0, &it2);
printf("Interval [1,2]: Root = %.6f, Iterations = %d\n", r2
, it2
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQUyAxZS01CgovLyBGdW5jdGlvbgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCi8vIEJpc2VjdGlvbiBNZXRob2QgKOS6jOWIhuazlSkKZG91YmxlIGJpc2VjdGlvbihkb3VibGUgYSwgZG91YmxlIGIsIGludCAqaXRlcmF0aW9ucykgewogICAgZG91YmxlIG1pZDsKICAgICppdGVyYXRpb25zID0gMDsKCiAgICB3aGlsZSAoMSkgewogICAgICAgICgqaXRlcmF0aW9ucykrKzsKICAgICAgICBtaWQgPSAoYSArIGIpIC8gMi4wOwoKICAgICAgICBpZiAoZmFicyhmKG1pZCkpIDwgRVBTKSByZXR1cm4gbWlkOwoKICAgICAgICBpZiAoZihhKSAqIGYobWlkKSA8IDApCiAgICAgICAgICAgIGIgPSBtaWQ7CiAgICAgICAgZWxzZQogICAgICAgICAgICBhID0gbWlkOwogICAgfQp9CgovLyBGYWxzZSBQb3NpdGlvbiBNZXRob2QgKOOBr+OBleOBv+OBhuOBoeazlSkKZG91YmxlIGZhbHNlX3Bvc2l0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgaW50ICppdGVyYXRpb25zKSB7CiAgICBkb3VibGUgeDsKICAgICppdGVyYXRpb25zID0gMDsKCiAgICB3aGlsZSAoMSkgewogICAgICAgICgqaXRlcmF0aW9ucykrKzsKICAgICAgICB4ID0gKGEgKiBmKGIpIC0gYiAqIGYoYSkpIC8gKGYoYikgLSBmKGEpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4KSkgPCBFUFMpIHJldHVybiB4OwoKICAgICAgICBpZiAoZihhKSAqIGYoeCkgPCAwKQogICAgICAgICAgICBiID0geDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGEgPSB4OwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSByMSwgcjI7CiAgICBpbnQgaXQxLCBpdDI7CgogICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKICAgIHByaW50ZigiIFNvbHZpbmcgZih4KSA9IHheMiAtIDEgLSBzaW4oeCkgPSAwXG4iKTsKICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CgogICAgLy8gLS0tLSBCaXNlY3Rpb24gLS0tLQogICAgcHJpbnRmKCJcblsgQmlzZWN0aW9uIE1ldGhvZCBdXG4iKTsKCiAgICByMSA9IGJpc2VjdGlvbigtMS4wLCAwLjAsICZpdDEpOwogICAgcHJpbnRmKCJJbnRlcnZhbCBbLTEsMF06IFJvb3QgPSAlLjZmLCBJdGVyYXRpb25zID0gJWRcbiIsIHIxLCBpdDEpOwoKICAgIHIyID0gYmlzZWN0aW9uKDEuMCwgMi4wLCAmaXQyKTsKICAgIHByaW50ZigiSW50ZXJ2YWwgWzEsMl06IFJvb3QgPSAlLjZmLCBJdGVyYXRpb25zID0gJWRcbiIsIHIyLCBpdDIpOwoKICAgIC8vIC0tLS0gRmFsc2UgUG9zaXRpb24gLS0tLQogICAgcHJpbnRmKCJcblsgRmFsc2UgUG9zaXRpb24gTWV0aG9kIF1cbiIpOwoKICAgIHIxID0gZmFsc2VfcG9zaXRpb24oLTEuMCwgMC4wLCAmaXQxKTsKICAgIHByaW50ZigiSW50ZXJ2YWwgWy0xLDBdOiBSb290ID0gJS42ZiwgSXRlcmF0aW9ucyA9ICVkXG4iLCByMSwgaXQxKTsKCiAgICByMiA9IGZhbHNlX3Bvc2l0aW9uKDEuMCwgMi4wLCAmaXQyKTsKICAgIHByaW50ZigiSW50ZXJ2YWwgWzEsMl06IFJvb3QgPSAlLjZmLCBJdGVyYXRpb25zID0gJWRcbiIsIHIyLCBpdDIpOwoKICAgIHJldHVybiAwOwp9