Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Построение трёхмерных графиков





 

Рассмотрим построение графиков функций двух переменных на прямоугольной области определения. Предположим, что требуется получить поверхность функции на прямоугольнике x [-1, 1], y [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 предоставляет целый набор графических функций для визуализации функций двух переменных, среди них:

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

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

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

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

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

o 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

 

Графическая функция fplot

 

Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/ x, которые имеют устранимые неопределённости. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:

 

fplot('f(x)', [xmin xmax]).

 

Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х:

 

fplot(‘sin(x)/x’,[-10 10]).

 

Один из вариантов её применения демонстрирует рис. 3.18. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х =0 sin x / x =l. Обратите также внимание на две используемые команды: clear (очистить) – очистка графического окна и grid on (сетка) – включение отображения сетки, которая строится пунктирными линиями.

На рис. 3.18 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.

 

 

Рис. 3.18.Построение графика sin(x)/ x функцией fplot







Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...

Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.