不能用梯度重现错误

cannot reproduce error with gradient

在计算变量的梯度

[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAx, DELTAy, depth);

我收到一个错误

Index exceeds matrix dimensions.

Error in gradient (line 67) g(2:n-1,:) = (f(3:n,:)-f(1:n-2,:)) ./ (h(3:n) - h(1:n-2));

但是,输入具有一致的维度:

size(INTrho)
size(DELTAx)
size(DELTAy)
size(depth)

ans =

    1080         149          52

ans =

    1080           1

ans =

149 1

ans =

52     1

如果我尝试以下操作

[dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3)

(具有相干维度的变量的梯度计算), 我没有收到任何错误。

另请注意,我没有一些名为梯度的变量:

which gradient

/Applications/MATLAB_R2017a.app/toolbox/matlab/datafun/gradient.m

我的错误可能是什么原因?

编辑: 部分答案

如果我让尺寸完全一样

DELTAx=repmat(DELTAx, 1,numel(DELTAy),numel(depth));
DELTAy=repmat(DELTAy, size(DELTAx,1),1,numel(depth));
ddepth=repmat(depth,  size(DELTAx,1),size(DELTAy,2),1);

然后 gradient 有效

[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAx, DELTAy, ddepth);

但是,为什么 [dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3) 有效?

您的问题是您输入的顺序。 [dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3) 起作用的原因是因为前两个输入的长度都是 5。下面是一个更清楚的示例,可以了解您的输入顺序的重要性。

[dx,dy,~]=gradient(rand(5,6,3),1:6,1:5,1:3)

如果您将原始输入的顺序更改为以下,它应该可以工作。

[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAy, DELTAx, depth);