sicp 1.36

利用迭代x=log(1000)/log(x)求方程x^x=1000的解。

 

1 不用平均阻尼

 

(define (fixed-point f first-guess)
  (let ((eps 0.000001))
    (define (close-enough? g1 g2)
      (< (abs (- g1 g2)) eps))
    (define (try x)
      (display x)
      (newline)
      (if (close-enough? x (f x))
          x
          (try (f x))))
    (try first-guess)))

(define (f x)
  (/ (log 1000) (log x)))

(fixed-point f 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
4.555537970114198
4.555534211524127
4.555536690243655
4.555535055574168
4.5555361336081
4.5555361336081

 

2 使用平均阻尼

 

(define (fixed-point f first-guess)
  (let ((eps 0.000001))
    (define (close-enough? g1 g2)
      (< (abs (- g1 g2)) eps))
    (define (try x)
      (display x)
      (newline)
      (if (close-enough? x (f x))
          x
          (try (f (/ (+ x (f x)) 2)))))
    (try first-guess)))

(define (f x)
  (/ (log 1000) (log x)))

(fixed-point f 2.0)

 

2.0
3.8614453002856424
4.601415311856638
4.550279817165973
4.556124453917843
4.55546958131561
4.5555431295521185
4.555534871564374
4.555535798797531
4.555535798797531

你可能感兴趣的:(F#)