SICP 読み (17)
早く 2.2 節に取りかかりたい、と思いつつ我慢。
問題 2.12
追加した手続きを以下に。
(define (make-center-width c w) (make-interval (- c w) (+ c w))) (define (center i) (/ (+ (lower-bound i) (upper-bound i)) 2)) (define (width i) (/ (- (upper-bound i) (lower-bound i)) 2)) (define (make-center-percent c p) (make-interval (- c (* c (/ p 100))) (+ c (* c (/ p 100))))) (define (percent i) (* 100 (/ (- (upper-bound i) (center i)) (center i))))
100 を掛けたり割ったりで微妙。試験は略で。
問題 2.13
色々な値を使って試してみた。
(define i1 (make-center-percent 5 0.1)) (define i2 (make-center-percent 10 0.2)) (define i3 (make-center-percent 50 0.01)) (define i4 (make-center-percent 20 0.03)) (define i5 (make-center-percent 30 10)) (define i6 (make-center-percent 20 5))
適当かどうかは不明ですが、とりあえず上記を使用。まず、i1 と i2 を。
gosh> (mul-interval i1 i2) (49.850100000000005 . 50.150099999999995) gosh> (percent i1) 0.09999999999999788 gosh> (percent i2) 0.19999999999999576 gosh> (* (center i1) (center i2)) 50.0 gosh> i1 (4.995 . 5.005) gosh> i2 (9.98 . 10.02) gosh> (* (lower-bound i1) (lower-bound i2)) 49.850100000000005 gosh> (/ 0.15 50) 0.003 gosh>
むむ。i1 は 0.1% で i2 は 0.2% が許容誤差。i1 と i2 を掛けた下限が 49.85 として、差分は 0.15 で積の center とのナニは 0.003。i1 の誤差と i2 の誤差を加えた値がパーセント相対許容誤差と見てよいのかな。
これを前提に i3 と i4 で試験してみる。
gosh> i3 (49.995 . 50.005) gosh> i4 (19.994 . 20.006) gosh> (percent i3) 0.010000000000005116 gosh> (percent i4) 0.030000000000001137 gosh> (+ (percent i3) (percent i4)) 0.04000000000000625 gosh> (* (center i3) (center i4) (/ (+ (percent i3) (percent i4)) 100)) 0.40000000000006253 gosh> (mul-interval i3 i4) (999.60003 . 1000.40003) gosh>
なかなか良い数値に見えるんですが駄目??
次は大きい誤差で試験。
gosh> i5 (27.0 . 33.0) gosh> i6 (19.0 . 21.0) gosh> (percent i5) 10.0 gosh> (percent i6) 5.0 gosh> (+ (percent i5) (percent i6)) 15.0 gosh> (* (center i5) (center i6) (/ (+ (percent i5) (percent i6)) 100)) 90.0 gosh> (mul-interval i5 i6) (513.0 . 693.0) gosh>
を、大きい誤差だと数字が合わなくなってるかも。90 ではなくて 87 と 93 になっているのか??
で、結論としては
二つの区間の積の相対許容誤差 = 二つの区間の相対許容誤差の和
で良いのかなぁ。(微妙
追記
ちなみに上記の結論は、相対許容誤差が小さい時限定、とゆー事で。