Графика MATLAB ® определяет поверхность по координатам z точек над прямоугольной сеткой в плоскости x-y. График формируется соединением смежных точек прямыми линиями. Графики поверхности полезны для визуализации матриц, которые слишком велики для отображения в числовой форме, и для построения графиков функций двух переменных .
MATLAB может создавать различные формы поверхностных графиков. Сетчатые графики - это поверхности каркаса, которые окрашивают только линии, соединяющие определяющие точки. Графики поверхности отображают как соединительные линии, так и грани поверхности в цвете. В этой таблице перечислены различные формы.
Функция | Используется для создания |
|---|---|
mesh, surf | График поверхности |
meshc, surfc | График поверхности с контурным графиком под ним |
meshz | График поверхности со навесным графиком (опорная плоскость) |
pcolor | График плоской поверхности (значение пропорционально только цвету) |
surfl | График поверхности, освещенный в указанном направлении |
surface | Низкоуровневая функция (на которой основаны высокоуровневые функции) для создания объектов графики поверхности |
Эти функции полезны при необходимости реструктуризации и интерполяции данных для представления этих данных в виде поверхности.
Функция | Используется для создания |
|---|---|
meshgrid | Прямоугольная сетка в пространстве 2-D и 3-D |
griddata | Интерполяция разрозненных данных |
griddedInterpolant | Интерполянт для данных с привязкой к сетке |
scatteredInterpolant | Интерполяция разрозненных данных |
Описание интерполяции данных см. в разделах Интерполяция данных по сетке и Интерполяция разбросанных данных.
mesh и surf команды создают 3-D графики поверхности матричных данных. Если Z является матрицей, для которой элементы Z(i,j) определить высоту поверхности над нижележащим (i,j) сетка, затем
mesh(Z)
создает цветной вид каркаса поверхности и отображает его на виде 3-D. Аналогично,
surf(Z)
создает цветной фасетный вид поверхности и отображает его на виде 3-D. Обычно фасеты являются квадрилатералями, каждый из которых является постоянным цветом, очерченным черными сетчатыми линиями, но shading позволяет устранить линии сетки (shading flatили для выбора интерполированного затенения по грани (shading interp).
Свойства объекта поверхности обеспечивают дополнительный контроль внешнего вида поверхности. Можно задать стили линий кромок, маркеры вершин, раскраску граней, характеристики освещения и т. д.
Для отображения функции двух переменных z = f (x,y), генерировать X и Y матрицы, состоящие из повторяющихся строк и столбцов, соответственно, в области функции. Эти матрицы используются для вычисления и построения графика функции.
meshgrid функция преобразует область, заданную двумя векторами, x и y, в матрицы X и Y. Затем эти матрицы используются для вычисления функций двух переменных: X являются копиями вектора x и столбцы Y являются копиями вектора y.
Для иллюстрации использования meshgrid, рассмотрим sin(r)/r или sinc функция. Чтобы вычислить эту функцию между -8 и 8 в x и y, нужно передать только один векторный аргумент meshgrid, который затем используется в обоих направлениях.
[X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps;
Матрица R содержит расстояние от центра матрицы, которое является началом координат. Добавление eps предотвращает деление на ноль (на следующем шаге), которое создает Inf значения в данных.
Формирование sinc функция и печать Z с mesh приводит к 3-D поверхности.
Z = sin(R)./R; figure mesh(X,Y,Z)

По умолчанию MATLAB удаляет линии, которые скрыты от вида на графиках сети, даже если грани графика не заполнены. Можно отключить удаление скрытых линий и разрешить прозрачность граней графика сети с помощью hidden команда:
hidden off
MATLAB предоставляет ряд методов, которые могут улучшить информационное содержание графиков. Например, этот график sinc функция использует те же данные, что и предыдущий график, но использует освещение, корректировки вида и другую карту цветов, чтобы подчеркнуть форму графической функции (daspect, axis, view, camlight).
figure colormap hsv surf(X,Y,Z,'FaceColor','interp',... 'EdgeColor','none',... 'FaceLighting','gouraud') daspect([5 5 1]) axis tight view(-50,30) camlight left

См. раздел surf для получения дополнительной информации о графиках поверхности.
Вы можете использовать meshgrid для создания сетки равномерно выбранных точек данных, в которых вычисляются и строятся графики sinc функция. Затем MATLAB строит график поверхности, соединяя соседние матричные элементы с образованием сетки из квадрилатералей.
Чтобы создать график поверхности на основе данных с неравномерной выборкой, используйте scatteredInterpolant для интерполяции значений в равномерно разнесенных точках и последующего использования mesh и surf обычным способом.
В этом примере оценивается sinc функция в случайных точках в пределах определенного диапазона и затем генерирует однородно дискретизированные данные для отображения в виде поверхностного графика. Процесс включает в себя следующие задачи:
Использовать linspace для создания равномерно распределенных значений в диапазоне неравномерно выбранных данных.
Использовать meshgrid для формирования сетки печати с выводом linspace.
Использовать scatteredInterpolant для интерполяции данных с нерегулярной выборкой в регулярно разнесенную сетку, возвращаемую meshgrid.
Для отображения данных используется функция печати.
Создайте неравномерно дискретизированные данные в диапазоне [-8, 8] и используйте их для вычисления функции:
x = rand(100,1)*16 - 8; y = rand(100,1)*16 - 8; r = sqrt(x.^2 + y.^2) + eps; z = sin(r)./r;
linspace функция обеспечивает удобный способ создания равномерно разнесенных данных с требуемым количеством элементов. Следующие операторы создают векторы в диапазоне случайных данных с тем же разрешением, что и созданные оператором -8: .5: 8 в предыдущемsinc пример:
xlin = linspace(min(x),max(x),33); ylin = linspace(min(y),max(y),33);
Теперь используйте эти точки для создания равномерно разнесенной сетки:
[X,Y] = meshgrid(xlin,ylin);
Ключ к этому процессу - использовать scatteredInterpolant для интерполяции значений функции в равномерно разнесенных точках на основе значений функции в исходных точках данных (которые являются случайными в данном примере). Этот оператор использует линейную интерполяцию по умолчанию для генерации новых данных:
f = scatteredInterpolant(x,y,z); Z = f(X,Y);
Постройте график интерполированных и неуниформных данных для получения:
figure mesh(X,Y,Z) %interpolated axis tight; hold on plot3(x,y,z,'.','MarkerSize',15) %nonuniform

Предположим, что имеется коллекция данных со следующими (X, Y, Z) тройками:
| X | Y | Z |
|---|---|---|
| 1 | 1 | 152 |
| 2 | 1 | 89 |
| 3 | 1 | 100 |
| 4 | 1 | 100 |
| 5 | 1 | 100 |
| 1 | 2 | 103 |
| 2 | 2 | 0 |
| 3 | 2 | 100 |
| 4 | 2 | 100 |
| 5 | 2 | 100 |
| 1 | 3 | 89 |
| 2 | 3 | 13 |
| 3 | 3 | 100 |
| 4 | 3 | 100 |
| 5 | 3 | 100 |
| 1 | 4 | 115 |
| 2 | 4 | 100 |
| 3 | 4 | 187 |
| 4 | 4 | 200 |
| 5 | 4 | 111 |
| 1 | 5 | 100 |
| 2 | 5 | 85 |
| 3 | 5 | 111 |
| 4 | 5 | 97 |
| 5 | 5 | 48 |
Можно представить данные в векторной форме с помощью различных типов графиков MATLAB, таких как surf, contour, и stem3, сначала реструктурировав данные. Используйте значения (X, Y) для определения координат в плоскости X-Y, в которой имеется значение Z. reshape и transpose функции могут реструктурировать данные таким образом, что тройки (X, Y, Z) образуют прямоугольную сетку:
x = reshape(X,5,5)'; y = reshape(Y,5,5)'; z = reshape(Z,5,5)';
Изменение формы приводит к трем массивам 5 на 5:
x =
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
y =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
z =
152 89 100 100 100
103 0 100 100 100
89 13 100 100 100
115 100 187 200 111
100 85 111 97 48Теперь можно представить значения Z относительно X и Y. Например, можно создать 3-D граф:
stem3(x,y,z,'MarkerFaceColor','g')

Функции рисования поверхностей могут использовать два дополнительных векторных или матричных аргумента для описания поверхностей с определенными данными x и y. Если Z - матрица m-на-n, x является n-вектором, и y является m-вектором, то
mesh(x,y,Z,C)
описывает сетчатую поверхность с вершинами, имеющими цвет C(i,j) и расположены в точках
(x(j), y(i), Z(i,j))
где x соответствует столбцам Z и y к своим строкам.
В более общем случае, если X, Y, Z, и C - матрицы одинаковых размеров, то
mesh(X,Y,Z,C)
описывает сетчатую поверхность с вершинами, имеющими цвет C(i,j) и расположены в точках
(X(i,j), Y(i,j), Z(i,j))
Этот пример использует сферические координаты для рисования сферы и окрашивания её с помощью рисунка плюсов и минусов в матрице Адамара, ортогональной матрице, используемой в теории кодирования обработки сигнала. Векторы theta и phi находятся в диапазоне -π ≤ theta ≤ δ и -π/2 ≤ phi ≤ π/2. Поскольку theta является вектором строки и phi является вектором-столбцом, умножениями, которые производят матрицы X, Y, и Z являются внешними векторными продуктами.
figure k = 5; n = 2^k-1; theta = pi*(-n:2:n)/n; phi = (pi/2)*(-n:2:n)'/n; X = cos(phi)*cos(theta); Y = cos(phi)*sin(theta); Z = sin(phi)*ones(size(theta)); colormap([0 0 0;1 1 1]) C = hadamard(2^k); surf(X,Y,Z,C) axis square
