Common Lisp高阶函数实现初等函数求导

甲:建立高阶函数。

CL-USER > (defun make-derivative (f h)
                    #'(lambda (x)
                        (let ((fx+ (funcall f (+ x h)))
                               (fx- (funcall f (- x h)))
                               (2h (* 2 h)))
                            (/ (- fx+ fx-) 2h))))
MAKE-DERIVATIVE

乙:建立初等函数求导闭包。比如,求sin函数在某点的导数:

CL-USER > (defvar df (make-derivative #'sin 0.001))
#<CLOSURE (LAMBDA (X) :IN MAKE-DERIVATIVE) {24CDEAF5}>
        这里的df就是sin函数的步长为0.001的闭包,求该函数在x=1.5处的导数可以用下式:
CL-USER > (funcall df 1.5)
0.07072091

丙:计算相对误差。sin函数在1.5处的实际导数值为:

CL-USER> (cos 1.5)
0.0707372
        相对误差:
CL-USER> (abs (/ (- 0.07072091 0.0707372) 0.0707372))
2.3024618e-4

丁:提高精度。当然,可以通过缩短步长的方式进一步降低误差,请自试之。


转载于:https://my.oschina.net/u/1011760/blog/289513

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值