前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数值微分|有限差分法的误差分析

数值微分|有限差分法的误差分析

作者头像
fem178
发布2020-09-01 15:12:03
2.5K0
发布2020-09-01 15:12:03
举报

在所有有限差分表达式中,系数之和为零。对舍入误差的影响可能很大。

h

很小时,

f(x),f(x ±h), f(x ± 2h), f(x ± 3h), f(x ± 4h), f(x ± 5h)

的值几乎相等。当它们通过系数相乘再相加,可能会丢失几个有效数字。

f^{\prime}(x) = \frac{f(x+h)-f(x-h)}{2h}+ O(h^2) \qquad(1)

以(1)为例,分子可能会为0。但是我们不能使h太大,因为这样截断错误将变得过大。为了解决这个矛盾,我们可以采取以下措施:

  • 1 使用双精度浮点数运算
  • 2 采用精确度至少为
O(h^2)

的有限差分公式

例如,用中心差分法计算

f(x) = e^{−x}

x=1

处的二阶导数。取不同的

h

值以及精度为

10^{-6}

10^{-8}

,手算结果见下表

精确值为

f^{\prime\prime}(1) = e^{-1}= 0.36787944

。精度为

10^{-6}

时,

h

的最佳值为0.08。由于截断和舍入错误的共同影响,三位有效数字丢失。

h

大于最佳值,主要错误是由截断引起的。

h

小于最佳值,舍入误差变得明显。

精度为

10^{-8}

时,结果精确到四位有效数字。这是因为额外的精度降低了舍入误差。最佳

h

约为0.02。

Python的双精度计算

import math

h = 0.02
x = 1.0                                                                                   

ddf = ( math.exp(-(x+h)) - 2*math.exp(-(x)) + math.exp(-(x-h)) ) / (h*h)

print(ddf)

输出结果:

h的取值对双精度计算影响不大。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数值分析与有限元编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档