二分法による解法プログラムをLISPで作りました
実行環境
OS:Windows11
LISP:XYZZY 0.2.2.253
ニュートンラプソン法よりも原理は簡単です。if文が冗長なのが欠点ですが、一応動きました。
f(x)=X^2-2の解を初期値を0と5に設定して挟み撃ちして求めています。
実行方法は1行目はコメントで、2行目末尾で[CTRL]+[J]を実行して関数定義をすると3行目にfと表示されます。4行目からが本体のプログラムで11行目末尾で[CTRL]+[J]で計算を実行します。
'二分法による解法
(defun f(x)( - ( * x x ) 2 ))
f
(let((x0 0)(x1 5))
(loop
(setq x (/ (+ x0 x1) 2))
(print (* x 1.0d0))
(if (> (f x) 0)(setq x1 x))
(if (< (f x) 0)(setq x0 x))
(if (= (f x) 0)(return (* x 1.0d0)))
(if( < (- x1 x0) 0.0001)(return (* x 1.0d0)))))
2.5d0
1.25d0
1.875d0
1.5625d0
1.40625d0
1.484375d0
1.4453125d0
1.42578125d0
1.416015625d0
1.4111328125d0
1.41357421875d0
1.414794921875d0
1.4141845703125d0
1.41448974609375d0
1.414337158203125d0
1.414260864257813d0
1.414260864257813d0