Matlabs函数梯度是否必要?

Is Matlabs function gradient necessary?


我通过可视化数据变化偶然发现了这一点。在我看来,Matlab 中的梯度函数对某些输入有弱点。假设我有一个像棋盘一样的矩阵并计算梯度:
matrix = repmat([1 5;5 1], 10, 10)
[Fx,Fy] = gradient(matrix);

在矩阵中,我们在两个方向上都有很多变化。但是由于梯度的行为,Fx 和 Fy 将只包含除边界之外的零。
这种行为是想要的吗?使用 diff() 然后使用填充实现相等大小的输入和输出矩阵不是总是更好吗?或者换句话说,什么时候使用 gradient() 而不是 diff() 有用?

documentation 告诉用户 gradient 使用 中心差分 来计算内部点的梯度,这解释了 [=18= 的行为].

此函数用于计算在规则网格上评估的函数的梯度。为了使梯度有意义,我们假设函数是可微的。但是中心差分(或任何有限差分方案)只有在函数被足够密集地采样时才有意义,否则你会遇到这样的问题。