Разные результаты на графике поверхности в MATLAB - PullRequest
0 голосов
/ 05 апреля 2019
>> x=0:0.001:720;
>> y=sind(x);
>> z=cosd(x);
>> surf(x,y,z);

Я хочу построить поверхность, используя приведенный выше код, то есть x по оси X, y по оси Y и z по оси Z. Я также запрограммировал код на языке FORTRAN для следующих целей, создал CSV-файл и составил его в оригинале. Я получаю результат как это:

FORTRAN Result

Однако в MATLAB у меня появляется похожая идея при использовании: -

>> plot3(x,y,z)

как на этом изображении:

MATLAB Result

но это не поверхность (по понятным причинам).

При использовании команды surf также появляется сообщение об ошибке:

Z должна быть матрицей, а не скаляром или вектором.

В чем может быть проблема с моим кодом?

1 Ответ

1 голос
/ 05 апреля 2019

Использование surf требует Z в качестве матрицы. Это легко исправить с помощью таких функций, как meshgrid (также полезно griddata).

Использование meshgrid делает использование surf очень доступным.

Но и Z, и Y являются просто функциями X, поэтому я не могу объяснить, почему значение Z вашего графика будет меняться как с X, так и с Y. Из перечисленных вами аналитических (математических) уравнений значение Z должно быть постоянным в Y -размерности.

stepsize = 1;     % use 10 for cleaner look
x = 0:stepsize:720;
y = sind(x);
[X,Y] = meshgrid(x,y);
Z = cosd(X);

surf(X,Y,Z)

Surface plot

Обратите внимание, что линии контура прямые и параллельные в измерении Y (с использованием surfc(X,Y,Z)). Surface plot with contours shown beneath

Другой метод заключается в циклическом прохождении элементов x (проиндексированных i) и y (проиндексированных j), где оба x и y (векторы) для вычисления Z(i,j), где Z - это матрица. Из-за назначения по умолчанию для строк и столбцов этот метод требует транспонирования матрицы Z, такой как surf(X,Y,Z.').


Похожие сообщения:
Как я могу построить функцию с двумя переменными в октаве или матлабе?
MATLAB участок участка поверхности

...