我似乎无法做出正确的结果,但我不知道如何以其他方式设置我的第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时我得到相同的输出......
非常感谢任何帮助!!
答案 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