開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.1(データ抽象入門)、2.1.4(拡張問題: 区間算術演算)、問題 2.13.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 2.13.
全ての数が正と仮定する。
区間x、yのパーセント許容誤差が十分小さいと仮定、すなわち
(* (/ p1 100) (/ p2 100))としたときの、区間xの最小値。
(- c1 (* c1 (/ p1 100)))区間xの最大値。
(+ c1 (* c1 (/ p1 100)))区間yの最小値。
(- c2 (* c2 (/ p2 100)))区間yの最大値。
(+ c2 (* c2 (/ p2 100)))区間x、yの積。
(make-interval (* (lower-bound x)
(lower-bound y))
(* (upper-bound x)
(upper-bound y)))
(make-interval (* (- c1 (* c1 (/ p1 100)))
(- c2 (* c2 (/ p2 100))))
(* (+ c1 (* c1 (/ p1 100)))
(+ c2 (* c2 (/ p2 100)))))
(make-interval (- (* c1 c2)
(+ (/ (* c1 c2 p2) 100)
(/ (* c1 c2 p1) 100)))
(+ (* c1 c2)
(/ (* c1 c2 p2) 100)
(/ (* c1 c2 p1) 100)))
(make-interval (- (* c1 c2)
(/ (* c1 c2 (+ p1 p2))
100))
(+ (* c1 c2)
(/ (* c1 c2 (+ p1 p2))
100)))
区間x、yの積の中央値。
(/ (+ (*c1 c2) (* c1 c2)) 2) (* c1 c2)区間x、yの積の区間のパーセント相対許容誤差。
(* 100 (/ (- (+ (* c1 c2)
(/ (* c1 c2 (+ p1 p2))
100))
(* c1 c2))
(* c1 c2)))
(* 100 (/ (- (+ 1 (/ (+ p1 p2) 100))
1)
1))
(+ p1 p2)
よって、パーセント教養後さが小さいと仮定できるときは、二つの区間の関野相対許容誤差を、因子の許容誤差の和として近似することができる。
確認。
コード(BBEdit, Emacs)
sample.scm
#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-
;; これまでに書いた手続き
(load "./procedures.scm")
;; 構成子
;; 区間の中央値とパーセント相対許容誤差
(define (make-center-percent c p)
((lambda (x)
(make-interval (- c x)
(+ c x)))
(* (abs c)
(/ p 100))))
;; 選択子
;; パーセント相対許容誤差
(define (percent i)
((lambda (c)
(abs (* 100
(/ (- (upper-bound i)
c)
c))))
(center i)))
(define interval1 (make-center-percent 10 0.5))
(define interval2 (make-center-percent 100 0.05))
(define interval12 (mul-interval interval1 interval2))
(print (+ 0.5 0.05))
(print (percent interval12))
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample.scm 0.55 0.5499986250034374 $
0 コメント:
コメントを投稿