计算机的错误计算(五)

摘要  计算机的错误计算(四)探讨了计算机对一元二次方程的计算精度问题。本文讨论导数的计算精度问题。

       任给一个单变元函数与一个自变量的值,有两类方法可以计算函数在该值处的导数:数值法与符号法。其中前者是根据导数的定义或其变种来计算,而后者是先求出导函数然后将值代入而得。

       下面通过一个案例来讨论用数值法计算导数时计算机的计算结果的精度问题。

例1[1].  用中心差商公式求 f(x)=\sqrt{x} 在 x=3 的如下导数值:

f'(x)=\frac{\sqrt{3+h}-\sqrt{3-h}}{2h}.

       从理论上说,步长 h 越小,计算结果就越准确,但实际情况是怎样呢? 

       首先,导数的准确值为

\frac{1}{2\sqrt{3}}=0.288675134594812...\,.

       假设 h=0.1^5,用下列C代码计算

double \,\,\,h=1e-5;\\ double \,\,\,fz=sqrt(3+h)-sqrt(3-h);\\ double \,\,\,fm=2*h;\\printf("\%15.15lf",fz/fm);

则Visual Studio 2010 下,输出为 0.288675134607619。这样,正确有效数字有 9 位。

       但是,若缩小步长,比如取 h=0.1^{15}(即改上面代码中的 1e-51e-15),则同样的环境,输出为 0.333066907387547。这时,没有 1 位 正确数字。计算机算出的结果毫无价值。

       您若不方便编程验证,那么可以拷贝

(sqrt(3+1e-5)-sqrt(3-1e-5))/(2*1e-5)

或 

(sqrt(3+1e-15)-sqrt(3-1e-15))/(2*1e-15)

至 Excel 的单元格中计算(先输入 = ,然后 粘贴进去,再 回车),看看效果如何。

       最后再总结一句:梯度是许多个偏导数的组合,并且在人工智能中被广泛应用于优化算法中。因此,建议人工智能专家关注导数计算精度对模型训练和预测的影响。

参考文献

[1] 曾喆昭, 文卉. 数值计算.北京: 清华大学出版社, 2005.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值