surf
сообщение об ошибке отличается в Matlab или в октаве.
Сообщение об ошибке от Matlab:
Z должна быть матрицей, а не скаляром или вектором .
Проблема здесь довольно ясна, поскольку вы указали Z
(для вас tz
) как вектор.
Сообщение об ошибке от Octave:
поверхность: строки (Z) должны совпадать с длиной (Y), а столбцы (Z) должны совпадать с длиной (X)
Вы здесь не правы, поскольку в вашем примере столбцы (Z) = 1, но длина (X) = 26, поэтому здесь есть ошибка.
Одним из последствий этого является то, что с surf
у вас не может быть «дыр» или неопределенных точек на вашей сетке. В вашем случае у вас есть X-сетка от 1 до 5 и Y-сетка от 2 до 4.5, но точка координаты (2, 4.5) не определена.
@ Луис Мендо, Matlab и Octave допускают использование прототипа surf(matrix_x, matrix_y, matrix_z)
, но третий аргумент matrix_z
все еще должен быть матрицей (а не скаляром или вектором). По-видимому, матрица только из одной строки или столбца не считается матрицей.
Чтобы решить проблему, я предлагаю что-то вроде:
tx = 1:5; % tx is a vector of length 5
ty = 2:0.5:4.5; % ty is a vector of length 6
tz = [-0.32 0.33 0.39 0.09 0.14;
-0.19 0.13 0.15 0.24 0.33;
0.06 0.44 0.36 0.45 0.51;
0.72 0.79 0.98 0.47 0.55;
0.61 0.13 0.44 0.47 0.58;
0.85 0. 0. 0. 0.]; % tz is a matrix of size 6*5
surf(tx,ty,tz);
Обратите внимание, что мне пришлось изобрести некоторые значения в точках, где ваша сетка не была определена, я поставил 0.
, но вы можете изменить его на значение, которое вы предпочитаете.