実際の数値計算は, であるような2点 から出発する.そして, 区間を2分する点に対して,を計算を行う. な らばをと置き換え, ならばをと置き換える.絶えず,区間 の間に解があるようにするのである.この操作を繰り返して,区間の幅が 与えられた値 よりも小さくなったならば,計算を終了する.
解へ収束は収束率1/2の一次収束となる.1回の計算で,解の精度は1/2になるからである. 10回計算を行えば,はじめに比べて解の精度は となる.非常に良い精 度の近似解を得るためには,かなりの計算が必要である.人間と電卓では手間がかかって 大変である.このような単純反復作業はコンピューターの得意分野である.
実際にこの方法で式(4)を計算した結果を図 2に示す.この図より,との関係の式 (10)を満たす区間が1/2ずつ縮小していく様子がわかる.
計算の終了は,
(11) |
double f(double x){ double y; y=x*x*x-3*x*x+9*x-8; return y; }と書く.もちろんこれを使うためには,プロトタイプ宣言が必要である.また,計算を打 ち切る条件もプログラム中に書くものとする.通常,これは
#define EPS 1e-10とプログラムの先頭に書く.このEPSが求めるべき解の精度を表す.マクロ定数なの で,普通,大文字--C言語の習慣--を使う.
図3のような二分法のフローチャートの通りにすれば,目的の 動作をするプログラムができる.