ひまシリーズ

問題 2.13

(define (make-center-percent c p)
  (make-center-width c (* c p)))

前問で、make-center-percent 手続きは make-center-width 手続きを使って実装しました。

(define (make-center-width c w)
  (make-interval (- c w) (+ c w)))

アリッサがした実装そのままですが、make-center-width はこのように実装できるので、
w には (* c p) の値を渡すわけですから、つまり区間とパーセントの関係は

下限値 : 中央値 - (中央値 * パーセント)
上限値 : 中央値 + (中央値 * パーセント)

となります。

ここからは、10 パーセントを 10 と表しますが、10 として表すか、0.1 として表すかは表現の違いでしかありませんので、気にしないようにしてください。

区間 X±a%、区間 Y±b% としたとき、
区間 X Y は、それぞれ

(x - x * a / 100 . x + x * a / 100)
(y - y * b / 100 . y + y * b / 100)

と表わすことができます。

X > 0、Y > 0 のとき、区間 X Y の積は

下限 = (x - x * a / 100) * (y - y * b / 100)
上限 = (x + x * a / 100) * (y + y * b / 100)

となります。(mul-interval の Ben 改良版でない、わかりやすい方を思い出してください。)

下限から計算してみます。

下限 = (x - x * a / 100) * (y - y * b / 100)

展開して、

下限 = xy - xy * b / 100 - xy * a / 100 + xy * a * b / 10000

二項目以降を xy でくくってまとめます。

下限 = xy - xy * (b / 100 + a / 100 - a * b / 10000)

ここで、a、b は十分小さいですから a * b / 10000 は 0 として無視してしまいます。

下限 = xy - xy * ((a + b) / 100)

となります。なお、この式の形、見覚えがありませんか?

同様に上限は、

上限 = (x + x * a / 100) * (y + y * b / 100)

展開して、

上限 = xy + xy * b / 100 + xy * a / 100 + xy * a * b / 10000

二項目以降を xy でくくってまとめます。

上限 = xy + xy * (b / 100 + a / 100 + a * b / 10000)

ここで、a、b は十分小さいですから a * b / 10000 は 0 として無視してしまいます。

上限 = xy + xy * ((a+b) / 100)

となります。この式の形、見覚えがありますよね?

よって、区間 X Y の積は、

(xy - xy * ((a + b) / 100) . xy + xy * ((a+b) / 100))

と表すことができ、さらに、相対許容誤差で区間を表わすと、

xy ± (a+b)%

と書けます。

したがって、
相対許容誤差が十分小さいならば、二つの区間の積の相対許容誤差は、
それぞれの誤差を足したものとして簡単な式で表わせることがわかります。

長々と言葉と式で説明してきましたが、
実際の値でどうなるのか見てみましょう。

;; r1 = 6.8Ω ±10%
(define r1 (make-center-percent 6.8 0.1))

;; r2 = 4.7Ω ±5%
(define r2 (make-center-percent 4.7 0.05))

gosh> (percent r1)
0.09999999999999996
gosh> (percent r2)
0.050000000000000065

このような interval を考えたとき、
積の結果の percent はどうなるでしょう?

gosh> (percent (mul-interval r1 r1))
0.19801980198019797

gosh> (percent (mul-interval r2 r2))
0.09975062344139664

gosh> (percent (mul-interval r1 r2))
0.1492537313432836

だいたい percent を足し合わせた値になっているのがわかるでしょうか?
実際に計算してみても、

相対許容誤差が十分小さいならば、二つの区間の積の相対許容誤差は、
それぞれの誤差を足したものとして簡単な式で表わせることがわかります。

と言えそうです。