Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
##(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")