乐正

Actions speak louder than words.

Sicp-ex1-29

问题

辛普森规则是另一种比上面所用规则更精确的数值积分方法。采用辛普森规则,函数$f$在 范围$a$和$b$之间的定积分的近似值是:

$$ \frac {h} {3} [y_0 + 4y_1 + 2y_2 + 4y_3 + 2y_4 + \dots + 2y_{n-2} + 4y_{n-1} + y_n] $$

其中,$h = \frac {b - a} {n}$,$n$是某个偶数,而$y_k = f(a + kh)$,(增大$n$能提 高近似值的精度)。请定义一个具有$f$、$a$、$b$、$n$,采用辛普森规则计算并返回积分 值的过程。用你的函数求出cube在0和1之间的积分(用$n=100$和$n=1000$),并将得到的 值与上面用integral过程所得到的结果进行比较。

p38-sum (p38-sum.scm) download
1
2
3
4
5
(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))
练习1.29 (ex1-29.scm) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;;; Load p38-sum.scm
(define (simpson-integral f a b n)
  (define h (/ (- b a) n))

  (define (factory k)
    (cond ((or (= k 0) (= k n)) 1)
          ((even? k) 2)
          (else 4)))

  (define (y k)
    (f (+ a (* k h))))

  (define (term k)
    (* (factory k)
       (y k)))

  (define (next k)
    (+ k 1))

  (* (/ h 3)
     (sum term 0 next n)))

测试

1
2
3
4
5
(simpson-integral cube 0.0 1.0 100)
;Value: .24999999999999992

(simpson-integral cube 0.0 1.0 1000)
;Value: .2500000000000003

其得到的值比前文中的integral过程所得到的值精确度高。

draft

« sicp-ex1-28 sicp-ex1-30 »

Comments