Я пытаюсь вычислить градиент трехмерной матрицы, используя MATLAB (версия 2016a).Если я набираю «Справочный градиент», он говорит следующее:
" 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. X-размерность F имеет длину 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, чтобы сделать функциюработа ...