Blob


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