Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 无法用渐变复制错误_Matlab_Gradient_Numerical Methods - Fatal编程技术网

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);