sicp习题试解 (2.9)

类别:编程语言 点击:0 评论:0 推荐:

; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 04/25/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================


;; SICP No.2.9

;; 对于一个interval x = (l(x), u(x)),
;; (u(x)为x的upper-bound,l(x)为x的lower-bound)
;; 其windth的数学定义为 w(x) = 1/2 * (u(x) - l(x))
;; (显然,对于任何x, w(x)>= 0 )
;; 设c(x) = 1/2 * (u(x) + l(x)),则
;; l(x) = c(x) - w(x) 同时 u(x) = c(x) + w(x)

;;
;; 对于两个interval:x1和x2的加法
;; w(x1+x2) = w(l(x1)+l(x2), u(x1)+u(x2))
;; = 1/2 * (u(x1)+u(x2)-l(x1)-l(x2))
;; = 1/2 * (u(x1)-l(x1)) + 1/2 * (u(x2)-l(x2))
;; = w(x1) + w(x2)
;;
;; 同理对于两个interval:x1和x2的减法,可得
;; w(x1-x2) = w(x1) + w(x2)
;;
;; 对于两个interval:x1和x2的乘法
;; 我们注意到,x1,x2上下界的符号不知道,
;; 因此不能说l(x1)*l(x2)为最小u(x1)*u(x2)最大
;; 按照我们在课文中定义乘法时的分析,任何两端的组合均可能为最大(小)值
;; 设 s 是一个集合 {l(x1)*l(x2), l(x1)*u(x2), u(x1)*l(x2), u(x1)*u(x2)}
;; 则 s={c(x1)*c(x2) - w(x1)c(x2) - c(x1)w(x2) + w(x1)w(x2),
;; c(x1)*c(x2) - w(x1)c(x2) + c(x1)w(x2) - w(x1)w(x2),
;; c(x1)*c(x2) + w(x1)c(x2) - c(x1)w(x2) - w(x1)w(x2),
;; c(x1)*c(x2) + w(x1)c(x2) + c(x1)w(x2) + w(x1)w(x2)}
;; 而 w(x1*x2) = w(min(s),max(s))
;; 通过简单列举我们可知,无论min(s)和max(s)取自s中的任何一对搭配
;; w(x1*x2) = 1/2*(max(s)-min(s)) 均同时含有w和c的项,因为w和c
;; 是互相独立的自变量,因此x1,x2相乘所得数x的width不是仅依赖于x1和
;; x2的width为自变量的函数。
;;
;; 除法与乘法同理
;;
;; 原题中,对于乘除法的分析仅要求举例说明即可。因此可以设l(x1),l(x2)均大于0的
;; 最简单情况来分析,结果显而易见。

本文地址:http://com.8s8s.com/it/it22112.htm