Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++, Matlab

.pdf
Скачиваний:
98
Добавлен:
30.03.2015
Размер:
1 Mб
Скачать

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

>>x=2:0.05:2; y=x;

>>[X,Y]=meshgrid(x,y);

>>Z=20+Y^2+X^210*(cos(2*pi*Y)+cos(2*pi*X));

>>contour(Z)

Впримере используется функция meshgrid, которая создает вспомогательные двумерные массивы X и Y, необходимые для вычисления функции двух переменных. Внешний вид графика, построенного с помощью команды contour, показан на рис. 2.2.

Рис. 2.2

Управление графикой

В программной среде Matlab имеется набор команд, которые позволяют установить масштаб и другие настройки внешнего вида графика по желанию пользователя. Для установки масштаба используются следующие команды [3]: axis([XMIN XMAX YMIN YMAX]) – установка диапазонов координат

по осям х и у для текущего двумерного графика;

axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) – установка диапазонов координат по осям х, у и z текущего трехмерного графика.

В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команда grid позволяют наносить сетку на график или отключать ее:

grid on – добавляет сетку к текущему графику;

21

grid off – отключает сетку;

grid – последовательно производит включение и отключение сетки.

В некоторых случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах [1]: hold on – обеспечивает продолжение вывода графиков в текущее окно,

что позволяет добавлять последующие графики к уже существующим; hold off – отменяет режим продолжения графических построений;

hold – работает как переключатель, последовательно включая режим продолжения графических построений и отменяя его.

Команду hold необходимо вызывать перед вторичным и последующими вызовами команды plot.

Если нужно одновременно визуализировать несколько графиков так, чтобы они не мешали друг другу, то это можно сделать двумя способами. Первым решением является построение их в разных графических окнах. Для этого перед вторичным вызовом функции plot следует набрать команду figure. Эта команда создаст новое графическое окно, в которое будут выводиться результаты всех последующих построений.

Вторым решением показа нескольких графиков без конфликта диапазонов осей координат является использование функции subplot. Эта функция позволяет разбить область вывода графической информации на несколько подобластей, в каждую из которых можно вывести графики различных функций.

>>w=exp(x);

>>v=tan(x);

>>subplot(1,2,1); plot(x,v)

>>subplot(1,2,2); plot(x,w)

После того как график уже построен, Matlab позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется команда title [3]:

title('string') – установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.

Для установки надписей возле осей х, у и z используются следующие команды [1]:

xlabel('string');

ylabel('string'); zlabel('string').

Соответствующая надпись задается символьной константой или перемен-

ной 'string'.

22

Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text:

text(X,Y,'string') – добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y);

text(X,Y,Z,'string') – добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z.

Для изменения масштаба двумерных графиков используются команды клас-

са zoom [2]:

zoom – переключает состояние режима интерактивного изменения масштаба для текущего графика;

zoom (FACTOR) – устанавливает масштаб в соответствии с коэффициен-

том FACTOR;

zoom on – включает режим интерактивного изменения масштаба для текущего графика;

zoom off – выключает режим интерактивного изменения масштаба для текущего графика;

zoom out – обеспечивает полный просмотр, т. е. устанавливает стандартный масштаб графика;

zoom xon или zoom yon – включает режим изменения масштаба только по оси х или по оси у;

zoom reset – запоминает текущий масштаб в качестве масштаба по умолчанию для данного графика;

zoom(FIG, OPTION) – применяется к графику, заданному дескриптором FIG, при этом OPTION может быть любым из перечисленных выше аргументов.

Команда zoom позволяет управлять масштабированием графика с помощью мыши. Для этого надо подвести курсор мыши к интересующей вас области рисунка. Если команда zoom включена (on), то нажатие левой кнопки увеличивает масштаб вдвое, а правой – уменьшает вдвое. При нажатой левой кнопке мыши можно выделить пунктирным черным прямоугольником нужный участок графика – при отпускании кнопки он появится в увеличенном виде и в том масштабе, который соответствует выделяющему прямоугольнику.

23

Ход работы

1.Сформировать два вектора x и y:

>>x=0:0.1:2;

>>y=sin(4*x);

2.Выполнить команду

>>plot(x, y)

3.Построить новый график функции y = cos(4x) в том же самом графическом окне, применяя функцию hold.

4.Построить график функции z = ex, разместив его в отдельном окне с помощью функции subplot.

5.Подписать оси графика, настроить цвет линий и тип маркеров, включить изменение масштаба.

6.Построить спираль Архимеда в полярной системе координат по уравнению

ρ= α*θ / (2*π),

где α – шаг спирали, θ – полярный угол. Для этого задать диапазон углов командой

>>t= 0:pi/50:4*pi;

7.С помощью функции polar построить график:

