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

本文探讨数值微分的误差分析,指出数值微分存在的截断和舍入误差。当h减小时,误差先减小后增大,达到最大精度时误差约为机器精度的平方根。文章通过Python代码展示了在sin(0)处计算数值微分的过程,验证这一理论。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值