【发布时间】:2017-12-08 02:25:52
【问题描述】:
我试图找到特定点的(数字)曲率。我将数据存储在一个数组中,我基本上想在每个单独的点找到局部曲率。我四处搜索,在 MATLAB 中找到了三种不同的实现:diff、gradient 和 del2。
如果我的数组名称是arr,我尝试了以下实现:
curvature = diff(diff(arr));
curvature = diff(arr,2);
curvature = gradient(gradient(arr));
curvature = del2(arr);
前两个似乎输出相同的值。这是有道理的,因为它们本质上是相同的实现。但是,gradient 和 del2 实现给出了彼此不同的值以及来自diff。
我无法从文档中准确了解实现的工作原理。我的猜测是其中一些是某种类型的双边导数,而其中一些不是双边导数。让我感到困惑的另一件事是,我当前的实现仅使用来自arr 的数据。 arr 是我的 y 轴数据,x 轴本质上是时间。这些函数是否默认为 1 或类似的步长?
如果有帮助,我想要一个仅使用 previous 数组元素在当前点获取曲率的实现。对于上下文,我的数据使得基于当前点未来数据的曲率计算对我的目的没有用处。
tl;dr 我需要一个严格的曲率点实现,它只使用点左侧的数据。
编辑:感谢下面的答案,基于此,我更好地理解了正在发生的事情。这就是我所指的:
gradient计算内部数据点的中心差。 例如,考虑一个具有单位空间数据 A 的矩阵,它具有 水平梯度 G = 梯度(A)。内部梯度值, G(:,j),是
G(:,j) = 0.5*(A(:,j+1) - A(:,j-1));下标j在2之间变化 和 N-1,其中 N = size(A,2)。
即便如此,我还是想知道如何进行“左手”计算。
【问题讨论】:
标签: arrays matlab gradient differentiation