>>polar(t,t/(2*pi))

8.Для создания столбчатой диаграммы задать координату х в виде вектора

>>x=2.9:0.2:2.9

и выполнить команду:

>> bar(x,exp(x.*x))

Обратите внимание, что при выполнении данной функции следует применять поэлементные операции «.*» или «.^». При попытке использования операций возведения в степень «^», деления «/» и умножения «*» (которые не относятся к поэлементным) выводится сообщение об ошибке. В Matlab операции «*» и «^» применяются для перемножения матриц соответствующих размеров

ивозведения квадратной матрицы в степень.

9.Для построения гистограммы задать вектор х и с помощью функции randn создать массив случайных чисел:

>>x=3:0.2:3;

>>y=randn(1000, 1);

24

10.Вывести вектор значений частости на экран:

>>h=hist(y, x)

11.Построить гистограмму

>>hist(y, x)

12. Построить линии уровня функции z = x ex x y y в области –2 ≤ x ≤ 2, –2 ≤ y ≤ 2. Для этого задать векторы x и y, создать матрицу значений (x, y). Построить контурный график функции Z:

>>x=2:0.2:2; y=x;

>>[X,Y]=meshgrid(x);

>>Z=X.*exp(X.^2 Y.^2);

>>contour(X,Y,Z)

Контрольные вопросы

1.Опишите синтаксис и правила использования функций plot, bar и stem. Как построить несколько графиков в одной системе координат?

2.Какие функции используются для построения графиков в разных подобластях одного графического окна?

3.С помощью какой функции можно задать текст надписей на осях графика?

4.Как изменить цвет и стиль линий на графиках?

5.С помощью какой функции можно вставить текст в определенное место на графике?

6.Каким образом можно управлять видом графиков?

7.Какое назначение имеет команда grid on?

8.Для чего используются функции xlabel, ylabel, zlabel, title?

9.Перечислите правила использования функции legend.

10.Каким образом можно изменять цветовое оформление графиков?

Библиографический список

1.Дьяконов, В. П. Matlab 6.5 SP1/7 + Simulink 5/6. Основы применения /

В. П. Дьяконов. – М. : СОЛОН-Пресс, 2005. – 800 с.

2.Курбатова, Е. А. MATLAB 7. Самоучитель / Е. А. Курбатова. – М. : Диа-

лектика, 2005. – 256 с.

3.Лазарев Ю. Ф. MatLAB 5.x / Ю. Ф. Лазарев. – Киев : BHV, 2000. – 384 с.

4.Поршнев, С. В. Matlab 7. Основы работы и программирования : учебник / С. В. Поршнев. – М. : Бином-Пресс, 2011. – 320 с.

25

ЛАБОРАТОРНАЯ РАБОТА 3

ТРЕХМЕРНАЯ ГРАФИКА В MATLAB

Цель работы – изучение возможностей высокоуровневой графики Matlab для отображения функций двух переменных, а также изучение возможностей специальной графики Matlab.

Задание к работе

1.Сформировать график функции двух переменных каркасной поверхностью.

2.Сформировать график функции двух переменных сетчатой поверхностью.

3.Построить катеноид, заданный параметрическими уравнениями, затененной сетчатой поверхностью.

4.Построить поле направлений заданной функции.

5.Вывести траекторию движения точки на плоскости и в пространстве.

6.Сделать выводы по результатам работы.

Пояснения к работе

Система Matlab обладает рядом инструментов для визуализации графиков в трехмерном пространстве. Функции вида z = f(x, y) могут быть выведены на экран в виде трехмерных изображений. Каждой паре значений (x, y) соответствует значение z. Следовательно, для построения трехмерного графика уже не достаточно просто задания ряда значений х и у, т. е. векторов х и у. Необходимо определить для x и y двумерный массив – матрицу значений, по которым будет строиться функция двух переменных. Для создания таких массивов служит функция meshgrid. Функция meshgrid записывается в следующих фор-

мах [1, 3]:

[X,Y] = meshgrid(x,y) – преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х; а столбцы Y – копиями вектора у;

[X,Y] = meshgrid(x) – функция, аналогичная функции [X,Y] =

= meshgrid(x,y);

[X,Y,Z] = meshgrid(x,y,z) – возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков.

26

Пример:

>>[X, Y] = meshgrid(1:4, 13:17)

В результате выполнения команды будет сформировано две матрицы

1

2

3

4

 

13

13

13

13

1

2

3

4

 

14

14

14

14

 

 

 

 

,

 

 

15

 

X = 1 2 3

4

Y = 15 15

15 .

1

2

3

4

 

16

16

16

16

 

2

3

 

 

 

17

17

 

1

4

 

17

17

Построение графиков поверхностей

