💻

e^x -3xにおいて区間[0,1]の解を二分法で求める

📌
e^x -3xにおいて区間[0,1]の解を二分法で求める
notion image

Code

#include <stdio.h> #include <stdlib.h> #include <math.h> #define FUNC(x) exp(x) - 3 * x double a = 0.0; double b = 1.0; double c = 0.0; double eps = 0.00001; double fa, fb, fc; double ans; int i = 0; int main() { int n = log((b - a) / eps) / log(2.0) + 1; while (i < n) { c = (a + b) / 2.0; fa = FUNC(a); fc = FUNC(c); if (fa * fc < 0) { b = c; } else { a = c; } if (fabs(b - a) < eps) { ans = c; } printf("i:%d c=%f fc=%f\n", i, c, fc); i++; } printf("---------------------------------\n"); printf("Ans: c = %f\tf(c) = %f\n", ans, FUNC(ans)); }

Output

i:0 c=0.500000 fc=0.148721 i:1 c=0.750000 fc=-0.133000 i:2 c=0.625000 fc=-0.006754 i:3 c=0.562500 fc=0.067555 i:4 c=0.593750 fc=0.029516 i:5 c=0.609375 fc=0.011156 i:6 c=0.617188 fc=0.002145 i:7 c=0.621094 fc=-0.002319 i:8 c=0.619141 fc=-0.000091 i:9 c=0.618164 fc=0.001026 i:10 c=0.618652 fc=0.000468 i:11 c=0.618896 fc=0.000188 i:12 c=0.619019 fc=0.000049 i:13 c=0.619080 fc=-0.000021 i:14 c=0.619049 fc=0.000014 i:15 c=0.619064 fc=-0.000003 i:16 c=0.619057 fc=0.000005 --------------------------------- Ans: c = 0.619057 f(c) = 0.000005