我无意中看到了数据的变化。在我看来,Matlab中的梯度函数对于某些输入有一个弱点。假设我有一个类似国际象棋的矩阵,并计算梯度:
matrix = repmat([1 5;5 1], 10, 10)
[Fx,Fy] = gradient(matrix);在矩阵中,我们在两个方向上都有很多变化。但是由于梯度的行为,Fx和Fy只会包含除边界外的零。
这种行为是想要的吗?那么,使用diff()并通过填充实现输入和输出矩阵的大小是否总是更好呢?或者换句话说,使用梯度()代替diff()什么时候有用?
发布于 2022-02-24 16:36:33
文档告诉use,gradient使用中心差异计算内部点的梯度,这解释了棋盘模式的行为。
此函数用于计算在常规网格上计算的函数的梯度。为了使梯度有意义,我们假定函数是可微的。但是中心差分(或任何有限差分格式)只有在函数采样足够密集的情况下才有意义,否则就会出现类似的问题。
https://stackoverflow.com/questions/71253003
复制相似问题