Простейшим инструментом, способным создавать объемные изображения, является команда plot3. Данная функция представляет собой аналог команды plot, но выполняет построение графиков функции двух переменных z(x, у). Функция plot3 записывается в следующих формах [1, 3]:

plot3(X, Y, Z) – строит массив точек, представленных векторами X, Y и Z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение; plot3(X, Y, Z), где X, Y и Z – три матрицы одинакового размера. Перед использованием функции в данном формате обычно выполняется предваритель-

ное формирование матриц X и Y с помощью команды meshgrid;

plot3(X, Y, Z, S) – обеспечивает построение графиков со спецификацией стиля линий и точек. Тип линии графика задается с помощью строковой константы S. Константа может содержать те же символы, что и аналогичная константа в функции plot;

plot3(X1,Y1,Z1,S1,X2,Y2,Z2,S2,X3,Y3,Z3,S3,…) – строит на од-

ном рисунке графики нескольких функций Zl(Xl,Yl), Z2(X2,Y2), Z3(X3,Y3) и т. д. со спецификацией линий и маркеров каждой из них.

Пример использования функции plot3 может быть следующим:

>>x=3:0.5:3; y=3:0.5:3;

>>[x, y] = meshgrid(x, y);

>>z=x.^2+y.^2;

>>plot3(x, y, z, 'k')

Результат выполнения команд показан на рис. 3.1.

Вданном примере функция plot3 отображает график в виде набора линий, каждая из которых соответствует сечению графика функции z вдоль определенной оси. Для того чтобы получить график в виде сетки, можно использовать команды:

>>hold on

>>plot3(y, x, z)

27

Рис. 3.1

Врезультате выполнения этих команд будет построено два графика одной

итой же функции с взаимно перпендикулярными образующими линиями. Поэтому график имеет вид сетки (напоминает проволочный каркас фигуры).

Сетчатые 3D-графики с окраской

Представление графика с помощью функции plot3 в виде линий не всегда удобно. Более качественную визуализацию можно получить, используя функ-

цию mesh [2]:

mesh(X, Y, Z, C) – выводит в графическое окно сетчатую поверхность Z(X, Y) с цветами узлов поверхности, заданными массивом С;

mesh(X, Y, Z) – аналог предшествующей команды при C = Z, т. е. цвет в этом случае пропорционален высоте поверхности;

meshc(...) – в дополнение к трехмерным поверхностям строит проекцию линий постоянного уровня;

meshz(...) – в дополнение к трехмерным поверхностям строит плоскость отсчета на нулевом уровне, закрывая поверхность, лежащую ниже этого уровня.

Ниже приводится пример применения команды mesh:

>>[X,Y] = meshgrid([3:0.15:3]);

>>Z = X.^2+Y.^2;

>>mesh(X, Y, Z)

>>c = gradient(Z);

>>mesh(X, Y, Z, c)

28

Результат выполнения команд представлен на рис 3.2.

Рис. 3.2

Построение поверхности с окраской

В системе Matlab предусмотрена функция визуализации непрерывной поверхности в трехмерных осях surf:

surf(X, Y, Z, С) – строит цветную параметрическую поверхность по данным матриц X, Y и Z с цветом, задаваемым массивом С;

surf(X, Y, Z) – аналогична предшествующей команде (в данном случае C = Z, так что цвет задается высотой той или иной области поверхности);

h = surf(...) – строит поверхность и возвращает дескриптор объекта класса surface.

Пример построения поверхности – параболоида:

>>[X,Y] = meshgrid([3:0.15:3]);

>>Z = X.^2+Y.^2; surf(X, Y, Z)

>>C = del2(Z); surf(X, Y, Z, C)

Графики функций, заданных параметрически

Для построения функций двух переменных, заданных параметрически, следует вначале задать вектор значений аргумента. Затем необходимо создать дву-

29

мерные массивы X и Y, по которым будет вычисляться матрица функции Z(X, Y) и строиться график. Ниже приведен пример построения заданного параметрически конуса:

>>v = 2*pi:0.1*pi:2*pi; u = v;

>>[u, v] = meshgrid(u, v);

>>X = 0.3*u.*cos(v);

>>Y = 0.3*u.*sin(v);

>>Z = 0.6*u;

>>surf(X, Y, Z)

Результат выполнения команд показан на рис. 3.3.

Рис. 3.3

Так как переменные u и v, а также функции от них представляют собой матрицы значений, то при вычислении X, Y и Z вместо обычного знака «*» необходимо применить операцию поэлементного перемножения «.*».

Следует отметить, что все три функции plot3, mesh и surf могут быть использованы и с одним аргументом Z, который интерпретируется как матрица со значениями точек по оси Oz.

Управление трехмерной графикой

Для масштабирования отдельных участков трехмерных графиков использу-

ется функция axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) с рассмотрен-

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]