実際の数値計算は、 であるような2点 から出発する。 そして、区間を2分する点に対して、を計算を行う。 ならばをと置き換え、 ならばをと置き 換える。絶えず、区間の間に解があるようにするのである。この操作 を繰り返して、区間の幅が与えられた値 よりも小さく なったならば、計算を終了する。解へ収束は収束率1/2の一次収束とである。
実際にこの方法で
#include <stdio.h> double func(double x); /*=============================================================*/ /* main function */ /*=============================================================*/ int main(){ double eps=1e-15; /* precision of calculation */ double a, b, c; double test; char temp; int i=0; do{ printf("\ninitial value a = "
); scanf("%lf%c"
, &a, &temp); printf("initial value b = "
); scanf("%lf%c"
, &b, &temp); test=func(a)*func(b); if(test >= 0){ printf(" bad initial value !! f(a)*f(b)>0\n\n"
); } }while(test >= 0); if(b-a<0){ c=a; a=b; b=c; } while(b-a>eps){ c=(a+b)/2; if(func(c)*func(a)<0){ b=c; }else{ a=c; } i++; printf(" %d\t%20.15f\n"
,i,c); } printf("\nsolution x = %20.15f\n\n"
,c); return(0); } /*=============================================================*/ /* define function */ /*=============================================================*/ double func(double x){ double y; y=x*x*x-3*x*x+9*x-8; return(y); }