Лабораторная работа №3 Графика в matlab. Двумерная и трёхмерная графика. Интерполяции и аппроксимации данных



бет3/10
Дата24.05.2023
өлшемі1,85 Mb.
#96609
түріЛабораторная работа
1   2   3   4   5   6   7   8   9   10
Построение трёхмерных графиков

Рассмотрим построение графиков функций двух переменных на прямоугольной области определения. Предположим, что требуется получить поверхность функции на прямоугольнике x   [-1, 1], [0, 2]. Первый шаг состоит в задании сетки на прямоугольнике, то есть точек, которые будут использоваться для вычисления значений функции. Для генерации сетки предусмотрена функция meshgrid, вызываемая от двух входных аргументов – векторов, задающих разбиения по осям x и y. Функция meshgrid возвращает два выходных аргумента, являющихся матрицами:


>> [X,Y]=meshgrid(-1:0.1:1,0:0.1:2);.


Матрица X состоит из одинаковых строк, равных первому входному аргументу – вектору в meshgrid, а матрица Y – из одинаковых столбцов, совпадающих со вторым вектором в meshgrid. Такие матрицы оказываются необходимыми на втором шаге при заполнении матрицы Z, каждый элемент которой является значением функции z(x,y) в точках сетки. Несложно понять, что использование поэлементных операций при вычислении функции z(x,y) приводит к требуемой матрице:

>> Z=exp(-X).*sin(pi*Y);.


Для построения графика z(x,y) осталось вызвать подходящую графическую функцию, к примеру:


>> mesh(X,Y,Z).


На экране появляется графическое окно, содержащее каркасную поверхность исследуемой функции (рис. 3.11). Обратите внимание, что цвет поверхности соответствует значению функции.



Рис. 3.11

Команда colorbar приводит к отображению в графическом окне столбика, показывающего соотношение между цветом и значением z(x,y). Цветовые палитры графика можно изменять, пользуясь функцией colormap, например, colormap(gray) отображает график в оттенках серого цвета. Некоторые цветовые палитры приведены ниже:



  • bone – похожа на палитру gray, но с легким оттенком синего цвета;

  • colorcube – каждый цвет изменяется от темного к яркому;

  • cool – оттенки голубого и пурпурного цветов;

  • copper – оттенки медного цвета;

  • hot – плавное изменение: черный-красный-оранжевый-жёлтый-белый;

  • hsv – плавное изменение (как цвета радуги);

  • jet – плавное изменение: синий-голубой-зелёный-жёлтый-красный;

  • spring – оттенки пурпурного и жёлтого;

  • summer – оттенки зелёного и жёлтого;

  • winter – оттенки синего и зелёного;

MATLAB предоставляет целый набор графических функций для визуализации функций двух переменных, среди них:

  • surf – залитая цветом каркасная поверхность;

  • meshc, surfc – поверхности с линиями уровня на плоскости xy;

  • contour – плоский график с линиями уровня;

  • contourf – залитый цветом плоский график с линиями уровня;

  • contour3 – поверхность, составленная из линий уровня;

  • surfl – освещённая поверхность.

Все перечисленные функции допускают то же самое обращение, что и mesh, например:

>> surf (X,Y,Z)


>> contourf(X,Y,Z).

Остановимся подробнее на нескольких вопросах. Первый из них: как изменять установки, определённые по умолчанию, при отображении функций линиями уровня при помощи contour, contourf и contour3. Число линий уровня задаётся в четвёртом дополнительном аргументе, например:


>> contourf(X,Y,Z,10).


Вместо числа линий уровня можно указать в векторе те значения z(x,y), для которых требуется построить линии уровня:


>> contour(X,Y,Z,[-0.51 -0.25 -0.01 0.89]).


Несколько сложнее нанести подписи с соответствующим значением z(x,y) к каждой линии уровня. Для этого придётся вызвать contour с двумя выходными аргументами, первый из них – матрица с информацией о положении линий уровня, а второй – вектор с указателями на линии (рис.3.12). Полученные переменные следует использовать в качестве входных аргументов функции clabel:

>> [CMatr, h] = contour(X, Y, Z,[-0.51 -0.25 -0.01 0.89]);


>> clabel(CMatr, h)

Рис. 3.12

Залитые цветом каркасные поверхности, построенные при помощи surf и surfc, имеют постоянный цвет в пределах каждой ячейки. Команда shading interp, вызываемая после surf и surfc, служит для плавного изменения цвета в пределах ячеек и скрытия линий сетки на поверхности. Если желательно убрать сетку и сохранить постоянный цвет ячеек, то достаточно использовать shading flat, а shading faceted придаёт графику прежний вид.


Столь же просто обеспечивается построение графиков сложных поверхностей. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и её проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующие команды:

» [X.Y]=meshgrid(-5:0.1:5);


» Z=X.*sin(X+Y);
» meshc(X.Y,Z).

Окно с построенным графиком показано на рис. 3.13.



Рис. 3.13. Окно с графиками поверхности и её проекции на плоскость под фигурой


Раньше пришлось бы потратить немало времени на составление и отладку нужной для построения такого графика программы. В MATLAB же можно в считанные секунды изменить задающую поверхность функцию Z(X, Y) и тут же получить новый график поверхности с окраской, в данном случае заданной вектором Z, и с её проекцией на плоскость XY.


