0

次のコードのどこに欠陥がありますか?

(define (newtons-method2 f guess n)
(define (newton-transform f)
 (lambda (x)
  (- x (/ (f x) ((der f 0.5) x)))))
(let ((next (newton-transform guess)))
(if (= 0 n)
    next
    (newtons-method2 (f next (- n 1))))))

このメソッドは "newtons-method2" という名前になっています

私の微分関数は次のとおりです。

(define (der f h)
 (lambda (x)
 (/ (- (f(+ x h)) (f x))
    h)))
4

2 に答える 2

1

あなたはこれを尋ねていませんが、平方根を計算するための別の方法を次に示します。

(define (root n)
  (if (< n 1) (/ (root (* n 4)) 2)
    (if (<= 4 n) (* (root (/ n 4)) 2)
      (let ((x (/ (+ 2. n) 2)))
        (let ((x (/ (+ x (/ n x)) 2)))
          (let ((x (/ (+ x (/ n x)) 2)))
            (let ((x (/ (+ x (/ n x)) 2)))
              (let ((x (/ (+ x (/ n x)) 2)))
                (let ((x (/ (+ x (/ n x)) 2)))
                  x)))))))))

これにより、n が 1 <= n < 4 の範囲に正規化さループが展開されて、範囲の幾何平均である 2 の初期推定値で 5 回の反復が実行されます。nは限られた範囲内にあることがわかっているため、倍精度演算には 5 回の反復で十分であることを証明できます。使用されている式はHeronによるもので、ニュートンの方法より 16 世紀も前のものです。

于 2013-09-20T16:01:19.710 に答える