暇シリーズ ~連分数展開 (3)~

問題 1.39

正接関数の連分数展開は1770年にドイツの数学者 J. H. Lambert が発表した。xをラジアンで表し、
(数式は「tan 連分数」などでググって調べてください。)
Lambert の式に基づいて正接関数の近似値を計算する手続き (tan-cf x k) を定義せよ。k は問題1.37と同様、計算する項数を指定する。

(define (cont-frac-iter n d k)
  (define (iter i cf)
    (if (= i 0)
        cf
        (iter (- i 1) (/ (n i) (- (d i) cf)))))
  (iter k (/ (n k) (d k))))

これはいつもの cont-frac 手続きの反復プロセス版です。

(define PI 3.1415926535897932)
  
(define (tan-cf x k)
  (define (n i)
    (if (= i 1)
        (* x 1.0)
        (* x x 1.0)))
  (define (d i)
    (- (* 2.0 i) 1))
  (cont-frac-iter n d k))

tan-cf はこんな風に書けます。
なお、ラジアンを扱うので PI を定義しておきます。

では、tan-cf 手続きを用いて tan30° を求めてみます。
度数法で 30° は π/6 ラジアンです。

gosh> (tan-cf (/ PI 6) 1000)
0.5773502691896257