解:代码如下
(define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (add-1 x) (+ x 1)) (define (sum-iter term a next b) (define (iter a result) (if (> a b) result (iter (next a) (+ result (term a))))) (iter a 0)) (define (integral f a b n) (define h (/ (- b a) (* 1.0 n))) (define (function-y k) (f (+ a (* k h)))) (define (term k) (define y (function-y k)) (cond ((= k 0) y) ((= k n) y) ((even? k) (* 2 y)) (else (* 4 y)))) (* (/ h 3) (sum-iter term 0 add-1 n))) (define (cube x) (* x x x))
1.29的难点是找出状态转移变量,也就是k;要注意的时k=0和k=n时,y函数前面是没有2或4的。
当n=1000时,用sum求出的是0.25000000000000003,而用sum-iter求出的是0.25000000000000006,用DrRacket,不知道为什么。
原文:http://my.oschina.net/u/1445655/blog/305375