Bạn muốn thiết kế một hệ thống giúp con người giải quyết các vấn đề kỹ thuật. Một feature bạn muốn trong hệ thông là khả năng thao tác số lượng ước tính cần thiết ( như là số các thông số đo được của các thiết bị vật lý) với độ chính xác nhất định, vì vậy khi tính số lượng xắp xỉ kết quả sẽ là một con số nhất định.
Các kỹ sư điện sẽ sử dụng hệ thông của bạn để tính số lượng điện tiêu thụ. Đôi khi cần thiết cho việc tính giá trị điện trở Rp của hai điện trở đặt song song nhau, sử dụng công thức.
Gía trị của điện trở thường được biết đến giới hạn một vài sai số nhất định mà nhà sản xuất cho phép. Ví dụ, nếu bạn mua một điện trở với nhã ghi là “6.8 ohms with 10% tolerance”, thì bạn có thể sử dụng trong khoản giá trị điện trở cho phép là 6.8 − 0.68 = 6.12 và 6.8 + 0.68 = 7.48 ohm. Nếu bạn có một điên trở “6.8-ohm 10% ” đặt song song với một điện trở “4.7-ohm 5%”, thì điện trở đầu ra của hai điện trở đặt song song trong khoảng 2.58 và 2.97ohm.
Ý tưởng để thực thị “đại số về khoảng giá trị” như là một danh sách các toán tử đại số được bao hàm trong khoảng (các object có thể được trình bày trong khoảng giá trị có thể xảy ra với một giá trị chính xác nhất đinh). Kết quả các phép tính adding, subtracting, multiplying, hoặc dividing hai khoảng là một khoảng nhất định, trình bày khoảng giá trị.
Đề xuất rằng tồn tại một object abstract gọi là “interval” nó có hai điểm khoảng: giới hạn dưới và giới hạn trên. Vì thế một khoảng giá trị có thể được khởi tạo bằng procedure make-interval. Chúng ta có thể viết một procedure để tính tổng hai interval. Kết quả giới hạn dưới là tổng của hai giới hạn dưới và trên là tổng của hai giới hạn trên của hai khoảng.
(define (add-interval x y)
(make-interval (+ (lower-bound x) (lower-bound y))
(+ (upper-bound x) (upper-bound y))))
Alyssa also works out the product of two intervals by finding the minimum and the maximum of the products of the bounds and using them
as the bounds of the resulting interval. (min and max are primitives that
find the minimum or maximum of any number of arguments.)
Bạn cũng tìm ra giá trị lớn nhất và nhỏ nhất của kết quả nhân hai interval và sử dụng chúng để làm giới hạn cho kết quả interval.( min và max là các procedure nguyên thủy có trong ngôn ngữ lập trình để tìm giá trị lớn nhất và nhỏ nhất của của bất kì danh sách cac đối số) như sau.
(define (mul-interval x y)
let ((p1 (* (lower-bound x) (lower-bound y)))
(p2 (* (lower-bound x) (upper-bound y)))
(p3 (* (upper-bound x) (lower-bound y)))
(p4 (* (upper-bound x) (upper-bound y))))
(make-interval (min p1 p2 p3 p4)
(max p1 p2 p3 p4))))
Để làm phép chia hai interval, chúng ta chỉ việc nhân interval đầu tiên với nghịch đảo của interval thứ hai. Chú ý là, nghịch đảo giới hạn của interval là nghịch đảo giới hạn dưới và nghịch đảo giới hạn trên tương ứng, thành procedure như sau:
(define (div-interval x y)
(mul-interval
x
(make-interval (/ 1.0 (upper-bound y))
(/ 1.0 (lower-bound y)))))
Bonus bài tập:
Bài 1: Chương trình của bạn vẫn chưa hoàn chỉnh, vì bạn vẫn chưa thực thi abstraction cho interval. Đây là định nghĩa hàm khởi tạo:
(define (make-interval a b) (cons a b))
giờ bạn hãy truy xuất giá trị của giới hạn dưới và giới hạn trên để hoàn thanh thực thi một data abstraction "interval".
Đáp án: (define (lower-bound x)(car x)) ; (define (upper-bound x) (cdr x))
Bài 2: Giờ bạn hãy định nghĩa một procedure sub-interval với các parameter là x và y tương ứng với hai interval, để thực hiện phép trừ giữa hai interval?
Bài tiếp theo: Hierarchical Data and the Closure Property
One thought on “Ví dụ mở: đại số về khoảng giá trị.”