2013-01-02 14 views
6

To nie jest zadanie domowe, po prostu pozostało mi niezadowolenie z mojego rozumienia arytmetyki interwałowej i implikacji ćwiczeń 2.16.SICP 2.16 przedział-arytmetyka (schemat)

Arytmetyka przedziałowa zdefiniowana w sekcji 2.14 nie wykazuje właściwości arytmetycznych normalnych. Dwa powinny być równoważnymi operacjami, (r1 * r2)/(r1 + r2) i 1/(1/r1 + 1/r2), dają różne wyniki. Ćwiczenie zwraca się z pytaniem, dlaczego tak się dzieje i czy możliwe jest zbudowanie układu arytmetyczno-przedziałowego, w którym tak nie jest.

Sekcja dotyczy obliczania marginesów błędów rezystancji elementów elektrycznych. Nie jestem pewien, czy rozumiem, co to znaczy, w ten sposób, mnożyć i dzielić interwały. Jaka jest aplikacja do pomnożenia dwóch przedziałów razem?

Czy w tym przykładzie możliwe jest skonstruowanie systemu arytmetyczno-czasowego bez problemu?

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)) 

Odpowiedz

8

Dzieje się tak dlatego, że operacje w przedziale arytmetyki nie mają arytmetyczną strukturę field.

Jak mówi Sussman, ćwiczenie jest trudne - należy sprawdzić każdą operację struktury pola i sprawdzić, która z nich nie jest satysfakcjonująca.

Ćwiczenie prosi nas o wykazanie, że arytmetyka przedziałowa nie jest arytmetyczną zakresów funkcji.

Funkcja taka jak f (x) = x^2 zdefiniowana w domenie [-1, 1] ma zakres [0,1], który jest zawarty w [-1,1] * [-1, 1] = [-1,1], uzyskany przez zastąpienie symbolu x przez domenę symbolu x.

Jeśli zdefiniujemy podobną funkcję, która używa innej zmiennej dla każdego wymiaru, np. W f (x, y) = x * y, to zakres tej funkcji, gdy jest zdefiniowany w domenie [-1,1] * [-1,1], jest taki sam jak przedział [-1,1] * [-1,1] = [-1, 1], ponieważ x jest używane raz, a więc z y.

Zdarza się, że przez cały czas, gdy funkcja f (.., x, ..) są ciągłe w każdej zmiennej x mamy do arytmetyki zakres być identyczna z częstotliwością arytmetycznych, jeżeli każdy symbol jest używany tylko raz w definicji fa.

W pierwszej formuły Alice opornik równoległy jest obliczana powtarzać 2 razy zmienna R1 i 2 razy zmienne R2, i przy użyciu tych samych argumentów zakres tej funkcji jest zawarte w produkcie odpowiadający interwały uzyskane z formuły funkcji , zastępując każdą nazwę przez odpowiadający jej przedział domeny , ale nie jest ona ściśle taka sama.

Zostajesz poproszony o przepisanie dowolnej funkcji w taki sposób, aby zakres przepisanej funkcji był taki sam, jak przedział uzyskany przez zastosowanie formuły przepisanej funkcji, przy czym nazwy zastąpione zostały przerwami równymi domenie odpowiedniej nazwy od przepisanego lub pokazać, że nie jest to możliwe dla każdej możliwej funkcji.

Ten problem nazywa się "problemem zależności" i jest to duży problem, którego zrozumienie wykracza poza cel SICP i wymaga rozwiązywania równań różniczkowych w wielu zmiennych.

Celem tego ćwiczenia jest, jak powiedział sam Sussman, tylko pokazanie, że dane mogą być kodowane na wiele sposobów. Skupiamy się nie na matematyce, ale na abstrakcji danych.