log-approx输入整数n和近似日志,使得值返回来自计算序列的前n个项。示例输出为((log-approx 100) 0.75)
,返回接近-1.38629的数字。
我的想法是使用连续分数近似日志。但是我的代码没有返回所需的输出。
到目前为止我的代码。
(define (cont-frac n x k)
(define (iter result count)
(if (= count 0) result
(iter (/ (n count) (+ ( x count) result))
(- count 1))))
(iter 0 k))
(define (log-approx n)
(cont-frac (lambda (i) -1.0)
(lambda (i) n)
100))
这就是我得到的:(log-approx 0.75) ; outputs 1.56467792561282
但它应该是-1.38629。
编辑:我忘了提及该系列的公式。
-log(1 - x)
可以近似为术语(x^k)/k
的总和,k从1到n运行,近似值随着n的增加而提高。
答案 0 :(得分:0)
您应该编写cont-frac
过程以匹配给定的公式(为什么lambda
s?它们只返回常量值!)。还要注意由连续分数计算的结果:它-log(1 - x)
,所以我们必须调整log-approx
。这应该有效:
(define (cont-frac n k)
(define (iter k acc)
(if (zero? k)
acc
(iter (sub1 k) (+ (/ (expt n k) k) acc))))
(iter k 0))
(define (log-approx n)
(- (cont-frac (- 1 n) 100)))
例如:
(log 0.75)
=> -0.2876820724517809
(log-approx 0.75)
=> -0.2876820724517809