Matlab 无法用渐变复制错误
在计算变量的梯度时Matlab 无法用渐变复制错误,matlab,gradient,numerical-methods,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 14
[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
1080 1
52 1
ans=
1080 149 52
1080 1
52 1
ans=
1080 149 52
1080 1
52 1
149 1
ans=
1080 149 52
1080 1
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);
然后,梯度
起作用
[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);