Blame


1 665c255d 2023-08-04 jrmu (define tolerance 0.00001)
2 665c255d 2023-08-04 jrmu (define (fixed-point f first-guess)
3 665c255d 2023-08-04 jrmu (define (close-enough? v1 v2)
4 665c255d 2023-08-04 jrmu (< (abs (- v1 v2)) tolerance))
5 665c255d 2023-08-04 jrmu (define (try guess)
6 665c255d 2023-08-04 jrmu (let ((next (f guess)))
7 665c255d 2023-08-04 jrmu (if (close-enough? guess next)
8 665c255d 2023-08-04 jrmu next
9 665c255d 2023-08-04 jrmu (try next))))
10 665c255d 2023-08-04 jrmu (try first-guess))
11 665c255d 2023-08-04 jrmu
12 665c255d 2023-08-04 jrmu (define (average-damp f)
13 665c255d 2023-08-04 jrmu (lambda (x) (average x (f x))))
14 665c255d 2023-08-04 jrmu (define (sqrt x)
15 665c255d 2023-08-04 jrmu (fixed-point (average-damp (lambda (y) (/ x y)))
16 665c255d 2023-08-04 jrmu 1.0))
17 665c255d 2023-08-04 jrmu (define (cube-root x)
18 665c255d 2023-08-04 jrmu (fixed-point (average-damp (lambda (y) (/ x (square y))))
19 665c255d 2023-08-04 jrmu 1.0))
20 665c255d 2023-08-04 jrmu (define (deriv g)
21 665c255d 2023-08-04 jrmu (lambda (x)
22 665c255d 2023-08-04 jrmu (/ (- (g (+ x dx)) (g x))
23 665c255d 2023-08-04 jrmu dx)))
24 665c255d 2023-08-04 jrmu (define dx 0.00001)
25 665c255d 2023-08-04 jrmu (define (newton-transform g)
26 665c255d 2023-08-04 jrmu (lambda (x)
27 665c255d 2023-08-04 jrmu (- x (/ (g x) ((deriv g) x)))))
28 665c255d 2023-08-04 jrmu (define (newtons-method g guess)
29 665c255d 2023-08-04 jrmu (fixed-point (newton-transform g) guess))
30 665c255d 2023-08-04 jrmu (define (sqrt x)
31 665c255d 2023-08-04 jrmu (newtons-method (lambda (y) (- (square y) x))
32 665c255d 2023-08-04 jrmu 1.0))
33 665c255d 2023-08-04 jrmu (define (fixed-point-of-transform g transform guess)
34 665c255d 2023-08-04 jrmu (fixed-point (transform g) guess))
35 665c255d 2023-08-04 jrmu (define (sqrt x)
36 665c255d 2023-08-04 jrmu (fixed-point-of-transform (lambda (y) (/ x y))
37 665c255d 2023-08-04 jrmu average-damp
38 665c255d 2023-08-04 jrmu 1.0))
39 665c255d 2023-08-04 jrmu (define (sqrt x)
40 665c255d 2023-08-04 jrmu (fixed-point-of-transform (lambda (y) (- (square y) x))
41 665c255d 2023-08-04 jrmu newton-transform
42 665c255d 2023-08-04 jrmu 1.0))
43 665c255d 2023-08-04 jrmu (define (cubic a b c)
44 665c255d 2023-08-04 jrmu (define (cube x) (* x x x))
45 665c255d 2023-08-04 jrmu (define (square x) (* x x))
46 665c255d 2023-08-04 jrmu (lambda (x)
47 665c255d 2023-08-04 jrmu (+ (cube x)
48 665c255d 2023-08-04 jrmu (* a (square x))
49 665c255d 2023-08-04 jrmu (* b x)
50 665c255d 2023-08-04 jrmu c)))
51 665c255d 2023-08-04 jrmu
52 665c255d 2023-08-04 jrmu (test-case (newtons-method (cubic 5 2 3) 1.0) -4.710623963172891)
53 665c255d 2023-08-04 jrmu