为什么 (R1*R2)/(R1 + R2) 与 1/(1/R1+1/R2)求得的值不同。
(define (par1 r1 r2)
(div-interval (mul-interval r1 r2)
(add-interval r1 r2)))
(define (par1 r1 r2)
(let ((one (make-interval 1 1)))
(div-interval one
(add-interval (div-interval one r1)
(div-interval one r2)))))
比如 r1为 [1,2] r2 为 [3,4]
r1*r2为[3,8] 最小值时r1取1,r2取 3, 最大值时r1取 2,r2取 4
r1 + r2为 [4,6] 最小值时r1取1,r2取3,最大值时r1取2,r2取4
r1*r2/(r1+r2)得出[1/2, 2] 最小值时 r1*r2取最小值,r1+r2取最大值,得出r1,取最小值又取最大值,r2取最小值又取最大值,所以这种求法是错误的。
正确的求值方法如下
(define (make-interval l u)
(cons l u))
(define (lower-bound i)
(car i))
(define (upper-bound i)
(cdr i))
(define (f op)
(lambda (x y) (let ((p1 (op (lower-bound x) (lower-bound y)))
(p2 (op (lower-bound x) (upper-bound y)))
(p3 (op (upper-bound x) (lower-bound y)))
(p4 (op (upper-bound x) (upper-bound y))))
(make-interval (min p1 p2 p3 p4)
(max p1 p2 p3 p4)))))
(define add-interval (f +))
(define sub-interval (f -))
(define mul-interval (f *))
(define div-interval (f /))
(define par1 (f (lambda (x y) (/ (* x y) (+ x y)))))
(define par2 (f (lambda (x y) (/ 1 (+ (/ 1 x) (/ 1 y))))))
浙公网安备 33010602011771号