我写了一个衍生函数如下:
(define (der f h)
(lambda (x)
(/ (- (f(+ x h)) (f x)) h)))
以及寻找第二和第三衍生物的另一个功能:
(define (der-multiple f h n)
(if (= 0 n)
0
(der (f h)))
(- n 1))
我试图如下绘制sin(x)的导数,但它不起作用。
(define (f x) (der (sin x) 0.5))
(require plot)
(plot (function f (- 5) 5 #:label "sine^-1(x)")
#:x-min -5 #:x-max 5 #:y-min -5 #:y-max 5)
lang racket是导入的,但我得到的只是一个白色的屏幕。我在这里做错了吗?我应该将导数函数中的(lambda(x))改为其他东西,以使函数更容易绘制吗?
更新代码
(define (der f h)
(lambda (x)
(/ (- (f(+ x h)) (f x))
h)))
(define (der-multiple f h n)
(if (= 0 n)
f
(der-multiple (der f h) h (- n 1))))
(define (der-sin-fourth h)
(der-multiple sin h 4))
(plot (function (der-sin-fourth 0.5) (- 5) 5 #:label "sine^-4(x)")
:x-min -5 #:x-max 5 #:y-min -5 #:y-max 5)
答案 0 :(得分:1)
您的der
会返回x
的函数,这很好。但是你的
(define (f x) (der (sin x) 0.5))
有很多问题。首先,由于der
返回一个函数,f
所做的就是返回一个函数 - 它不会对x
进行计算。可能你想要:
(define f (der (sin x) 0.5))
以便f
实际上绑定到x
的函数。
其次,der
的参数应该是一个函数,但是(sin x)
,你最好传递一个数字。
总之,您可能需要以下内容:
(define f (der sin 0.5))
注意,你的h
0.5可能太大而无法得到合理的导数(召回sin
在{0,2pi}之外是周期性的)。如果h
非常小,你就不会有任何问题。当然,当你绘制它时,你可以根据需要将x
提高0.5。
您的der-multiple
功能在许多方面都不正确。这是正确的版本:
(define (der-n f h n)
(if (zero? n)
f
(der-n (der f h) h (- n 1))))