Поверхностный график Matlab не дает желаемых результатов

Я рисую следующие данные:

a=[...
    0.1,  0.7,   0.00284643369242828;...
    0.1,  0.71,  0.00284643369242828;...]

таким образом, что столбец 1 никогда не превышает примерно 10, а столбец 2 изменяется от 0,7 до 1.

Колонка 3 вроде в порядке

Когда я рисую свою поверхность с помощью surf(a), она выглядит так: введите здесь описание изображения

кажется, что он не учитывает должным образом то, что должно быть x и y.

там что-то кажется странным?


person jason m    schedule 09.06.2013    source источник


Ответы (1)


Я думаю, вам нужно попробовать одну из двух вещей: либо разбить столбец высоты на собственную прямоугольную матрицу Z и использовать surf(Z) для построения каждой точки относительно ее местоположения в матрице (так что ваши оси x и y не будут масштабироваться так, как вы хотите), или вы можете поместить желаемые координаты x и y в их собственные векторы и построить матрицу Z (определенную в каждой точке (xi, yj) для всех i в N и j в M, где x равно Длина N элементов, а длина y составляет M элементов) с surf(x,y,Z).

x = 0.1:0.1:10;    % or whatever increment you need
y = 0.7:0.01:1;    % or whatever increment you need
Z = zeros(length(x),length(y);   % initialized to the correct size, fill with data

Я думаю, вам придется регенерировать свои Z-данные, чтобы они находились в прямоугольной матрице, размерность которой (элементы в x) равна (элементам в y).

EDIT: вам не нужно заново создавать свои данные. Если вы знаете, что у вас есть n уникальных элементов в x и m уникальных элементов в y, вы можете использовать:

X = reshape(data(:,1),m,n);
Y = reshape(data(:,2),m,n);
Z = reshape(data(:,3),m,n);
surf(X,Y,Z);

И это должно дать вам то, что вы ищете.

person Engineero    schedule 09.06.2013