數值方法導論/數值微分
外觀
< 數值方法導論
目標
- 解釋數值微分的前向、後向和中心差分法的定義
- 找到連續函式的一階導數的近似值
- 推斷數字的精度
- 找到離散函式的一階導數的近似值(在離散資料點給出)
資源
以下程式碼實現了此方法
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