Skip to content

1.44

; The idea of smoothing a function is an important concept 
; in signal processing. If f is a function and dx is some 
; small number, then the smoothed version of f is the 
; function whose value at a point x is the average of 
; f(x−dx), f(x), and f(x+dx). Write a procedure smooth 
; that takes as input a procedure that computes f and 
; returns a procedure that computes the smoothed f. 
; It is sometimes valuable to repeatedly smooth a 
; function (that is, smooth the smoothed function, and so 
; on) to obtain the n-fold smoothed function. Show how to 
; generate the n-fold smoothed function of any given function 
; using `smooth` and `repeated` from Exercise 1.43.

; Answer
; (i) Let's define `repeated` procedure
(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))))
)

; (ii) Write `smooth` procedure
(define (average a b c) (/ (+ a b c) 3))
(define dx 0.0001)
(define (smooth f)
    (lambda (x) (average (f (- x dx)) (f x) (f (+ x dx)))))

; (iii) Write `n-fold-smooth` procedure
(define (n-fold-smooth f n) (repeated (smooth f) n))

((n-fold-smooth (lambda (x) (sin x)) 10) 3.1415) ;Value: 9.265358537893419e-5