[數值微分]數值微分的誤差分析

上篇文章中提到不知道時間間隔deltaT的微分形式是如何計算出來的,多方查找找到了答案,如下記錄。

對於離散數據求微分,不能直接使用求導公式來計算,需要利用數值方法中的知識。即數值微分(可參考《數值方法》[美]安妮·戈林鮑姆等)。具體內容資料很多不再贅述,然而數值微分對於誤差採用的是截斷或者舍入的方法,因此數值微分一定存在誤差。
三種數值微分方法
然而誤差的絕對存在不代表近似值一定小於真實值,隨着h值的減小,截斷誤差f(h)與舍入誤差g(h)會逐漸接近,當兩個近似值相近時,數值微分達到最大精度,可以證明,此時誤差約等於機器精度的平方根,當h繼續減小,由於舍入誤差的存在,此時誤差會逐漸擴大。用matlab可以計算如下。
在這裏插入圖片描述
由於我電腦中未安裝matlab,用python計算了在sin(0)處隨h逐漸減小的數值微分結果。

import pandas as pd
import numpy as np


def get_diff(h):
	x = np.arange(0,1,h)
	y = np.sin(x)
	df = np.diff(y)
	res = df/h
	return res[0]-1
def print_diff(h):
	for i in range(10):
		h=h/10
		print(get_diff(h))
		
print_diff(1)

或者

import pandas as pd
import numpy as np


def get_diff(h):
	t = np.sin(0+h)-np.sin(0)
	res = t/h
	return res-1
def print_diff(h):
	for i in range(10):
		h=h/10
		print(get_diff(h))
		
print_diff(1)

兩種結果一致,思路略有差別,另外不能使用yield。原理略過。
附上結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章