欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛顿法求平方根

程序员文章站 2024-03-18 08:11:10
...

x平方根定义为:有一个y,使得y0而且y2=x。这是一个数学函数,并没有描述一个计算过程来得到x的平方根。即使将这个定义用Lisp的形式重写一遍也无济于事:

(define (sqrt x)
    (the y (and (>= y 0)
                (= (square y) x)
            )
    )
)

计算机如何求平方根

最常用的为牛顿的逐步逼近法:如果对x的平方根的值有一个猜想y,那么就可以通过执行一个简单的操作区得到一个更好的猜想,只需要求出yx/y的平均值,例如求2的平方根,假定猜想值为1:

(define (sqrt-iter guess x)
    (if (good-enough? guess x)
        guess
        (sqrt-iter (improve guess x) x)
    )
)

首先定义求平方根函数sqrtiter,接受两个参数guessx,接下来判断guess是否符合要求,符合的话结果为guess,不符合的话就调用本身,用下一个猜想数来替换guess
- improve

(define (improve guess x)
        (average guess (/ x guess))
)

其中:

(define (average x y)
        (/ (+ x y) 2)
)

剩下的就是goodenough?了,一种方法是检测guess的平方与x的差小于某个确定值。

(define (good-enough guess x)
        (< (abs (- (square guess) x)) 0.001)
)       

最后在写一个启动入口,用1.0作为任何数值的初始猜想值:

(define (sqrt x)
        (sqrt-iter 1.0 x))
相关标签: 函数