Open Source WEB

##(link2sicp "book-Z-H-12.html#%_thm_1.45" "Exercise 1.45")

解答例

n 乗根 を m 回の平均緩和を使って解く実験用 n-root-exp を以下のように定義する。

(define (n-fold-average-damp n) (repeated average-damp n))

(define (n-root-exp n x m)
  (fixed-point ((n-fold-average-damp m)
                (lambda (y) (/ x (expt y (- n 1)))))
               1.0))

これでいくつか実験して収束状況を見ると

(n-root-exp 2 2 0) ==> NG
(n-root-exp 2 2 1) ==> 収束
(n-root-exp 3 2 1) ==> 収束
(n-root-exp 4 2 1) ==> NG
(n-root-exp 4 2 2) ==> 収束
(n-root-exp 5 2 2) ==> 収束
(n-root-exp 6 2 2) ==> 収束
(n-root-exp 7 2 2) ==> 収束
(n-root-exp 8 2 2) ==> NG
(n-root-exp 8 2 3) ==> 収束

n = 2^c とすると、必要な平均緩和の回数は m は m = floor(c)

(define (n-root n x)
  (define (damp-count m)
    (if (< m 2)
        0
        (+ 1 (damp-count (/ m 2)))))
  (fixed-point ((n-fold-average-dump (damp-count n))
                (lambda (y) (/ x (expt y (- n 1)))))))

コード

##(sicp-answer-code "ex-1.45.scm")

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us