見出し画像

二分法による解法プログラムを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

いいなと思ったら応援しよう!