(define fixed-point
  (lambda (f first-guess)
    (define tolerance 0.00001)
    (define close-enough?
      (lambda (v1 v2)
        (< (abs (- v1 v2)) tolerance)))
    (define try
      (lambda (guess)
        (let ([next (f guess)])
          (if (close-enough? guess next)
              next
              (try next)))))
    (try first-guess)))


(define average
  (lambda (x y)
    (/ (+ x y) 2.0)))



(define dis-fixed-point
  (lambda (f first-guess)
    (define tolerance 0.00001)
    (define close-enough?
      (lambda (v1 v2)
        (< (abs (- v1 v2)) tolerance)))
    (define try
      (lambda (guess)
        (let ([next (f guess)])
          (display guess)
          (newline)
          (if (close-enough? guess next)
              next
              (try next)))))
    (try first-guess)))

 

> (dis-fixed-point (lambda (x) (+ 1 (/ 1.0 x))) 1.0)
1.0
2.0
1.5
1.6666666666666665
1.6
1.625
1.6153846153846154
1.619047619047619
1.6176470588235294
1.6181818181818182
1.6179775280898876
1.6180555555555556
1.6180257510729614
1.6180371352785146
1.6180327868852458

 

(dis-fixed-point (lambda (x) (/ (log 1000) (log x))) 2.0)
2.0
9.965784284662087
3.004472209841214
6.279195757507157
3.759850702401539
5.215843784925895
4.182207192401397
4.8277650983445906
4.387593384662677
4.671250085763899
4.481403616895052
4.6053657460929
4.5230849678718865
4.577114682047341
4.541382480151454
4.564903245230833
4.549372679303342
4.559606491913287
4.552853875788271
4.557305529748263
4.554369064436181
4.556305311532999
4.555028263573554
4.555870396702851
4.555315001192079
4.5556812635433275
4.555439715736846
4.555599009998291
4.555493957531389
4.555563237292884
4.555517548417651
4.555547679306398
4.555527808516254
4.555540912917957
4.555532270803653




Posted on 2013-04-21 14:22  ASOCS  阅读(183)  评论(0编辑  收藏  举报