为什么我的连续分数不能正确近似?

发布于 2024-09-26 10:27:52 字数 1000 浏览 3 评论 0原文

阅读更多 SICP,我陷入了 练习 1.3.8。我的代码对于近似 1/phi 可以正常工作,但对于近似 e - 2 不起作用。

(define (cont-frac n d k)
  (define (frac n d k)
        (if (= k 0)
            1.0
            (+ (d k) (/ (n (+ k 1)) (frac n d (- k 1))))))
    (/ (n 1) (frac n d k)))

(define (eulers-e-2)
  (cont-frac (lambda (i) 1.0) 
             (lambda (i)
               (if (= (remainder (+ i 1) 3) 0)
                   (* 2.0 (/ (+ i 1) 3))
                   1.0))
             100))

(define (1-over-phi)
  (cont-frac (lambda (i) 1.0)
             (lambda (i) 1.0)
             100))

我得到的不是 e-2 的 0.7 等等,而是 0.5 等等。我不明白为什么。我很确定我已经在“eulers-e-2”函数中正确定义了“d”。

编辑: 谢谢大家,我是倒着算的。这是固定代码。

(define (cont-frac n d k)
  (define (frac n d i)
        (if (= k i)
            (d i)
            (+ (d i) (/ (n (+ i 1)) (frac n d (+ i 1))))))
    (/ (n 1) (frac n d 1)))

Reading through more SICP and I'm stuck on exercise 1.3.8. My code works properly for approximating 1/phi, but doesn't work for approximating e - 2.

(define (cont-frac n d k)
  (define (frac n d k)
        (if (= k 0)
            1.0
            (+ (d k) (/ (n (+ k 1)) (frac n d (- k 1))))))
    (/ (n 1) (frac n d k)))

(define (eulers-e-2)
  (cont-frac (lambda (i) 1.0) 
             (lambda (i)
               (if (= (remainder (+ i 1) 3) 0)
                   (* 2.0 (/ (+ i 1) 3))
                   1.0))
             100))

(define (1-over-phi)
  (cont-frac (lambda (i) 1.0)
             (lambda (i) 1.0)
             100))

Instead of getting .7 blah blah blah for e-2, I'm getting .5 blah blah something. I can't figure out why. I'm pretty sure I have "d" defined properly in the "eulers-e-2" function.

Edit:
Thanks guys, I was calculating it backwards. Here's the fixed code.

(define (cont-frac n d k)
  (define (frac n d i)
        (if (= k i)
            (d i)
            (+ (d i) (/ (n (+ i 1)) (frac n d (+ i 1))))))
    (/ (n 1) (frac n d 1)))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏有森光若流苏 2024-10-03 10:27:52

您似乎正在计算以下内容:

N1/(D100 + (N101/ D99 + N100/(D98 + N99/(..))))

而不是

N1/(D1 + N2/(D2 + ...))

因为 1/phi 的 N 和 D 是相同的(全 1),您在那里得到了正确的答案。

You seem to be calculating the following:

N1/(D100 + (N101/ D99 + N100/(D98 + N99/(..))))

Instead of

N1/(D1 + N2/(D2 + ...))

Since N and D are the same (all 1s) for 1/phi, you get the right answer there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文