問題1.45 – SICP(計算機プログラムの構造と解釈)その23

問題1.45

(define (average-damp f)
  (lambda (x) (average x (f x))))

(define (compose f g)
  (lambda (x) (f (g x))))

(define (repeated f n)
  (if (= n 1)
      (lambda (x) (f x))
      (compose f (repeated f (- n 1)))))

(define tolerance 0.00001)

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
         (if (close-enough? guess next)
             next
             (try next))))
  (try first-guess))

n乗根の計算に必要な平均緩和の回数を次の手続きで調べる。

(define (n-th-sqrt x n c)
  (fixed-point ((repeated average-damp c) (lambda (y) (/ x (expt y (- n 1)))))
               1.0))

;3乗根には1回の平均緩和
(n-th-sqrt (expt 3 3) 3 1)
gosh> 2.9999972321057697

;4乗根には2回の平均緩和
(n-th-sqrt (expt 3 4) 4 2)
gosh> 3.000000000000033

;5乗根には2回の平均緩和
(n-th-sqrt (expt 3 5) 5 2)
gosh> 3.0000008877496294

;6乗根には2回の平均緩和
(n-th-sqrt (expt 3 6) 6 2)
gosh> 2.999996785898161

;7乗根には2回の平均緩和
(n-th-sqrt (expt 3 7) 7 2)
gosh> 3.0000041735235943

;8乗根には3回の平均緩和
(n-th-sqrt (expt 3 8) 8 3)
gosh> 3.0000000000173292

;9乗根には3回の平均緩和
(n-th-sqrt (expt 3 9) 9 3)
gosh> 2.9999993492954617

;10乗根には3回の平均緩和
(n-th-sqrt (expt 3 10) 10 3)
gosh> 2.9999982624745742

;11乗根には3回の平均緩和
(n-th-sqrt (expt 3 11) 11 3)
gosh> 3.000002135562327

;12乗根には3回の平均緩和
(n-th-sqrt (expt 3 12) 12 3)
gosh> 3.000003243693911

;13乗根には3回の平均緩和
(n-th-sqrt (expt 3 13) 13 3)
gosh> 2.9999967990518366

;14乗根には3回の平均緩和
(n-th-sqrt (expt 3 14) 14 3)
gosh> 2.9999959148601363

;15乗根には3回の平均緩和
(n-th-sqrt (expt 3 15) 15 3)
gosh> 3.000004202219401

;16乗根には4回の平均緩和
(n-th-sqrt (expt 3 16) 16 4)
gosh> 3.0

;17乗根には4回の平均緩和
(n-th-sqrt (expt 3 17) 17 4)
gosh> 2.999999781018786

以上の結果から、n乗根には log n 回(四捨五入して整数を求める)の平均緩和が必要になると考えられる。

(define (n-th-sqrt x n)
  (let ((c (round (/ (log n) (log 2)))))
       (fixed-point ((repeated average-damp c) (lambda (y) (/ x (expt y (- n 1)))))
                    1.0)))

(n-th-sqrt (expt 3 3) 3)
gosh> 3.000001464168659

(n-th-sqrt (expt 3 4) 4)
gosh> 3.000000000000033
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»