2013-09-21 33 views
1

我似乎无法做出正确的结果,但我不知道如何设置我的第n个值其他任何方式......它正确地执行0和1的导数,然后它给了我一个疯狂的负数。你知道可能是什么问题吗?如何在计划程序中获得第n个衍生物?

代码:

(define (der f h) 
    (lambda (x) (/ (- (f (+ x h)) (f x)) 
          h) 
        ) 
       ) 
    (define (cube x) (* x x x)) 

    (define (many-der f h n) 
     (if (= n 0) 
      f 
      (many-der (der f h) h (- n 1)))) 

    (define der-of-cube-n (many-der cube .00000000000001 2)) 
(der-of-cube-n 5) 

-142108547152020.03

我已经尝试rearange这么那么else语句与德开始,但我得到了相同的输出,当n = 2 .. 。

任何帮助将不胜感激!

回答

3

您的h.00000000000001太小;这么小,以至于你遇到舍入错误。下面是与另一h

(define der-of-cube-n (der-n cube 0.0001 2)) 
> (der-of-cube-n 5) 
30.000597917023697 

注结果:的x^3秒衍生物是6x

当然,Scheme的一个重要特性是它支持精确的任意精度数。所以如果你真的想h这么小,你可以将你的输入公式化为'确切'。像这样:

> (define der-of-cube-n (der-n cube (/ 10000000000000) 2)) 
> (der-of-cube-n 5) 
150000000000003/5000000000000 
> (rationalize (der-of-cube-n 5) 0.01) 
3e1