1737年, スイスの数学者 Leonhard Eulerは De Fractionibus Continuisというメモを発表した.
その中にeを自然対数の底としてe - 2 の連分数展開がある.
この分数ではNiはすべて1, Diは順に1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, ... .
問題1.37のcont-fracを使い, Eulerの展開によりeを近似するプログラムを書け.
Diの値は, iを3で割った余りが2のときに2, 4, 6, 8と増えています.
手続きを定義すると次のようになります.
;; 反復的プロセスを生成
(define (cont-frac n d k)
(define (iter i result)
(if (= i 0)
result
(iter (- i 1)
(/ (n i)
(+ (d i) result)))))
(iter k 0))
(define (euler k)
(+ 2
(cont-frac (lambda (i) 1.0)
(lambda (i)
(if (= (remainder i 3) 2)
(* 2.0 (/ (+ i 1) 3))
1.0))
k)))
実行してみます.自然対数の底は定義済みでしたので,その結果と比較します.
ようこそ DrRacket, バージョン 6.1 [3m]. 言語: Pretty Big; memory limit: 2048 MB. > e 2.718281828459045 > (euler 10) 2.7182817182817183 > (euler 100) 2.7182818284590455 >
それらしい値が得られています.
0 件のコメント:
コメントを投稿