数值方法导论/数值微分
外观
< 数值方法导论
目标
- 解释数值微分的前向、后向和中心差分法的定义
- 找到连续函数的一阶导数的近似值
- 推断数字的精度
- 找到离散函数的一阶导数的近似值(在离散数据点给出)
资源
以下代码实现了此方法
from math import exp
def forward_diff(f, x, h=0.0001):
df = (f(x+h) - f(x))/h
return df
x = 0.5
df = forward_diff(exp, x)
print 'first derivative = ', df
print 'exp(', x, ') = ', exp(x)
以下代码实现了此方法
from math import exp
def backward_diff(f, x, h=0.0001):
df = (f(x) - f(x-h))/h
return df
x = 0.5
df = backward_diff(exp, x)
print 'first derivative = ', df
print 'exp(', x, ') = ', exp(x)
以下代码实现了此方法
from math import exp
def center_diff(f, x, h=0.0002):
df = (f(x+h) - f(x-h))/(2.0*h)
return df
x = 0.5
df = center_diff(exp, x)
print 'first derivative = ', df
print 'exp(', x, ') = ', exp(x)
泰勒级数 允许我们将函数展开成无限级数。如果函数在数字 h 处无限可微,我们可以使用泰勒级数来近似该函数。我们可以使用泰勒级数推导出后向、前向和中心差分法,这也给出了近似误差的定量估计。
例如, 函数可以用截断的泰勒级数来近似
以下是使用不同h值,通过中心差分公式计算x=0.5时的一阶导数的程序。结果表明,随着步长的减小,近似值变得更加准确(有效数字更多),但当步长过小时,舍入误差变得显著。
from math import exp
def center_diff(f, x, h=0.0001):
df = (f(x+h) - f(x-h))/(2.0*h)
return df
x = 0.5
df = center_diff(exp, x)
print 'first derivative = ', df
print 'exp(', x, ') = ', exp(x)
h=0.125
for i in range(50):
df = center_diff(exp, x, h)
print "h=", h, "df=", df
h = h/2.0