Skip to content

transformation

; Derivate of a function
(define (deriv g)
    (lambda (x) (/ (- (g (+ x dx)) (g x)) dx)))
(define dx 0.00001)

; Evaluate derivative of x^3 -> 3x^2
; i.e. x -> x^3 at x=5 is 75
(define (cube x) (* x x x))
((deriv cube) 5) ;Value: 75.00014999664018

; Newton's method as fixed point process,
; f(x) = x - g(x)/Dg(x)
(define tolerance 0.00001)
(define (fixed-point f first-guess)
    (define (close-enough? v1 v2)
        (< (abs (- v1 v2)) tolerance))
    (define (try guess)
        (let ((next (f guess)))
            (if (close-enough? guess next)
                next
                (try next))))
    (try first-guess))
(define (newton-transform g)
    (lambda (x) (- x (/ (g x) ((deriv g) x)))))

(define (newtons-method g guess) (fixed-point (newton-transform g) guess))

; Finding square root
; y -> y^2 - x 
(define (newton-sqrt x)
    (newtons-method (lambda (y) (- (square y) x)) 1.0))

(newton-sqrt 26) ;Value: 5.099019513592785

; Abstractions and first-class procedures
(define (fixed-point-of-transform g transform guess) 
    (fixed-point (transform g) guess))

; Square root v1 (using average damp y->x/y)
(define (average-damp f)
    (lambda (x) ((lambda (a b) (/ (+ a b) 2)) x (f x))))
(define (sqrt-v1 x)
    (fixed-point-of-transform
        (lambda (y) (/ x y)) average-damp 1.0))
(sqrt-v1 28) ;Value: 5.291502622129181

; Square root v2 (using Newton's transform)
(define (sqrt-v2 x) (fixed-point-of-transform
            (lambda (y) (- (square y) x)) newton-transform 1.0))
(sqrt-v2 28) ;Value: 5.291502622129181