Guest User

SICP 1-3-3

a guest
Mar 22nd, 2015
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.23 KB | None | 0 0
  1. (define tolerance 0.00001)
  2.  
  3. (define (fixed-point f first-guess)
  4.   (define (close-enough? v1 v2)
  5.     (< (abs (- v1 v2)) tolerance))
  6.   (define (try guess)
  7.     (let ((next (f guess)))
  8.       ;; (display next)                    ; added for ex. 1.36
  9.       ;; (newline)
  10.       (if (close-enough? guess next)
  11.           next
  12.           (try next))))
  13.   (try first-guess))
  14.  
  15. (fixed-point cos 1.0)                   ;Value: .7390822985224024
  16.  
  17. (define (average x y)
  18.   (/ (+ x y) 2))
  19.  
  20. (define (sqrt x)
  21.   (fixed-point (lambda (y) (average y (/ x y)))
  22.                1.0))
  23. (sqrt 12)                               ;Value: 3.464101615137755
  24.  
  25. ;; ex. 1.35
  26. (define (golden-ratio x)
  27.   (fixed-point (lambda (x) (average x (+ 1 (/ 1 x))))
  28.                1.0))
  29.  
  30. ;; 10 steps with average damping, 14 steps without
  31. (golden-ratio 1.0)                      ;Value: 1.6180327868852458
  32.  
  33. ;; ex. 1.36
  34. (define (log1000 x)
  35.   (fixed-point (lambda (x) (average x (/ (log 1000) (log x))))
  36.                2.0))
  37.  
  38. ;; Took 33 steps without average damping. With average damping only
  39. ;; took 9 steps.
  40. (log1000 1000)                          ;Value: 4.555532270803653
  41.  
  42. ;; ex. 1.37
  43. (define (cont-frac n d k)
  44.   (define (helper i)
  45.     (if (= i k)
  46.         (/ (n k) (d k))
  47.         (/ (n i)
  48.            (+ (d i) (helper (+ i 1))))))
  49.   (helper 1))
  50.  
  51. (define (cont-frac n d k)
  52.   (define (iter i a)
  53.     (if (= i 0)
  54.         a
  55.         (iter (- i 1) (/ (n i) (+ (d i) a)))))
  56.   (iter (- k 1) (/ (n k) (d k))))
  57.  
  58. ;; needs k=11 to get accurate up to 4 digits
  59. (cont-frac (lambda (i) 1.0)
  60.            (lambda (i) 1.0)
  61.            11)                          ;Value: .6180555555555556
  62.  
  63. ;; ex. 1.38
  64. (define (d-euler i)
  65.   (if (not (= 0 (remainder (+ i 1) 3)))
  66.       1
  67.       (* 2 (/ (+ i 1) 3))))
  68.  
  69. (define e
  70.   (+ 2 (cont-frac (lambda (i) 1.0)
  71.                   d-euler
  72.                   10)))
  73.  
  74. e                                       ;Value: 2.7182817182817183
  75.  
  76. ;; ex. 1.39
  77. (define (tan-cf x k)
  78.   (define (d-tan i)
  79.     (- (* 2 i) 1))
  80.   (define (n-tan i)
  81.     (if (= i 1)
  82.         x
  83.         (- (square x))))
  84.   (cont-frac n-tan
  85.              d-tan
  86.              k))
  87.  
  88. (define pi 3.1415926)
  89.  
  90. (tan (/ pi 6))
  91. (tan-cf (/ pi 6) 100.0)                 ;Value: .577350257280783
Advertisement
Add Comment
Please, Sign In to add comment