验证数值微分的精度
来源
在进行姿态解算的时候,有一个环节是“通过角度求角速率”,用到离散点求微分的知识,也就是“数值微分”。有人说离散点直接差分就好了,但对于对精度有一定要求的时候,直接差分可以胜任吗?验证方法
身边恰好有一本《工程数学基础教程》(天津大学出版社,P316),上面介绍的数值微分方法,包括插值型求导公式、两点数值微分公式和三点数值微分公式。插值型求导方法需要事先知道所有的插值点,才能写出公式,不能达到实时性的要求。
插值型求导公式:
两点数值微分公式,以一阶差商代替导数,其实就是我们所说的差分公式,截断误差为O(h)(与h同阶):
三点数值微分公式,是为提高精度对两点数值微分公式进行的改进,三点对应二次差值多项式,公式为:
当f(x)的三阶导在[x0,x2]上有界时,三点的截断误差均为O(h^2)。MATLAB验证精度
插值型求导方法毫无实时性,不再讨论;
两点数值微分实时性最好,可以在获取采样点的同时进行数值微分求解;
三点数值微分实时性稍差,通过公式我们发现求x1点处的微分值,需要用到x2点值。这样的话,数值微分的解算比采样少了一个节拍。
下面通过MATLAB进行精度验证两点数值微分和三点数值微分方法的精度,验证思路是:
a. 首先确定一个多项式,对多项式进行取点作为我们的模拟采样点,多项式进行求导作为数值微分结果对照的标准;
%设定一个多项式,并求出导数形式
syms x;
y = (x-1) * (x-2) * (x-3) * (x-4);
dy = diff(y);
h = 1/