【发布时间】:2018-10-11 17:23:21
【问题描述】:
我正在尝试使用 MATLAB(2016a 版)计算 3-D 矩阵的梯度。如果我输入“帮助渐变”,它会显示以下内容:
"HX 和 HY 可以是标量来指定 坐标或向量之间的间距以指定 点的坐标。如果 HX 和 HY 是向量,它们的长度 必须与 F 的相应维度相匹配。。”(强调我的)。
这是一个示例代码:
x = 1:30; nx = length(x);
y = 1:62; ny = length(y);
z = 1:23; nz = length(z);
F = rand(nx,ny,nz);
[FX,FY,FZ] = gradient(F,x,y,z);
在这里,我输入向量 x、y 和 z 来计算梯度。这些是向量,它在帮助中说 HX 和 HY 的长度必须与 F 的相应维度匹配。F 的 x 维度的长度为 nx。所以x向量也有长度nx。根据帮助,它应该可以工作。
但是,我得到一个错误:
Index exceeds matrix dimensions.
Error in gradient (line 112)
h = h(3:n) - h(1:n-2);
当我更深入地研究“梯度”函数时,我在“parse_inputs”嵌入函数中遇到了这一行:
% Swap 1 and 2 since x is the second dimension and y is the first.
loc = v;
if ndim > 1
loc(2:-1:1) = loc(1:2);
end
这是怎么回事?
为什么 MATLAB 交换 x 和 y 维度?
如果我执行以下代码并交换 x 和 y 向量,则代码有效。
x = 1:30; nx = length(x);
y = 1:62; ny = length(y);
z = 1:23; nz = length(z);
F = rand(nx,ny,nz);
[FX,FY,FZ] = gradient(F,y,x,z);
我只是不明白为什么。我环顾了堆栈溢出,但找不到任何问题的答案。
无论如何,帮助似乎有些误导,因为您实际上需要交换 x 和 y 才能使函数工作......
【问题讨论】: