乐正

Actions speak louder than words.

Sicp-ex1-44

问题

平滑一个函数的想法是信号处理中的一个重要概念。如果$f$是一个函数,$dx$是某个很小 的数值,那么$f$的平滑也是一个函数,它在点$x$的值就是$f(x-dx)$、$f(x)$和$f(x+dx)$ 的平均值。请写一个过程smooth,它输入的是一个计算$f$的过程,返回一个计算平滑后 的$f$的过程。有时可能发现,重复地平滑一个函数,得到经过$n$次平滑的函数(也就是说, 对平滑后的函数再做平滑,等等)也很有价值。说明怎样利用smooth和练习1.43的repeated, 对给定的函数生成$n$次平滑函数。

解答

练习1.44 (ex1-44.scm) download
1
2
3
4
5
6
7
8
9
10
11
(define (smooth f)
  (define dx 0.00001)

  (lambda (x)
    (/ (+ (f (- x dx))
          (f x)
          (f (+ x dx)))
       3)))

(define (repeated-smooth f n)
  (repeated (smooth f) n))

测试

1
2
3
4
5
6
7
8
9
;;; Load ex1-43.scm
((smooth (lambda (x) x)) 3)
;Value: 3.

((repeated-smooth (lambda (x) x) 10) 3)
;Value: 3.

((repeated-smooth (lambda (x) (square x)) 2) 3)
;Value: 81.00000000126664

draft

« sicp-ex1-43 sicp-ex1-45 »

Comments