在方案中绘制衍生物

时间:2013-09-17 17:04:14

标签: plot scheme racket derivative

我写了一个衍生函数如下:

(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)

1 个答案:

答案 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))))