Мы ограничимся этими примерами построения графиков как достаточно простыми и типовыми. Из них следует важный вывод – для решения той или иной частной задачи надо знать соответствующие команды и функции. В этом вам поможет справочная система MATLAB.
Можно поворачивать построенную фигуру мышью и наблюдать её под разными углами. Рассмотрим эту возможность на примере построения логотипа системы MATLAB – мембраны. Для этого, введя команду membrane, получим исходный график, представленный на рис. 3.14.



Рис. 3.14. Построение мембраны – логотипа системы MATLAB


Для вращения графика достаточно активизировать последнюю справа кнопку панели инструментов с изображением пунктирной окружности со стрелкой. Теперь, введя курсор мыши в область графика и нажав левую кнопку мыши, можно круговыми движениями заставить график вращаться вместе с обрамляющим его параллелепипедом (рис. 3.15).





Рис. 3.15. Вращение трёхмерной фигуры мышью


Графические функции по умолчанию располагают поверхность так, что наблюдатель видит её часть под некоторым углом, а другая – скрыта от взора. Положение наблюдателя определяется двумя углами: азимутом (AZ) и углом возвышения (EL). Азимут отсчитывается от оси, противоположной y, а угол возвышения – от плоскости xy (см. рис. 3.16, на котором положительные направления отсчёта углов обозначены стрелками).





Рис. 3.16


Осмотреть поверхность со всех сторон позволяет функция view. Вызов функции view с двумя выходными аргументами и без входных даёт возможность определить текущее положение наблюдателя (углы выводятся в градусах):


>> [AZ, EL]=view


AZ =
-37.5000
EL =
30.

Эти значения MATLAB использует по умолчанию при построении трёхмерных графиков. Для задания положения наблюдателя следует указать азимут и угол возвышения (в градусах) в качестве входных аргументов view, например: view(0,90) показывает вид на график сверху. Перед поворотом графика целесообразно расставить обозначения к осям, используя, как и для двумерных графиков xlabel и ylabel, и zlabel для подписи к вертикальной оси. Функция view допускает ещё несколько вариантов вызова:



  • view(3) – возврат к стандартным установкам;

  • view([x,y,z]) – помещение наблюдателя в точку с координатами x, y и z.

Освещённая поверхность строится при помощи функции surfl, которая позволяет получить наглядное представление о поведении исследуемой функции. Следует учесть, что лучше сочетать вызов surfl с командой shading interp и цветовой палитрой, содержащей большое количество оттенков (gray, copper, bone, winter и т. д.), поскольку поверхность обладает свойствами рассеивания, отражения и поглощения света, исходящего от некоторого источника. Положение источника можно задавать в четвёртом дополнительном аргументе surfl, причём либо вектором из двух элементов (азимут и угол возвышения источника), либо вектором из трёх элементов (положение источника света в системе координат осей), например: surfl(X,Y,Z,[20 80]) или surfl(X,Y,Z,[6 8 11]).
Разберём теперь работу с несколькими графиками. Первый вызов любой графической функции приводит к появлению на экране графического окна Figure 1, содержащего оси с графиком. Однако, при дальнейших обращениях к графическим функциям прежний график пропадает, а новый выводится в тоже самое окно. Команда figure предназначена для создания пустого графического окна. Если требуется получить несколько графиков в разных окнах, то перед вызовом графических функций следует прибегать к функции figure. Графические окна при этом нумеруются так: Figure 2, Figure 3 и т.д.
Каждое окно имеет свои оси, при наличии нескольких пар осей (в одном окне или в разных) вывод графиков производится в текущие оси. Последняя созданная пара осей является текущей. Для того, чтобы выбрать текущие оси из нескольких имеющихся, достаточно щелкнуть по ним левой кнопкой мыши перед вызовом графической функции. Возможна и обратная ситуация, когда в процессе работы требуется добавлять графики к уже имеющимся на некоторых осях. В этой ситуации перед добавлением графика следует выполнить команду hold on. Для завершения такого режима достаточно воспользоваться hold off.
В одном графическом окне можно расположить несколько осей со своими графиками. Функция subplot предназначена для разбиения окна на части и определения текущей из них. Предположим, что требуется вывести графики на шесть пар осей в одно графическое окно (две по вертикали и три по горизонтали). Создайте графическое окно при помощи figure и выполните команду:

>> subplot(2,1,1).


В левом верхнем углу окна появились оси. Первые два аргумента в subplot указывают на общее число пар осей по вертикали и горизонтали, а последний аргумент означает номер данной пары осей. Нумерация идёт слева направо, сверху вниз. Используйте subplot(2,1,1), subplot(2,1,2) для создания остальных пар осей. Вывод любой из графических функций можно направить в нужные оси, указав их при помощи subplot(2,1,k), например (рис. 3.17):


>> [X,Y]=meshgrid(-5:0.1:5);


>> Z=X.*sin(X+Y);
>> meshc(X,Y,Z)
>> subplot(2,1,1)
>> bar([1.2 0.3 2.8 0.9])
>> subplot(2,1,2)
>> surf(X,Y,Z).



Рис. 3.17






Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет