使用牛顿迭代法求平方根(scheme实现)

先说方法

对于x,需求求出他的平方根
前提条件:猜测一个数guess1
迭代步骤:
1.猜测guess1
2.求商x/guess1
3.再求guess1和商的平均值guess2
4.根据guess1和guess2比较,用来决定结束迭代还是进入下一次迭代。也可以用于计算精度的调整

举例:
对于4来说,猜测它的平方根为1
·猜测为1,商4/1=4,平均值为(1+4)/2=2.5
·猜测为2.5,商4/2.5=1.6,平均值为(2.5+1.6)/2=2.05
·猜测为2.05,以此类推…
结果会无限逼近2

对于2来说,猜测它的平方根为1
·猜测为1,商为2/1=1,平均值为(1+2)/2=1.5
·猜测为1.5,商为2/1.5=1.3333,平均值为(1.5+1.3333)/2=1.4167
·猜测为1.4167,商为2/1.4167=1.4118,平均值为1.4142
·猜测为1.4142,以此类推…

这里的平均值,也可以叫做提高精度的可靠猜想

那么对于4来说,另一种起始猜测为4的一半,那么结果会怎么样?
·猜测为4/2=2,商为4/2=2,平均值为(2+2)/2=2,当前猜测与下一轮猜测相同,那么得到结果是2

scheme代码

//主要迭代
(define (sqrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (sqrt-iter (improve guess x)
                 x
      )
  )
)
//提升猜测精度
(define (improve guess x)
  (average guess (/ x guess) )
)
//求平均值
(define (average x y)
  (/ (+ x y) 2)
)
//误差设定(”足够好“的定义)
(defeine (good-enough? guess x)
  (< (abs (- (square guess) x)) 0.001)
)
//初始猜测设为1(实际设为x/2更好,不过不影响)
(define (sqrt x)
  (sqrt-iter 1.0 x)
)

linux下mit-scheme
在这里插入图片描述
以上代码来源于scip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值