六阶导数的有限差分法有点冷门但挺好用,是你想在不牺牲太多精度的情况下搞高阶导数。pade_firstder.mpade_secder.m两个函数就是干这个的,写得还蛮清晰,都是基于 Pade 格式的紧致差分法,稳定性不错。

三对角矩阵的初始化是在pade_init.m里搞定的,自动生成的网格点,不过你也可以改下代码,把网格xp从外面传进去。要注意边界点,改动时别把边界条件搞乱了,不然容易炸。

实际用法呢,看看pade_test.m就行,里面有测试例子,蛮好上手。要做地形数据、图像梯度提取、甚至数值模拟里求解 PDE,套上它都还挺顺手的。

不过注意一点,六阶差分不太适合那种变化剧烈的函数,像是有尖峰或强突变的地方,算出来不太准。

如果你平时写Matlab代码,又常跟数值导数打交道,这套东西可以收藏下。想要更低阶或者变种形式的导数实现,推荐你看看这些:

如果你手头的导数精度老是不过关,或者想减少网格点却不想损失太多准确率,可以试试它。