2013-01-02 10 views
6

これは宿題に関する質問ではありません。私は区間算術の理解と演習2.16の意味に慣れていません。SICP 2.16 interval-arithmetic(scheme)

セクション2.14で定義された区間算術は、通常の算術演算の特性を示さない。 2つは同等の演算、すなわち(r1 * r2)/(r1 + r2)と1 /(1/r1 + 1/r2)、 の結果が異なるはずです。この演習では、なぜこれが当てはまるのか、そして、そうでない場合の区間算術システムを構築することが可能かどうかを尋ねる。

このセクションでは、電気部品の抵抗の誤差マージンの計算に取り組んでいます。私は、これらの言葉では、間隔を掛けたり、分けたりすることが、どういう意味か分かりません。 2つの間隔を掛け合わせるアプリケーションは何ですか?

この例では問題なく区間演算システムを構築できますか?

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#%_sec_2.1.4

(define (make-interval a b) 
    (cons a b)) 

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

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

(define (lower-bound i) 
    (car i)) 

(define (upper-bound i) 
    (cdr i)) 

(define (center i) 
    (/ (+ (upper-bound i) (lower-bound i)) 2)) 

(define (width i) 
    (/ (- (upper-bound i) (lower-bound i)) 2)) 

(define (percent i) 
    (* 100.0 (/ (width i) (center i)))) 

(define (add-interval x y) 
    (make-interval (+ (lower-bound x) (lower-bound y)) 
       (+ (upper-bound x) (upper-bound y)))) 

(define (sub-interval x y) 
    (make-interval (- (lower-bound x) (lower-bound y)) 
       (- (upper-bound x) (upper-bound y)))) 

(define (mul-interval x y) 
    (let ((p1 (* (lower-bound x) (lower-bound y))) 
     (p2 (* (lower-bound x) (lower-bound y))) 
     (p3 (* (lower-bound x) (lower-bound y))) 
     (p4 (* (lower-bound x) (lower-bound y)))) 
    (make-interval (min p1 p2 p3 p4) 
        (max p1 p2 p3 p4)))) 

(define (div-interval x y) 
    (if (= (width y) 0) 
     (error "division by interval with width 0") 
     (mul-interval x 
        (make-interval (/ 1.0 (upper-bound y)) 
            (/ 1.0 (lower-bound y)))))) 

(define (parl1 r1 r2) 
    (div-interval (mul-interval r1 r2) 
       (add-interval r1 r2))) 

(define (parl2 r1 r2) 
    (let ((one (make-interval 1 1))) 
       (div-interval one 
          (add-interval (div-interval one r1) 
             (div-interval one r2)))) 

(define (r1 (make-interval 4.0 3.2))) 
(define (r2 (make-interval 3.0 7.2))) 

(center (parl1 r1 r2)) 
(width (parl1 r1 r2)) 
(newline) 
(center (parl2 r1 r2)) 
(width (parl2 r1 r2)) 

答えて

8

区間演算の動作はfieldの算術構造を持っていないので、これが起こります。

Sussmanによれば、練習は難しい - フィールド構造の各操作を確認し、どちらが満足できないかを確認する必要があります。

この演習では、区間演算が関数範囲の算術演算ではないことを示すように指示しています。

ドメイン[-1,1]で定義されたf(x)= x^2のような関数は、[-1,1] * [-1、-1]に含まれる の範囲[0,1]シンボル番号xをシンボルxのドメインに置き換えたものである。

f(x、y)= x * yのように、次元ごとに異なる変数を使用する同様の関数を定義すると、この関数の範囲はドメイン[-1,1] * [-1,1]は、区間[-1,1] * [-1,1] = [-1,1]と同じです。

関数f(..、x、..)が各変数に連続していることが常に起こります。x各記号が定義内で1回のみ使用されている場合は、範囲演算が区間演算と同じになります。 f。アリスの最初の式

、並列抵抗は は2回変数R1、及び2回変数R2、 を繰り返し、この機能の範囲は、対応の製品で 含まれるのと同じ引数を使用して計算されそれぞれの名前を対応する ドメイン間隔で置き換えることによって、関数の式 から得られた間隔を計算しますが、厳密には同じではありません。

書き換え関数の範囲が、書き換え関数の式を適用して得られた間隔と同じになるように関数を書き直すかどうかを尋ねられます。書き換え関数の対応する名前のドメインに等しい間隔で置き換えられます可能な機能ごとにこれが不可能であることを示すために使用されます。

この問題は「依存性問題」と呼ばれ、それはSICPの目的外の理解であり、それを解決するために複数の変数で微分方程式を必要とする大きな 問題です。

Sussman自身が述べたように、この演習の目的は、データを複数の方法でエンコードできることを示すことです。焦点は数学ではなく、データ抽象化です。