1

我写了一个导函数如下:

(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 球拍是进口的,但我得到的只是一个白屏。我在这里做错了吗?我应该将导数函数中的 (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)
4

1 回答 1

1

der返回一个函数x,这很好。但是你的

(define (f x) (der (sin x) 0.5))

有很多问题。首先,由于der返回一个函数,所以f所做的只是返回一个函数——它不对x. 可能你想要:

(define f (der (sin x) 0.5))

所以这f实际上是绑定到的一个函数x

其次, to 的参数应该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))))
于 2013-09-17T18:32:51.027 回答