2013-01-02 21 views
6

Questa non è una domanda per i compiti a casa, sono semplicemente rimasto insoddisfatto della mia comprensione dell'aritmetica degli intervalli e delle implicazioni dell'esercizio 2.16.SICP 2.16 intervallo aritmetico (schema)

L'aritmetica dell'intervallo definita dalla sezione 2.14 non mostra le proprietà dell'aritmetica normale. Due dovrebbero essere operazioni equivalenti, (r1 * r2)/(r1 + r2) e 1/(1/r1 + 1/r2), danno risultati diversi. L'esercizio chiede perché questo è il caso, e se è possibile costruire un sistema aritmetico intervallo in cui questo non è il caso.

La sezione sta affrontando il calcolo dei margini di errore della resistenza dei componenti elettrici. Non sono sicuro di capire cosa significherebbe, in questi termini, moltiplicare e dividere gli intervalli. Qual è l'applicazione per moltiplicare insieme due intervalli?

È possibile costruire un sistema aritmetico ad intervalli senza il problema in questo esempio?

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

risposta

8

Ciò accade perché le operazioni aritmetiche intervallo non hanno la struttura aritmetica di una field.

Come dice Sussman, l'esercizio è difficile: è necessario controllare ciascuna delle operazioni della struttura del campo e vedere quale non è soddisfatta.

L'esercizio ci chiede di mostrare che l'aritmetica dell'intervallo non è l'aritmetica degli intervalli di funzioni.

Una funzione come f (x) = x^2 definita su un dominio [-1, 1] ha l'intervallo [0,1], che è incluso in [-1,1] * [-1, 1] = [-1,1], ottenuto sostituendo il simbolo x dal dominio del simbolo x.

Se definiamo una funzione simile che utilizza una variabile diversa per ogni dimensione, come in f (x, y) = x * y, quindi l'intervallo di questa funzione, quando definito nel dominio [-1,1] * [-1,1], è uguale all'intervallo [-1,1] * [-1,1] = [-1, 1], perché x è usato una volta, e così con y.

Succede che quando la funzione f (.., x, ..) è continua in ogni variabile x, l'aritmetica dell'intervallo deve essere identica con l'aritmetica degli intervalli se ogni simbolo viene utilizzato una sola volta nella definizione di f.

Nella prima formula di Alice, resistenza in parallelo viene calcolata ripetere 2 volte la variabile R1, e 2 volte la variabile R2, e utilizzando lo stesso argomento la gamma di questa funzione è incluso nel prodotto del corrispondente intervalli ottenuti dalla formula della funzione, sostituendo ciascun nome con il corrispondente intervallo di dominio , ma non è esattamente lo stesso.

Ci viene chiesto di riscrivere qualsiasi funzione in modo che l'intervallo della funzione riscritta sia lo stesso dell'intervallo ottenuto applicando la formula della funzione riscritta, con i nomi sostituiti da intervalli equivalenti al dominio del nome corrispondente dal riscritto funzione, o per mostrare che questo non è possibile per ogni funzione possibile.

Questo problema è chiamato "problema di dipendenza" ed è un grande problema , la cui comprensione è fuori dallo scopo di SICP e richiede equazioni differenziali in più variabili per risolverlo.

Lo scopo di questo esercizio è, come ha detto Sussman stesso, solo per mostrare che i dati possono essere codificati in diversi modi. L'attenzione non è sulla matematica, ma sull'astrazione dei dati.