理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

問題1-36

近似値を印字するようにfixed-pointを修正してやった。

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

で、x^x=1000の解を求めてやるお!
まずは、average dampingを使わないで、x\mapsto \log (1000)/\log(x)不動点をさがす。

gosh> (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

なげーーー。
次はaverage damping使って、x\mapsto \frac 12 \left(\frac{\log 1000}{\log x}+x\right)不動点をさがす。

gosh> (fixed-point (lambda (x)
	       (/ (+ (/ (log 1000) (log x)) x) 2))
	     2.0)

2.0
5.9828921423310435
4.922168721308343
4.628224318195455
4.568346513136242
4.5577305909237005
4.555909809045131
4.555599411610624
4.5555465521473675
4.555537551999825

というわけで、average dampingはすごい!というおはなし。