Plot 在方案中绘制导数

Plot 在方案中绘制导数,plot,scheme,racket,derivative,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

我写了一个导数函数如下:

(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)
朗球拍是进口的,但我得到的只是一个白色的屏幕。我做错什么了吗?我是否应该将导数函数中的(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)

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

(define (f x) (der (sin x) 0.5))
有很多问题。首先,由于
der
返回一个函数,因此
f
所做的就是返回一个函数-它不在
x
上进行计算。也许你想要:

(define f (der (sin x) 0.5))
因此
f
实际上绑定到
x
的函数

其次,
der
的参数应该是一个函数,但是对于
(sinx)
您最多只能传递一个数字

总之,您可能需要以下内容:

(define f (der sin 0.5))
注意,0.5的
h
可能太大,无法得到合理的导数(回想一下
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))))

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

(define (f x) (der (sin x) 0.5))
有很多问题。首先,由于
der
返回一个函数,因此
f
所做的就是返回一个函数-它不在
x
上进行计算。也许你想要:

(define f (der (sin x) 0.5))
因此
f
实际上绑定到
x
的函数

其次,
der
的参数应该是一个函数,但是对于
(sinx)
您最多只能传递一个数字

总之,您可能需要以下内容:

(define f (der sin 0.5))
注意,0.5的
h
可能太大,无法得到合理的导数(回想一下
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))))

我使用名为幂级数的函数创建了一个sin函数。我修改了我的代码以符合您的建议,但我的函数仍然没有按照我的意图绘制图形。您在此处定义的“f”的绘图是否有效,或者我是否遗漏了什么?在绘制任何内容之前,您是否确认您的
sin
order of sin
函数是否有效?也就是说,是绘图问题还是计算问题?不,这似乎是问题所在。如果在scheme中定义了sin函数,为什么写入(der(sin x)0.5)是不正确的?因为
(sin x)
将尝试使用
x
的值运行
sin
函数,然后返回介于-1和1之间的结果。对于你的
der
函数,第一个参数应该是一个函数,而不是-1和1之间的数字。当我按照你的建议将h设得非常小时,我的图形会振荡,而不是按照我的预期。你能看一看我编辑的代码并告诉我你是否能想出一个好的原因来解释为什么会发生这种情况吗?我使用一个名为power series的函数创建了一个sin函数。我修改了我的代码以符合您的建议,但我的函数仍然没有按照我的意图绘制图形。您在此处定义的“f”的绘图是否有效,或者我是否遗漏了什么?在绘制任何内容之前,您是否确认您的
sin
order of sin
函数是否有效?也就是说,是绘图问题还是计算问题?不,这似乎是问题所在。如果在scheme中定义了sin函数,为什么写入(der(sin x)0.5)是不正确的?因为
(sin x)
将尝试使用
x
的值运行
sin
函数,然后返回介于-1和1之间的结果。对于你的
der
函数,第一个参数应该是一个函数,而不是-1和1之间的数字。当我按照你的建议将h设得非常小时,我的图形会振荡,而不是按照我的预期。你能看一看我编辑的代码,告诉我你是否能想出一个好的理由来解释为什么会发生这种情况吗?我建议使用双侧估计:(/((f(+xh)(f(-xh)))2.0)而不是上面的单侧。我建议使用双侧估计:(/((f(+xh)(f(-xh)))2.0)而不是上面的单侧。