[数值微分]数值微分的误差分析

上篇文章中提到不知道时间间隔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。原理略过。
附上结果
在这里插入图片描述

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