Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (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)))
- ;; (display next) ; added for ex. 1.36
- ;; (newline)
- (if (close-enough? guess next)
- next
- (try next))))
- (try first-guess))
- (fixed-point cos 1.0) ;Value: .7390822985224024
- (define (average x y)
- (/ (+ x y) 2))
- (define (sqrt x)
- (fixed-point (lambda (y) (average y (/ x y)))
- 1.0))
- (sqrt 12) ;Value: 3.464101615137755
- ;; ex. 1.35
- (define (golden-ratio x)
- (fixed-point (lambda (x) (average x (+ 1 (/ 1 x))))
- 1.0))
- ;; 10 steps with average damping, 14 steps without
- (golden-ratio 1.0) ;Value: 1.6180327868852458
- ;; ex. 1.36
- (define (log1000 x)
- (fixed-point (lambda (x) (average x (/ (log 1000) (log x))))
- 2.0))
- ;; Took 33 steps without average damping. With average damping only
- ;; took 9 steps.
- (log1000 1000) ;Value: 4.555532270803653
- ;; ex. 1.37
- (define (cont-frac n d k)
- (define (helper i)
- (if (= i k)
- (/ (n k) (d k))
- (/ (n i)
- (+ (d i) (helper (+ i 1))))))
- (helper 1))
- (define (cont-frac n d k)
- (define (iter i a)
- (if (= i 0)
- a
- (iter (- i 1) (/ (n i) (+ (d i) a)))))
- (iter (- k 1) (/ (n k) (d k))))
- ;; needs k=11 to get accurate up to 4 digits
- (cont-frac (lambda (i) 1.0)
- (lambda (i) 1.0)
- 11) ;Value: .6180555555555556
- ;; ex. 1.38
- (define (d-euler i)
- (if (not (= 0 (remainder (+ i 1) 3)))
- 1
- (* 2 (/ (+ i 1) 3))))
- (define e
- (+ 2 (cont-frac (lambda (i) 1.0)
- d-euler
- 10)))
- e ;Value: 2.7182817182817183
- ;; ex. 1.39
- (define (tan-cf x k)
- (define (d-tan i)
- (- (* 2 i) 1))
- (define (n-tan i)
- (if (= i 1)
- x
- (- (square x))))
- (cont-frac n-tan
- d-tan
- k))
- (define pi 3.1415926)
- (tan (/ pi 6))
- (tan-cf (/ pi 6) 100.0) ;Value: .577350257280783
Advertisement
Add Comment
Please, Sign In to add comment