
- Python初心者
 - 数値計算で方程式の解を求めたい
 - 2分法が知りたい
 
こんにちは.
 Pythonで正の平方根を求めるには一般的に,
math.sqrt(x)
を使うとすぐに出てきますが,今回はわざわざ2分法というアルゴリズムで平方根を求めて見ることにします.
解説動画を出しました
2分法とは!?
2分法とは,解の存在範囲(上限値と下限値)を徐々に狭めていくことで求める方法です.
 いちようスライドを用意しました!

例えば,a=3だと,その平方根はだいたい1.732なので,上限値と下限値をだいたい3.0と1.0とかで推定します.
そのあとは,スライドのような計算を行って,徐々に上限値と下限値を解に近づけていけば完了です.
Pythonによるプログラミング
今回は,a=3の時で計算しました.
プログラムは以下の本を参考にしました.
 (参考:Pythonによる数値計算とシミュレーション)
初期値として,上限値と下限値を最初に入れて,そのあとはその範囲を徐々に解に近づけて行きます.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | # -*- coding: utf-8 -*- a = 3 LIMIT = 1e-20 def f(x):     return x * x - a xt = float(input("上限値xt=")) xb = float(input("下限値xb=")) while (xt - xb) * (xt - xb) > LIMIT:     xmid = (xt + xb) / 2     if f(xmid) > 0:         xt = xmid     else:         xb = xmid     print("{:.15f} {:.15f}".format(xt, xb))  | 
計算結果
上限値を3.0,下限値を1.0とした時の計算結果です.

左側の列が上限値,右側が下限値の計算結果になっています.
計算が繰り返されると,x=1.732になっていることが確認できます.

計算結果のグラフはこのような感じになります.
今回は,解を推定する方法として最も簡単な2分法を行いましたが,他にも色々な方法があるので,今後色々と取り上げて行きます.







