在计算变量梯度时
[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)安= 1080 - 149 52 安= 1080 1 安= 149 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);然后gradient工作
[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAx, DELTAy, ddepth);但是,为什么[dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3)要工作呢?
发布于 2018-01-23 17:40:08
你的问题是输入的顺序。[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);https://stackoverflow.com/questions/48397291
复制相似问题