不能用梯度重现错误
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);
在计算变量的梯度
[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);