练习1.7

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

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

(define (good-enough? guess improved-guess)
    (< (/ (abs (- improved-guess guess))
          guess)
       0.001))

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

(define (sqrt x)
    (sqrt-iter 1.0 x))

新的sqrt函数对于非常小和非常大的值都能给出正确答案 但书上给的示例并不行

因为对于很小的数 书上示例相当于要求求出的平方根绝对误差小于某一特定值 而本题解则相当于要求求出的平方根相对误差小于某以特定值 所以本题解所求出的平方根可以做到很精确

而对于特别大的数,因为 mit-scheme 实现的小数精度不足以表示两个大数之间的差,所以 sqrt 会陷入死循环而无法得出正确结果
引用自SICP解题集练习1-7


以上便是使用牛顿法求解平方根的过程 其中 yn+1=yn+xyn2y_{n+1} =\frac{y_{n}+\frac{x}{y_{n}}}{2} 这个式子是由牛顿法迭代方程算得 xn+1=xnf(xn)f(xn+1) x_{n+1} = x_{n} - \frac{f(x_{n})}{f\prime(x_{n+1})}

附一些知乎作为补充材料

数学XD

results matching ""

    No results matching ""