; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 03/05/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================
;; SICP No.1.29
;; 观察simpson个公式的规律,原公式可写为
;; n/2
;; h ---
;; - > y_(2i-2) + 4y_(2i-1) + y_(2i)
;; 3 ---
;; i=1
;; 因此可以直接调用sum函数
(define (simpson f a b n)
(define h (/ (- b a) n))
(define (y k) (f (+ a (* k h))))
(define (next x) (+ x 1))
(define (term i) (+ (y (- (* 2 i) 2))
(y (* 2 i))
(* 4 (y (- (* 2 i) 1)))))
(/ (* h (sum term 1 next (/ n 2))) 3))
;; Test-it:
;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.
;; > (integral cube 0 1 0.01)
;; 0.24998750000000042
;; > (simpson cube 0.0 1.0 100)
;; 0.25000000000000017
;; > (integral cube 0 1 0.001)
;; 0.249999875000001
;; > (simpson cube 0.0 1.0 1000)
;; 0.25000000000000017
;; 测试结果表明,simpson公式在取同样的间隔精度时,要比原文中的公式更精确。