乐正

Actions speak louder than words.

Sicp-ex1-38

问题

在1737年,瑞士数学家莱昂哈德·欧拉发表了一篇论文 De Fractionibus Continuis ,文中 包含了$e - 2$的一个连分式展开,其中的$e$是自然对数的底。在这一分式中,$N_i$全都 是$1$,而$D_i$依次为$1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, \cdots $。请写出一个程序, 其中使用你在练习1.37中所做的cont-frac过程,并能基于欧拉的展开式求出$e$的近似值。

解答

观察$D_i$的值,发现它有着如下的规律:当$(i - 2) \mod 3 = 0$的时候,$D_i = 2 \times \frac {i - 2} {3}$, 否则$D_i = 1$。

所以,求$e$的近似值过程如下:

练习1.38 (ex1-38.scm) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(define (cont-frac-e k)
  (define (d i)
    (define (meet-condition? i)
      (= 0
         (remainder (- i 2) 3)))

    (define (satisfaction i)
      (* 2.0
         (/ (- i 2) 3)))

    (if (meet-condition? i)
        (satisfaction i)
        1))

  (+ 2
     (cont-frac (lambda (i) 1.0)
                d
                k)))

测试

1
2
3
4
5
6
7
8
(cont-frac-e 10)
;Value: 2.3678756476683938

(cont-frac-e 100)
;Value: 2.3678794411714423

(cont-frac-e 1000)
;Value: 2.3678794411714423

draft

« Vim 技巧 sicp-ex1-39 »

Comments