exponenta event banner

Представление данных как поверхности

Функции печати сеток данных

Графика 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).

Свойства объекта поверхности обеспечивают дополнительный контроль внешнего вида поверхности. Можно задать стили линий кромок, маркеры вершин, раскраску граней, характеристики освещения и т. д.

Визуализация функций двух переменных

  1. Для отображения функции двух переменных z = f (x,y), генерировать X и Y матрицы, состоящие из повторяющихся строк и столбцов, соответственно, в области функции. Эти матрицы используются для вычисления и построения графика функции.

  2. meshgrid функция преобразует область, заданную двумя векторами, x и y, в матрицы X и Y. Затем эти матрицы используются для вычисления функций двух переменных: X являются копиями вектора x и столбцы Y являются копиями вектора y.

Пример 1. Пример: Иллюстрация использования сетки

Для иллюстрации использования 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.

  • Для отображения данных используется функция печати.

  1. Создайте неравномерно дискретизированные данные в диапазоне [-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;
    
  2. linspace функция обеспечивает удобный способ создания равномерно разнесенных данных с требуемым количеством элементов. Следующие операторы создают векторы в диапазоне случайных данных с тем же разрешением, что и созданные оператором -8: .5: 8 в предыдущемsinc пример:

    xlin = linspace(min(x),max(x),33);
    ylin = linspace(min(y),max(y),33);
    
  3. Теперь используйте эти точки для создания равномерно разнесенной сетки:

    [X,Y] = meshgrid(xlin,ylin);
    
  4. Ключ к этому процессу - использовать scatteredInterpolant для интерполяции значений функции в равномерно разнесенных точках на основе значений функции в исходных точках данных (которые являются случайными в данном примере). Этот оператор использует линейную интерполяцию по умолчанию для генерации новых данных:

    f = scatteredInterpolant(x,y,z);
    Z = f(X,Y);
  5. Постройте график интерполированных и неуниформных данных для получения:

    figure
    mesh(X,Y,Z) %interpolated
    axis tight; hold on
    plot3(x,y,z,'.','MarkerSize',15) %nonuniform
    

Изменение структуры данных

Предположим, что имеется коллекция данных со следующими (X, Y, Z) тройками:

XYZ
11152
2189
31100
41100
51100
12103
220
32100
42100
52100
1389
2313
33100
43100
53100
14115
24100
34187
44200
54111
15100
2585
35111
4597
5548

Можно представить данные в векторной форме с помощью различных типов графиков 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 ≤ δ и -π/2phi ≤ π/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