【fortran】二分法

プログラミング

 今回は非線形方程式

$$e^x = x^2$$

の解を数値計算で解く。今回は二分法で求める。

二分法

 ある関数\(y = f(x)\)を考える。区間\([a,b]\)で連続な\(f(x)\)が

$$f(a)f(b) < 0 \tag{1}$$

ならば、この区間に\(f(x) = 0\)を満たす解が少なくとも1つ存在する。今、始めに式(1)を満たす\(a,b\)が与えられたとき、解の推定値として

$$c = \frac{a+b}{2} \tag{2}$$

を与える。もし\(f(c) = 0\)であれば、\(c\)は\(f(x)\)の解である。\(f(c)\neq 0 \)の場合、\(f(c)\)と同符号の関数値を持つ\(a , b\)と\(c\)を置き換える。つまりまとめると、

  • \(f(a)f(c) > 0\) (\(f(b)f(c) < 0\))の場合、\(a\)を\(c\)で置き換える
  • \(f(a)f(c) < 0\) (\(f(b)f(c) > 0\))の場合、\(b\)を\(c\)で置き換える

この操作を繰り返し行う。繰り返し行い、\(|a-b|\)が十分に小さい値に なると\(c\)は解に収束したとみなす。 

 二分法は は区間\([a,b]\)に解があれば必ず真の解に収束するロバストな解法であるが、収束が遅いという欠点を持つ。 

サンプルプログラム

使い方はターミナルで

とし、実行して\(a,b\)を代入する。

 例えば\(a=1,b=-1\)と入力すると、

と出力され、解が近似的に出力される。

コメント

タイトルとURLをコピーしました