如何在我的计划程序中获得第n个衍生物?

时间:2013-09-21 22:00:56

标签: function lambda scheme derivative

我似乎无法做出正确的结果,但我不知道如何以其他方式设置我的第n个值...它正确地确定了0和1导数然后它给了我一个疯狂的负数。你知道这可能是什么问题吗?

代码:

    (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

我试图重新排列它然后else语句以der开头但是当n = 2时我得到相同的输出......

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分: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