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 件のコメント:
コメントを投稿