首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用梯度再现错误

不能用梯度再现错误
EN

Stack Overflow用户
提问于 2018-01-23 08:35:56
回答 1查看 64关注 0票数 0

在计算变量梯度时

代码语言:javascript
复制
[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))的误差;

然而,投入具有连贯的层面:

代码语言:javascript
复制
size(INTrho)
size(DELTAx)
size(DELTAy)
size(depth)

安= 1080 - 149 52 安= 1080 1 安= 149 1 安= 52 1

如果我尝试以下几点

代码语言:javascript
复制
[dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3)

(具有相干维数的变量梯度计算),没有误差。

还请注意,我没有一些名为梯度的变量:

代码语言:javascript
复制
which gradient

/Applications/MATLAB_R2017a.app/toolbox/matlab/datafun/gradient.m

这可能是我犯错的原因吗?

编辑:部分答案

如果我的尺寸完全相同

代码语言:javascript
复制
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工作

代码语言:javascript
复制
[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAx, DELTAy, ddepth);

但是,为什么[dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3)要工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 17:40:08

你的问题是输入的顺序。[dx,dy,~]=gradient(rand(5,5,3),1:5,1:5,1:3)工作的原因是因为前两个输入都是5长的。下面是一个更清楚的例子,以了解您的输入顺序有多重要。

代码语言:javascript
复制
[dx,dy,~]=gradient(rand(5,6,3),1:6,1:5,1:3)

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

代码语言:javascript
复制
[dINTRHOdx,dINTrhody,~] = gradient(INTrho, DELTAy, DELTAx, depth);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48397291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档