上篇文章中提到不知道时间间隔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