二分法

説明

の重根ではない解がのある区間でただ一つだけ存在しているものとする。
方程式の解は区間の間にあるので、

区間の中点をとすると、

であれば、区間について中点をとり、であれば、区間について中点をとるというように繰り返し中点を取り、解の存在する区間を狭めていく。

区間が十分狭くなるまで、この作業を続ける。

フローチャート

以下は二分法のフローチャートの例である。

プログラム

以下はC言語での二分法の例である。

#include <stdio.h>
#include <math.h>
 
#define EPS .0001
 
double nibun(double, double);
double func_y(double);
 
int main(int argc, char **argv)
{
    double a = 0.0, b = 1.0;
    double x;
 
    printf("initial value a=%6.3lf\n", a);
    printf("initial value b=%6.3lf\n", b);
    x = nibun(a, b);
    printf("x=%6.3lf\n", x);
 
    return 0;
}
 
double nibun(double a, double b)
{
    double c;
    do {
        c = (a + b) / 2.0;
        if ((func_y(c) * func_y(a)) < 0.0)
            b = c;
        else
            a = c;
    } while (fabs(a - b) > EPS);
    return (c);
}
 
double func_y(double x)
{
    double y;
    y = pow(x, 3.0) + x - 1.0;
    return (y);
}