Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-intermediate-reader.ss" "lang")((modname |23.4|) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp") (lib "graphing.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp") (lib "graphing.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;integrate-kepler : (number -> number) number number
5 12687dd9 2023-08-04 jrmu ;Integrate f from left to right according to kepler's rule (split the curve into two trapezoids and evaluate the area of the trapezoids).
6 12687dd9 2023-08-04 jrmu
7 12687dd9 2023-08-04 jrmu (define (integrate-kepler f left right)
8 12687dd9 2023-08-04 jrmu (local ((define average (/ (- right left) 2))
9 12687dd9 2023-08-04 jrmu (define midpoint (+ left average)))
10 12687dd9 2023-08-04 jrmu (+ (area-of-trapezoid average (f left) (f midpoint))
11 12687dd9 2023-08-04 jrmu (area-of-trapezoid average (f midpoint) (f right)))))
12 12687dd9 2023-08-04 jrmu
13 12687dd9 2023-08-04 jrmu ;area-of-trapezoid : number number number -> number
14 12687dd9 2023-08-04 jrmu ;Given the width, height1, and height2, compute the area of the trapezoid according to the formula A = width * (1/2) * (height1 + height2).
15 12687dd9 2023-08-04 jrmu (define (area-of-trapezoid width height1 height2)
16 12687dd9 2023-08-04 jrmu (* width 1/2 (+ height1 height2)))
17 12687dd9 2023-08-04 jrmu
18 12687dd9 2023-08-04 jrmu #|
19 12687dd9 2023-08-04 jrmu (define (y=x x)
20 12687dd9 2023-08-04 jrmu x)
21 12687dd9 2023-08-04 jrmu (define (y=x2 x)
22 12687dd9 2023-08-04 jrmu (sqr x))
23 12687dd9 2023-08-04 jrmu (define (y=x3 x)
24 12687dd9 2023-08-04 jrmu (expt x 3))
25 12687dd9 2023-08-04 jrmu |#
26 12687dd9 2023-08-04 jrmu
27 12687dd9 2023-08-04 jrmu ;series : (N[>=0] -> number) N[>=0] -> number
28 12687dd9 2023-08-04 jrmu ;Given a-term and n, determine the sum of the first n-th terms in the sequence a-term.
29 12687dd9 2023-08-04 jrmu
30 12687dd9 2023-08-04 jrmu (define (series a-term n)
31 12687dd9 2023-08-04 jrmu (cond
32 12687dd9 2023-08-04 jrmu [(zero? n) (a-term n)]
33 12687dd9 2023-08-04 jrmu [else (+ (a-term n)
34 12687dd9 2023-08-04 jrmu (series a-term (sub1 n)))]))
35 12687dd9 2023-08-04 jrmu
36 12687dd9 2023-08-04 jrmu ;integrate : (number -> number) number number number
37 12687dd9 2023-08-04 jrmu ;Divide the interval between left and right into R rectangles and approximate the area under the curve by the sum of the area of the rectangles with their height taken at the midpoint. integrate sums the area of the rectangles, with the first rectangle given an index of 0, and the last, R-1.
38 12687dd9 2023-08-04 jrmu
39 12687dd9 2023-08-04 jrmu ;area-of-rectangle : N -> number
40 12687dd9 2023-08-04 jrmu ;Find the area of the i-th rectangle, with the first rectangle given an index of 0.
41 12687dd9 2023-08-04 jrmu
42 12687dd9 2023-08-04 jrmu ;midpoint : N -> number
43 12687dd9 2023-08-04 jrmu ;Find the midpoint of the i-th rectangle, where the first rectangle has an index of 0.
44 12687dd9 2023-08-04 jrmu
45 12687dd9 2023-08-04 jrmu (define (integrate f left right R)
46 12687dd9 2023-08-04 jrmu (local ((define width (/ (- right left) R))
47 12687dd9 2023-08-04 jrmu (define step (/ width 2))
48 12687dd9 2023-08-04 jrmu (define (area-of-rectangle i)
49 12687dd9 2023-08-04 jrmu (* width (f (midpoint i))))
50 12687dd9 2023-08-04 jrmu (define (midpoint i)
51 12687dd9 2023-08-04 jrmu (cond
52 12687dd9 2023-08-04 jrmu [(zero? i) (+ left step)]
53 12687dd9 2023-08-04 jrmu [else (+ width (midpoint (sub1 i)))])))
54 12687dd9 2023-08-04 jrmu (series area-of-rectangle (- R 1))))
55 12687dd9 2023-08-04 jrmu
56 12687dd9 2023-08-04 jrmu (define (y1 x) (+ x 4))
57 12687dd9 2023-08-04 jrmu (define (y2 x) (- 4 x))
58 12687dd9 2023-08-04 jrmu (define (y3 x) (+ x 10))
59 12687dd9 2023-08-04 jrmu (define (y4 x) (- 10 x))
60 12687dd9 2023-08-04 jrmu (define (y5 x) 12)
61 12687dd9 2023-08-04 jrmu
62 12687dd9 2023-08-04 jrmu (define listofeqns (list y1
63 12687dd9 2023-08-04 jrmu y2
64 12687dd9 2023-08-04 jrmu y3
65 12687dd9 2023-08-04 jrmu y4
66 12687dd9 2023-08-04 jrmu y5))
67 12687dd9 2023-08-04 jrmu (define listofcolors '(blue
68 12687dd9 2023-08-04 jrmu red
69 12687dd9 2023-08-04 jrmu black
70 12687dd9 2023-08-04 jrmu green
71 12687dd9 2023-08-04 jrmu orange
72 12687dd9 2023-08-04 jrmu purple))
73 12687dd9 2023-08-04 jrmu
74 12687dd9 2023-08-04 jrmu ;binarymap : (X Y -> Z) (listof X) (listof Y) -> (listof Z)
75 12687dd9 2023-08-04 jrmu ;Maps alox and aloy simultaneously, together, to aloz using operator.
76 12687dd9 2023-08-04 jrmu (define (binarymap operator alox aloy)
77 12687dd9 2023-08-04 jrmu (cond
78 12687dd9 2023-08-04 jrmu [(empty? alox) empty]
79 12687dd9 2023-08-04 jrmu [else (cons (operator (first alox) (first aloy))
80 12687dd9 2023-08-04 jrmu (binarymap operator (rest alox) (rest aloy)))]))
81 12687dd9 2023-08-04 jrmu
82 12687dd9 2023-08-04 jrmu ;(binarymap graph-line listofeqns listofcolors)
83 12687dd9 2023-08-04 jrmu
84 12687dd9 2023-08-04 jrmu ;line-from-point+slope : posn number -> (number -> number)
85 12687dd9 2023-08-04 jrmu ;Given point and slope, return a function that represents the desired line.
86 12687dd9 2023-08-04 jrmu
87 12687dd9 2023-08-04 jrmu (define (line-from-point+slope point slope)
88 12687dd9 2023-08-04 jrmu (local ((define (f x)
89 12687dd9 2023-08-04 jrmu (+ (* slope
90 12687dd9 2023-08-04 jrmu (- x (posn-x point)))
91 12687dd9 2023-08-04 jrmu (posn-y point))))
92 12687dd9 2023-08-04 jrmu f))
93 12687dd9 2023-08-04 jrmu
94 12687dd9 2023-08-04 jrmu (define y=x+4 (line-from-point+slope (make-posn 0 4) 1))
95 12687dd9 2023-08-04 jrmu
96 12687dd9 2023-08-04 jrmu #|
97 12687dd9 2023-08-04 jrmu (graph-line y=x+4 'green)
98 12687dd9 2023-08-04 jrmu (graph-line y1 'black)
99 12687dd9 2023-08-04 jrmu |#
100 12687dd9 2023-08-04 jrmu
101 12687dd9 2023-08-04 jrmu (define (y0 x)
102 12687dd9 2023-08-04 jrmu (+ (sqr x) (* -4 x) 7))
103 12687dd9 2023-08-04 jrmu
104 12687dd9 2023-08-04 jrmu ;secant-line : (number -> number) number number -> (number -> number)
105 12687dd9 2023-08-04 jrmu ;Given f, e, and x, returns the function that corresponds to the line that passes through (x-e, f(x-e)) and (x+e, f(x+e)) (ie, the secant line).
106 12687dd9 2023-08-04 jrmu
107 12687dd9 2023-08-04 jrmu (define (secant-line f e x)
108 12687dd9 2023-08-04 jrmu (local ((define a-slope (/ (- (f (+ x e))
109 12687dd9 2023-08-04 jrmu (f (- x e)))
110 12687dd9 2023-08-04 jrmu (* 2 e)))
111 12687dd9 2023-08-04 jrmu (define a-point (make-posn (- x e)
112 12687dd9 2023-08-04 jrmu (f (- x e)))))
113 12687dd9 2023-08-04 jrmu (line-from-point+slope a-point a-slope)))
114 12687dd9 2023-08-04 jrmu
115 12687dd9 2023-08-04 jrmu ;(graph-fun y0 'purple)
116 12687dd9 2023-08-04 jrmu ;(graph-line (secant-line y0 0.5 3) 'green)
117 12687dd9 2023-08-04 jrmu
118 12687dd9 2023-08-04 jrmu #|
119 12687dd9 2023-08-04 jrmu
120 12687dd9 2023-08-04 jrmu ;d/dx : (number -> number) -> (number -> number)
121 12687dd9 2023-08-04 jrmu ;Returns f', the slope of f.
122 12687dd9 2023-08-04 jrmu
123 12687dd9 2023-08-04 jrmu (define (d/dx f)
124 12687dd9 2023-08-04 jrmu (local ((define (slope x) (/ (- (f (+ x e))
125 12687dd9 2023-08-04 jrmu (f (- x e)))
126 12687dd9 2023-08-04 jrmu (* 2 e)))
127 12687dd9 2023-08-04 jrmu (define e 0.01))
128 12687dd9 2023-08-04 jrmu slope))
129 12687dd9 2023-08-04 jrmu |#
130 12687dd9 2023-08-04 jrmu
131 12687dd9 2023-08-04 jrmu ;d/dx : (number -> number) number -> (number -> number)
132 12687dd9 2023-08-04 jrmu ;Returns f', the slope of f, given epsilon e.
133 12687dd9 2023-08-04 jrmu
134 12687dd9 2023-08-04 jrmu (define (d/dx f e)
135 12687dd9 2023-08-04 jrmu (local ((define (slope x) (/ (- (f (+ x e))
136 12687dd9 2023-08-04 jrmu (f (- x e)))
137 12687dd9 2023-08-04 jrmu (* 2 e))))
138 12687dd9 2023-08-04 jrmu slope))
139 12687dd9 2023-08-04 jrmu
140 12687dd9 2023-08-04 jrmu
141 12687dd9 2023-08-04 jrmu ;line-from-two-points : posn posn -> (number -> number)
142 12687dd9 2023-08-04 jrmu ;Given p1 and p2, return a function that represents the line.
143 12687dd9 2023-08-04 jrmu
144 12687dd9 2023-08-04 jrmu (define (line-from-two-points p1 p2)
145 12687dd9 2023-08-04 jrmu (cond
146 12687dd9 2023-08-04 jrmu [(zero? (- (posn-x p2) (posn-x p1))) (error 'line-from-two-points "vertical line")]
147 12687dd9 2023-08-04 jrmu [else (local ((define slope (/ (- (posn-y p2) (posn-y p1))
148 12687dd9 2023-08-04 jrmu (- (posn-x p2) (posn-x p1))))
149 12687dd9 2023-08-04 jrmu (define a-line (line-from-point+slope p1 slope))
150 12687dd9 2023-08-04 jrmu (define (f x)
151 12687dd9 2023-08-04 jrmu (a-line x)))
152 12687dd9 2023-08-04 jrmu f)]))
153 12687dd9 2023-08-04 jrmu
154 12687dd9 2023-08-04 jrmu (define y6 (line-from-two-points (make-posn 2 3)
155 12687dd9 2023-08-04 jrmu (make-posn 2.3 8)))
156 12687dd9 2023-08-04 jrmu
157 12687dd9 2023-08-04 jrmu (graph-line y6 'black)
158 12687dd9 2023-08-04 jrmu
159 12687dd9 2023-08-04 jrmu (define (y7 x)
160 12687dd9 2023-08-04 jrmu (+ (* 1/60 (* x x x))
161 12687dd9 2023-08-04 jrmu (* -1/10 (* x x))
162 12687dd9 2023-08-04 jrmu 5))
163 12687dd9 2023-08-04 jrmu
164 12687dd9 2023-08-04 jrmu (define a-slope (d/dx y7 2))
165 12687dd9 2023-08-04 jrmu (define b-slope (d/dx y7 1))
166 12687dd9 2023-08-04 jrmu (define c-slope (d/dx y7 0.5))
167 12687dd9 2023-08-04 jrmu (list (a-slope 4)
168 12687dd9 2023-08-04 jrmu (b-slope 4)
169 12687dd9 2023-08-04 jrmu (c-slope 4))