Lisp---牛顿迭代法求平方根

题目:求给定数的平方根


求平方根无法直接得到,本次利用牛顿迭代法进行求解。

若求解x的平方根sqrt(x), 大体思路为每次猜测一个答案guess,和x进行比较,而牛顿迭代法中每次求出y和x/guess的平均值(更接近实际的平方根)

牛顿迭代法介绍:http://baike.baidu.com/link?url=NG3VdxSymk9tzEJolsvsK5Elvicc2EYBL19CppGp0-dKryLr9u065s-ZMuysfdLJws5shFF1w-QeZY-Z1KBZvq

可以不断改良近似值,最终设定一个判断标准(例如误差不超过0.001)。在以下代码中,x作为内部定义中的自由变量,可以隐式传递。(词法作用域)



以下代码实现:

(define (square x) (* x x))         //定义求平方

(define (average x y) (/ (+ x y) 2))    //定义求平均值


(define (sqrt x)                           //定义求平方根

      (define (accurate guess)            //定义判断精确度

           (<   (abs (-  (square guess)  x)) 0.001))

      (define (improve guess)             //定义改进近似值

          (average x  (/ x guess)))

      (define (sqrt-iter guess)           //定义主体迭代求解

          (if   (accurate guess)

                 guess

                (sqrt-iter (improve guess))))

      (sqrt-iter 1.0))



>(sqrt 4)

  2.0000000929222947

>(sqrt 9)

  3.00009155413138

>(sqrt 12)

  3.4641016533502986


你可能感兴趣的:(Lisp)