2013-01-02 28 views
6

Đây không phải là một câu hỏi về bài tập về nhà, tôi chỉ không hài lòng với sự hiểu biết của tôi về số học khoảng thời gian và hàm ý của bài tập 2.16.SICP 2.16 interval-arithmetic (scheme)

Số học khoảng được xác định theo phần 2.14 không biểu thị các thuộc tính của số học bình thường. Hai nên là các phép toán tương đương, (r1 * r2)/(r1 + r2) và 1/(1/r1 + 1/r2), cho kết quả khác nhau. Bài tập hỏi tại sao đây là trường hợp, và nếu có thể xây dựng một hệ thống số học khoảng thời gian mà trong trường hợp này không phải là trường hợp.

Phần này giải quyết việc tính toán sai số sai số của các thành phần điện. Tôi không chắc tôi hiểu ý nghĩa của nó, trong các thuật ngữ này, để nhân và chia khoảng thời gian. Ứng dụng để nhân hai khoảng thời gian với nhau là gì?

Có thể xây dựng hệ thống số học khoảng không có vấn đề trong ví dụ này không?

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

Trả lời

8

Điều này xảy ra bởi vì các hoạt động trong số học khoảng không có cấu trúc cộng của một field.

Như Sussman nói, việc tập thể dục là khó khăn - bạn cần phải kiểm tra từng hoạt động của cấu trúc trường và xem cái nào không hài lòng.

Bài tập yêu cầu chúng tôi chỉ ra rằng số học khoảng không phải là số học của các dãy hàm.

Một hàm như f (x) = x^2 được xác định trên một miền [-1, 1] có phạm vi [0,1], được bao gồm trong [-1,1] * [-1, 1] = [-1,1], thu được bằng cách thay thế ký hiệu x bằng tên miền của biểu tượng x.

Nếu chúng tôi xác định hàm tương tự sử dụng biến khác cho mỗi thứ nguyên, như trong f (x, y) = x * y, thì phạm vi của hàm này, khi được xác định trên miền [-1,1] * [-1,1], giống với khoảng [-1,1] * [-1,1] = [-1, 1], bởi vì x được sử dụng một lần và vì vậy với y. Nó xảy ra rằng tất cả các thời gian khi chức năng f (.., x, ..) là liên tục trong mỗi biến x chúng tôi có phạm vi arithmetics để được giống hệt nhau với arithmetics khoảng thời gian nếu mỗi biểu tượng được sử dụng chỉ một lần trong định nghĩa của f.

Trong công thức đầu tiên của Alice, điện trở song song được tính lặp lại 2 lần so với biến R1, và 2 lần so với biến R2, và sử dụng đối số cùng một loạt các chức năng này được bao gồm trong sản phẩm của tương ứng khoảng thời gian thu được từ công thức của hàm, bằng cách thay thế từng tên theo khoảng thời gian tương ứng tên miền, nhưng nó không hoàn toàn giống nhau.

Chúng tôi được yêu cầu viết lại bất kỳ hàm nào để phạm vi hàm viết lại giống với khoảng thời gian thu được bằng cách áp dụng công thức hàm được viết lại, tên thay thế bằng khoảng thời gian bằng tên miền tương ứng với tên viết lại chức năng, hoặc để cho thấy rằng điều này là không thể cho mỗi chức năng có thể.

Vấn đề này được gọi là "vấn đề phụ thuộc", và đó là vấn đề lớn , có hiểu biết ngoài mục đích của SICP và yêu cầu phương trình vi phân trong nhiều biến để giải quyết vấn đề.

Mục đích của bài tập này, như Sussman đã nói, chỉ để cho thấy rằng dữ liệu có thể được mã hóa theo nhiều cách. Trọng tâm không phải là về toán học, mà là về trừu tượng dữ liệu.

Các vấn đề liên quan