无法用渐变重现错误

时间:2018-01-23 08:35:57

标签: matlab gradient numerical-methods

计算变量的梯度

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

我收到错误

  

指数超出矩阵维度。

     

渐变错误(第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)

(具有相干维度的变量的梯度计算), 我没有错。

另请注意,我没有一个名为gradient的变量:

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)有效?

1 个答案:

答案 0 :(得分:1)

您的问题是您输入的顺序。 awk -v d1="$(date --date="-60 min" "+[%d/%m/%Y:%H:%M:%S")" -v d2="$(date "+[%d/%m/%Y:%H:%M:%S")" '$0 > d1 && $0 < d2' log.log 起作用的原因是因为前两个输入都是长度为5.更清楚的示例是看输入顺序的重要性如下。

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

如果您将原始输入的顺序更改为以下内容,则应该可以正常工作。

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