牛顿法求平方根

博客介绍了如何利用计算机实现牛顿法来求平方根。通过不断逼近的算法,从一个初始猜测值开始,计算猜测值与x除以猜测值的平均数,以此获得更接近实际平方根的新猜想。以求2的平方根为例,初始猜想为1,通过迭代判断新猜想是否足够接近实际值,从而得到精确的平方根。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值