blob: c2a0ca9a1213d8ae7b64abe0e909cf6fbee5c8a3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#lang racket
(require "../../shared/intervals.rkt")
(define (print-interval-percent i)
(newline)
(display "interval{")
(display (center i))
(display ",")
(display (percent i))
(display "}")
(newline))
(define (lem1 i1 i2)
(div-interval (mul-interval i1 i2)
(add-interval i1 i2)))
(define (lem2 i1 i2)
(let ((one (make-center-percent 1.0 0)))
(div-interval
one
(add-interval
(div-interval one i1)
(div-interval one i2)))))
;; adding scales the heighest percent to the new center
(define (print-add)
(let ((i1 (make-center-percent 100.0 2.0))
(i2 (make-center-percent 200.0 3.0)))
(newline)
(println "*** add")
(print-interval-percent i1)
(print-interval-percent i2)
(print-interval-percent (add-interval i1 i1))
(print-interval-percent (add-interval i1 i2))
(print-interval-percent (sub-interval i1 i1))
(print-interval-percent (sub-interval i1 i2))))
;; multiplication and addition of positive intervals
;; adds percentage from both intervals
(define (print-mul)
(let ((i1 (make-interval 2.0 8.0))
(i2 (make-interval 2.0 8.0)))
(newline)
(println "*** mul")
(print-interval-percent i1)
(print-interval-percent i2)
(print-interval-percent (div-interval i1 i1))
(print-interval-percent (div-interval i1 i2))
(print-interval-percent (mul-interval i1 i1))
(print-interval-percent (mul-interval i1 i2))))
;; There are at least some problems as I understand from 2.14 and 2.15:
;; 1. Repeated intervals in an equation are dependent on each other
;; 2. Multiplicative identity is undefined and should not be uncertain
;;
;; In 2.16 I would try to rewrite the code to try to make the inverse under multiplication certain
;; and would try to keep track of dependent intervals and maybe only introduce uncertainty once.
(define (print-lem)
(let ((i1 (make-center-percent 100.0 2.0))
(i2 (make-center-percent 200.0 3.0)))
(newline)
(println "*** lem")
(print-interval-percent i1)
(print-interval-percent i2)
(print-interval-percent (lem1 i1 i2))
(print-interval-percent (lem2 i1 i2))))
(print-add)
(print-mul)
(print-lem)
|