Вы находитесь на странице: 1из 18

1

Лекция 3. Основные типы массивов и графика в MATLAB


1. Основные типы массивов в MATLAB.
2. Числовые массивы — numeric array.
3. Массивы логического типа — logical array.
4. Массивы символьного типа — char array.
5. Массивы записей (структуры) — struct array.
6. Массивы ячеек — cell array.
7. Определение типа массива.
8. Общие правила при выводе графиков.
9. Двумерная графика.
10. Трехмерная графика.

3.1. Основные типы массивов в MATLAB


Массивом называют упорядоченную совокупность данных, объединенных одним
именем.
В линейной алгебре массив характеризуется:
□ размерностью.
Размерность массива равна количеству индексов k, которые указывают на
упорядоченность данных в k-мерном пространстве.
Если данные упорядочены в строку (столбец), то их порядок следования
указывается с помощью одного индекса — одномерный массив (вектор).
Если данные упорядочены одновременно по строкам и по столбцам, то их
порядок следования указывается с помощью двух индексов — двумерный массив
(матрица)
Если данные упорядочены по матрицам, то их порядок следования указывается с
помощью трех индексов — трехмерный массив и т. д.

Рис. 1. Графическое отображение одномерного, двумерного и трехмерного


массивов
□ размером.
Размер массива указывают в виде произведения числа элементов по каждому
индексу: n — одномерный массив; m × n — двумерный; m × n × l — трехмерный и
т. д.
□ типом.
Тип массива определяется типом его элементов.
В MATLAB тип массива не инициализируется (предварительно не объявляется).
Все массивы в MATLAB можно объединить в две группы:
□ числовые массивы;
□ нечисловые массивы.
В табл. 1 представлены их основные типы массивов из этих групп.

Таблица 1. Основные типы массивов в MATLAB


Числовые массивы (numeric array) Нечисловые массивы
2

Тип массива Наименование Тип массива наименование


double вещественный, logical array логический
двойной точности
single вещественный, char array массив символов
одинарной точности
int<…> целый со знаком, struct array массив записей
<…> — 8,16,32,64 8, 16, 32,или 64- (structure) (структура)
битовый
uint<…> целый без знака, cell array массив ячеек
8, 16, 32, или 64-
битовый

Напомним, что в MATLAB по умолчанию любая переменная считается матрицей,


поэтому далее особое внимание уделено матрицам различных типов.
Исключение составляет массив записей — особый тип нечислового массива, не
адекватный его определению в линейной алгебре.

3.2. Числовые массивы — numeric array


Числовые массивы объединяют в себе следующие типы массивов (табл. 1):
• double;
• single;
• int8, int16, int32, или int64;
• uint8, uint16, uint32, или uint64.
По умолчанию матрица относится к типу double.
Элементами матриц типа double являются константы вещественного типа двойной
точности (15 значащих цифр после запятой).
Это значит, что во всех внутренних вычислениях элементы матриц воспринимаются
как вещественные числа двойной точности.
В Лекции 2 по умолчанию рассматривались матрицы типа double.
Элементами матриц типа single являются константы вещественного типа
одинарной точности (вдвое меньшей).
Преобразование матрицы A типа double в матрицу типа single выполняется с
помощью функции:
single(A)
С этим типом матриц мы работать не будем.
Элементами матриц типа int8, int16, int32, и int64 являются константы целого
типа со знаком.
Для элементов матриц типа int8 целые константы расположены в диапазоне от –128
до 127, где 128 = 27 и т. д.
Во внутренних вычислениях им соответствуют двоичные эквиваленты,
соответственно, длиной 8, 16, 32 или 64 бита, где старший бит — знаковый.
Элементами матриц типа uint8, uint16, uint32, и uint64 являются константы
целого типа без знака.
Для элементов матриц типа uint8 целые константы расположены в диапазоне от 0
до 255, где 255 = 28 и т. д.
Во внутренних вычислениях им соответствуют двоичные эквиваленты,
соответственно, длиной 8, 16, 32 или 64 бита, где старший бит — значащий.
Матрицы типа int8 и uint8 (и им подобные) вводятся с помощью функций:
int8(A)
uint8(A)
где A — матрица с элементами в квадратных скобках:
Например:
3

>> A = int8([120 -115;-75.7 14.1])


A =
120 -115
-76 14
Преобразование матрицы A типа double в матрицы типа int8 и uint8 (и им
подобные) выполняется с помощью тех же функций:
Например, сформируем A типа double:
>> A = [-15.7 129.5;-130.8 13.9]
A =
-15.7000 129.5000
-130.8000 13.9000
Преобразуем ее в матрицу B типа int8:
>> B = int8(A)
B =
-16 127
-128 14
и в матрицу C типа uint8:
>> C = uint8(A)
C =
0 130
0 14
С матрицами типа int и uint разрешены операции:
• поэлементные арифметические;
• матричного сложения и вычитания;
• отношения;
• логические.
С матрицами типа uint дополнительно разрешены побитовые операции:
С матрицами типа int и uint запрещены операции:
• матричного умножения, деления и возведения в степень;
• вычисления большинства элементарных функций.

3.3. Массивы логического типа — logical array


Массив логического типа — это нечисловой массив (табл. 1), элементами которого
являются логические константы 1 (true) и 0 (false).
Элементы логической матрицы могут вводиться как true и false или 1 и 0, но
выводятся только как 1 и 0:
>> A = [true false;false true]
A =
1 0
0 1
>> B = [0 1;1 1]
B =
0 1
1 1
В MATLAB тип массива не инициализируется, поэтому во внутренних вычислениях
матрица с элементами 1 и 0 может быть отнесена как к типу double, так и к
логическому типу, в зависимости от выполняемых операций.
С матрицами логического типа допустимы операции отношения и логические
операции:
>> A > B % операция отношения
4

ans =
1 0
0 0
>> A | B % логическая операция ИЛИ
ans =
1 1
1 1
>> A+B % арифметическая операция
ans =
1 1
1 2
Элементы матриц логического типа могут задаваться в виде логических выражений:
>> x = [sin(3)<0.5 1;0 (sin(3)<0.1)&(cos(3)<0.2)]
x =
1 1
0 0

3.4. Массивы символьного типа — char array


Массив символьного типа — это нечисловой массив (табл. 1), элементами которого
являются символьные константы — любые последовательности символов,
заключенные в апострофы.
Матрица символьного типа формируется по столбцам:
• элементы столбца должны содержать одинаковое число символов, при этом
пробел считается равнозначным символом.
Автоматическое добавление пробелов в элементах столбца с выравниванием по
левому краю выполняется с помощью функции:
a = char('<char1>','<char2>'...)
где <char1>,<char2>... — элементы столбца — символьные константы с
произвольным количеством символов:
>> a = char('Newton','Scientist','English')
a =
Newton
Scientist
English
□ элементы строки представляют собой слитную запись:
>> b = ['Newton' 'Scientist' 'English']
a =
NewtonScientistEnglish
Пробелы должен предусмотреть пользователь:
>> b = [' Newton ' ' Scientist ' ' English']
a =
Newton Scientist English
□ элементы матрицы представляют собой столбцы, сформированные с помощью
функций char с соответствующими строками.
Одна функция char описывает один столбец матрицы.
Для выравнивания столбцов необходимо добавить пробелы:
>> X = [char('a','aaa') char(' bb',' b') char(' ccc',' c')]
X =
a bb ccc
aaa b c
В некоторых приложениях необходимо представить матрицу числового типа в виде
матрицы символьного типа. Такое преобразование выполняется с помощью функции:
num2str(A)
Например:
5

>> A = [-15.7 129.5;-130.8 13.9]


A =
-15.7000 129.5000
-130.8000 13.9000
>> simbol_A = num2str(A)
simbol_A =
-15.7 129.5
-130.8 13.9
>> B = int8(A)
B =
-16 127
-128 14
>> simbol_B = num2str(B)
simbol_B =
-16 127
-128 14
Однако обратное преобразование невозможно!

3.5. Массивы записей (структуры) — struct array


Массив записей (структура) — это нечисловой массив (табл. 1), элементами
которого являются записи.
Массив записей используется в различных приложениях для описания
M объектов, i = 1, 2, ... , M ,
каждый из которых характеризуется
N параметрами, n = 1, 2, ... , N .
Массив записей (структура) упорядочивает записи об объектах и их параметрах.
Это особый тип массива, не адекватный его определению в линейной алгебре. Прежде
чем дать ему более строгое определение, познакомимся с новыми терминами:
1. поле (field) — имя n-го параметра: скаляра, вектора или матрицы заданного типа;
Число полей равно числу параметров N .
2. значение поля — значение n-го параметра;
3. список полей — список имен параметров;
4. запись — список полей, одинаковый для всех объектов;
Число записей равно числу объектов M .
5. значение записи — список полей с их значениями для i -го объекта.
Массив записей (структура) представляет собой упорядоченную совокупность
значений записей, объединенная одним именем с одним индексом.
Значение i -й записи формируется по каждому n-му полю:
<имя массива>(<i>).<имя n-го поля> = <значение n-го поля>
Имя массива записей выбирается так же, как обычно для любой переменной.
Размер массива записей равен числу записей M .
Для формирования M записей по N полям потребуется M × N операторов
присваивания.
Сформируем массив записей (структуру) с именем personal для описания трех
объектов — трех известных ученых — четырьмя параметрами:
M = 3 , i = 1, 2, 3 ;
N =4, n = 1, 2, 3, 4 .
6

Запись будет включать в себя список из N = 4 полей — имен параметров:


surname — фамилия ученого — скаляр символьного типа;
data — дата рождения ученого (число, месяц, год) — вектор численного типа;
area — область науки — скаляр символьного типа;
disciples — наличие известных учеников — скаляр логического типа.
Для формирования M = 3 записей по N = 4 полям потребуется M × N = 12
операторов присваивания:
>> personal(1).surname = 'Newton';
>> personal(2).surname = 'Darvin';
>> personal(3).surname = 'Fourier';
>> personal(1).data = [25 12 1642];
>> personal(2).data = [12 2 1809];
>> personal(3).data = [21 3 1768];
>> personal(1).area = 'физика';
>> personal(2). area = 'биология';
>> personal(3).area = 'математика';
>> personal(1).disciples = false;
>> personal(2).disciples = false;
>> personal(3).disciples = true;
Размер матрицы записей personal равен числу записей M = 3 .
Список полей выводится по имени массива записей:
>> personal
personal =
1x3 struct array with fields:
surname
data
area
disciples
Значение i-й записи выводится по имени массива записей с указанием индекса в
круглых скобках. Например, значение 2-й записи:
>> personal(2)
ans =
surname: 'Darvin'
data: [12 2 1809]
area : ' биология'
disciples: 0
Значение поля в i-й записи выводится по имени массива записей с указанием индекса
в круглых скобках и, после точки, имени поля. Например, значение поля surname
первой записи:
>> personal(1).surname
ans =
Newton Отформатировано: русский
Значения поля во всех записях выводятся по имени массива с указанием имени поля
после точки. Например, значения поля surname:
>> personal.surname
ans =
Newton
ans =
Darvin
ans =
Fourier

3.6. Массивы ячеек — cell array


Массив ячеек — это самый сложный нечисловой массив (табл. 1), элементами
которого являются ячейки — массивы любой размерности, любого размера и типа.
Подобно матрице в линейной алгебре, матрица ячеек имеет строки и столбцы, и ее
размер равен их произведению m × n.
Матрицу ячеек можно формировать по-разному. Например, сначала сформировать ее
элементы, а затем ввести их подобно матрице типа double, но с элементами в
фигурных скобках.
Сформируем матрицу ячеек A размером 2×3. Сначала сформируем ее элементы:
7

>> A1 = [1 2 3 4;5 6 7 8]; % матрица типа double


>> A2 = [true false true]; % вектор типа logical
>> A3 = eps; % скаляр типа double
>> A4 = personal; % массив записей
>> A5 = [char('a','aaa') char(' bb',' b')]; % матрица символов
>> A6 = int8([159.7 -115.7;-75.7 14.1]); % матрица типа int8
а затем из них сформируем матрицу ячеек A:
>> A = {A1 A2 A3;A4 A5 A6}
A =
[2x4 double] [1x3 logical] [2.2204e-016]
[1x3 struct] [2x6 char ] [2x2 int8]
Другие способы формирования матрицы ячеек рассматриваются на лабораторных
занятиях.
Вывод элементов массива ячеек выполняется по его имени с указанием индексов в
фигурных скобках:
>> A{1,2}
ans =
1 0 1
>> A{2,1}
ans =
1x3 struct array with fields:
surname
data
area
disciples
Для наглядного представления матрицы ячеек предусмотрен ее графический вывод с
помощью функции:
cellplot(A,'legend')

Рис. 2. Графическое представление матрицы ячеек

3.7. Определение типа массива


Для определения типа массива служит функция
class(<имя переменной>)
Например, для рассмотренных выше переменных A2, A5 и A:
>> class(A2),class(A5),class(A)
ans =
logical
8

ans =
char
ans =
cell
Кроме того, для определения типа массива можно воспользоваться функциями,
возвращающими 1 (true), если аргумент, в круглых скобках соответствует
объявленному типу, и 0 (false) — в противном случае. Имена этих функций
начинаются с приставки "is …", что переводится как вопрос "является ли?":
isnumeric(<имя переменной>)
islogical(<имя переменной>)
ischar(<имя переменной>)
isstruct(<имя переменной>)
iscell(<имя переменной>)
Например, для рассмотренных выше переменных A5 и A:
>> isnumeric(A5)
ans =
0
>> iscell(A)
ans =
1

3.8. Общие правила при выводе графиков


Огромное разнообразие графических средств системы MATLAB является одним из
ее основных преимуществ перед другими пакетами программ (Лекция 1).

Прежде чем перейти собственно к построению графиков, познакомимся общими


правилами при их выводе:

□ Текущий график выводится в текущее графическое окно Figure со стандартным


меню и панелью инструментов.

Первый график выводится в окно Figure 1, а каждый следующий — в то же окно


с автоматическим удалением предыдущего графика.

□ Вывод графиков в отдельных графических окнах Figure 1, Figure 2, ... ,


выполняется с помощью функции:
figure

которая ставится перед выводом каждого следующего графика.

□ Присваивание имени текущему графическому окну Figure выполняется с


помощью функции:
figure('Name','<Имя графика>','NumberTitle','off')
□ Вывод нескольких графиков на одних координатных осях в текущее графическое
окно Figure выполняется по команде:
hold on

которая ставится перед выводом каждого следующего графика.

□ Удаление всех графиков из текущего графического окна Figure выполняется по


команде:
hold off
9

которая ставится перед выводом нового графика (графиков) в данное окно.

□ Вывод нескольких независимых графиков в текущее графическое окно Figure


выполняется путем его разбиения на отдельные поля с помощью функции:
subplot(m,n,p)

где m × n — размер матрицы графического окна: m строк и n столбцов; p —


порядковый номер поля выводимого графика, считая по строкам слева направо.

3.9. Двумерная графика


Для построения графиков используются специальные функции, полная информация о
которых дается в справочной системе MATLAB. После обращения к ней по команде
главного меню Help | Product Help следует выбрать раздел MATLAB и в нем —
раздел Graphics.
Двумерная графика предназначена для построения графиков в двумерном
пространстве (на плоскости).
Начнем знакомство с двух "классических" функций построения графиков в
декартовой системе координат:
1. Функция plot — для графиков функций y ( x ) , заданных в дискретных точках, с
линейной интерполяцией между соседними значениями:
plot(x,y[,<параметры управления>])

где:
x, y — аргумент и функция y( x) (векторы или матрицы), согласованные по
длине или размеру.
Если x, y — матрицы, то построение графиков выполняется по столбцам.
В отсутствие аргумента x аргументами служат индексы элементов вектора или
столбцов матрицы.
<параметры управления> — необязательные параметры (признак
необязательности — квадратные скобки), управляющие свойствами графиков,
которые рассматриваются далее.
y( x)
Функцию plot можно использовать для построения графиков нескольких
функций y1 ( x1 ) , y2 ( x2 ) , …:
plot(x1,y1[,<параметры управления>],x2,y2[,<параметры управления>]...)
2. Функция stem — для графиков функций y ( x ) , заданных в дискретных точках, с
выводом значений в виде отсчетов с маркерами:
stem(x,y[,'fill'] [,<параметры управления>])

Необязательный параметр 'fill' указывает на закрашивание маркеров.


Функцию stem используют для построения графиков последовательности чисел,
которую коротко называют " последовательностью".
Прежде чем привести примеры построения графиков, познакомимся с общими
правилами их оформления (табл.2).

Таблица 2. Функции оформления графиков

Функция Назначение
grid Нанесение координатной сетки
title('<текст>') Заголовок графика
xlabel('<текст>') Обозначение осей x, y
10

ylabel('<текст>')
xlim([xmin xmax]) Установка границ по осям x, y
ylim([ymin ymax])
legend('legend1','legend2',...) Размещение легенды в порядке вывода графиков

Отметим, что в приведенных функциях не всегда воспринимается <текст> с русским


алфавитом, поэтому рекомендуется использовать латинский алфавит.
Используем функции plot и stem для построения графиков функций y = sin( x) и
y = x на интервале x ∈ [0; 8π] с шагом ∆x = π 8 . Выведем графики в отдельные
поля текущего графического окна с помощью функции subplot. Функция
построения графика ставится после функции subplot через запятую, а функции
оформления — после функции построения графика через запятую или на отдельной
строке:
>> x = 0:pi/8:8*pi;
>> y1 = sin(x); y2 = sqrt(x);
>> subplot(2,2,1), plot(x,y1), grid, ylabel('y1(x)')
>> title('y1(x) = sin(x) - plot')
>> subplot(2,2,2), stem(x,y1,'fill'), grid, ylabel('y1(x)')
>> title('y1(x) = sin(x) - stem')
>> subplot(2,2,3), plot(x,y2), grid, xlabel ('x'), ylabel('y2(x)')
>> title('y2(x) = sqrt(x) - plot')
>> subplot(2,2,4), stem(x,y2,'fill'), grid, xlabel ('x')
>> ylabel('y2(x)'), title('y2(x) = sqrt(x) - stem')
Выведенные графики представлены на рис. 3.

y1(x) = sin(x) - plot y1(x) = sin(x) - stem


1 1

0.5 0.5
y1(x)

y1(x)

0 0

-0.5 -0.5

-1 -1
0 10 20 30 0 10 20 30

y2(x) = sqrt(x) - plot y2(x) = sqrt(x) - stem


6 6

4 4
y2(x)

y2(x)

2 2

0 0
0 10 20 30 0 10 20 30
x x

Рис. 3. Графики, построенные с помощью функций plot и stem


Построим графики функций y = sin( x ) и y = x с помощью функции plot и
выведем их на одних координатных осях с размещением легенды (рис. 4):
>> figure
11

>> plot(x,y1,x,y2), grid, xlabel ('x'), legend('sin(x)','sqrt(x)')

6
sin(x)
sqrt(x)
5

-1
0 5 10 15 20 25 30
x

Рис. 4. Графики, выведенные на одних координатных осях с размещением легенды


Теперь добавим <параметры управления>, управляющие свойствами графиков.
Условно они разделены на две группы:
□ LineSpec — свойства без стандартных имен;
□ PropertyName — свойства со стандартными именами.
Параметры группы LineSpec определяют тип линии (сплошная, пунктирная и т. д.),
цвет линии и вид маркеров (кружок, крестик и т. д.). Значения параметров (они
приведены в табл. 4.3 учебного пособия) отображаются символами, которые
указываются в апострофах без пробелов в произвольном порядке.
Добавим управляющие параметры группы LineSpec для графиков функций,
представленных на рис. 3:
>> figure
>> subplot(2,2,1), plot(x,y1,'-r'), grid, title('y1(x) = sin(x)')
>> subplot(2,2,2), stem(x,y1,'fill','-m.'), grid, title('y1(x) =
sin(x)')
>> subplot(2,2,3), plot(x,y2,'--g'), grid, xlabel ('x')
>> title('y2(x) = sqrt(x)')
>> subplot(2,2,4), stem(x,y2,'fill','-ks'), grid, xlabel ('x')
>> title('y2(x) = sqrt(x)')
Выведенные графики представлены на рис. 5.
12

y1(x) = sin(x) y1(x) = sin(x)


1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 10 20 30 0 10 20 30

y2(x) = sqrt(x) y2(x) = sqrt(x)


6 6

4 4

2 2

0 0
0 10 20 30 0 10 20 30
x x

Рис. 5. Графики с добавленными параметрами группы LineSpec


Параметры группы PropertyName имеют следующие стандартные имена:
• LineWidth — толщина линии в пунктах (1 пункт ≈ 0,34 мм); задаются
цифрой без апострофов, по умолчанию 0,5;
• MarkerEdgeColor — цвет маркера; задается параметром из табл. 2 в
апострофах; по умолчанию совпадает с цветом линий;
• MarkerFaceColor — цвет закрашивания маркера (для замкнутых маркеров);
задается параметром из табл. 2 в апострофах; ; по умолчанию совпадает с
цветом линий;
• MarkerSize — размер маркера в пунктах; задаются цифрой без апострофов,
по умолчанию 7.
Добавим управляющие параметры группы PropertyName для графиков функций,
представленных на рис. 5:
>> figure
>> subplot(2,2,1), plot(x,y1,'-r','LineWidth',2), grid
>> subplot(2,2,2), stem(x,y1,'fill','-m.','MarkerEdgeColor','k'),
grid
>> subplot(2,2,3), plot(x,y2,'--g','LineWidth',2), grid
>> subplot(2,2,4), stem(x,y2,'fill','-ks',...
>> 'MarkerEdgeColor','r','MarkerSize',4), grid
Выведенные графики представлены на рис. 6.
13

1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 10 20 30 0 10 20 30

6 6

4 4

2 2

0 0
0 10 20 30 0 10 20 30

Рис. 6. Графики с добавленными параметрами группы PropertyName


Функции plot и stem предназначены для построения графиков в линейном
масштабе. На лабораторных работах будут рассмотрены функции с использованием
логарифмического масштаба по одной из осей или обеим осям.
В MATLAB представлено большое разнообразие функций для построения
специальных графиков. Познакомимся с тремя из них:
1. Функция hist —для построения гистограммы с простейшим форматом:
hist(x)

где x — вектор.
Диапазон значений элементов вектора y по умолчанию делится на 10 интервалов,
и гистограмма отображает число попаданий значений элементов вектора x в
центры данных интервалов.
Цвет столбцов выбирается по умолчанию или с помощью функции:
colormap('<символическое имя палитры>')
которая может ставиться до или после функции построения графика.
Символические имена палитр приведены в табл. 4.5 учебного пособия.

Построим гистограмму нормального белого шума длины 10000 с выбором


палитры 'cool' — фиолетово-голубая (рис. 7):
>> figure
>> x = randn(1,10000);
>> hist(x), grid, title('Gaussian White Noise - hist')
>> colormap('cool')
14

Gaussian W hite Noise - hist


3000

2500

2000

1500

1000

500

0
-4 -3 -2 -1 0 1 2 3 4

Рис. 7. Гистограмма нормального белого шума


2. Функция bar — для построения столбцовой диаграммы с простейшим
форматом:
bar(x, width)
где x — вектор; width — ширина столбцов, по умолчанию 0,8, при ширине > 1
Столбцовая диаграмма отображает значения элементов вектора x в виде
столбцов, цвет которых выбирается с помощью функции colormap.

Построим столбцовую диаграмму 100 значений нормального белого шума


(рис. 8):
>> figure
>> x = randn(1,100);
>> bar(x), grid, title('Gaussian White Noise - bar')
>> colormap('flag')
15

Gaussian W hite Noise - bar


3

-1

-2

-3
0 20 40 60 80 100 120

Рис. 8. Cтолбцовая диаграмма нормального белого шума


3. Функция pie — для построения круговой диаграммы с простейшим форматом:
pie(x,explode)
где x — вектор с положительными значениями элементов; если их сумма > 1, то
значения элементов нормируются к их сумме и указываются в процентах;
explode — вектор из единиц и нулей, согласованный по длине с вектором x для
"вытаскивания" требуемых фрагментов.
Круговая диаграмма отображает значения элементов вектора x в виде
фрагментов круга, цвет которых выбирается с помощью функции colormap.

Построим круговую диаграмму для 8 элементов вектора с "вытаскиванием"


наибольшего и наименьшего элементов (рис. 9):
>> figure
>> x = [0.1 0.8 0.2 0.3 0.4 0.9 0.5 0.6];
>> explode = [1 0 0 0 0 1 0 0];
>> pie(x,explode)
>> colormap('winter')
16

3%

16%

21%

13%

5%

8%

11% 24%

Рис. 9. Круговая диаграмма 8-элементного вектора

3.10. Трехмерная графика


Трехмерная графика предназначена для построения в трехмерном пространстве
графиков функций z ( x, y ) .
Их построение начинается с формирования сетки на плоскости xOy с помощью
функции:
[X,Y] = meshgrid(x,y)
где:
x,y — векторы, формирующие сетки по осям x и y;
X,Y — матрицы одинакового размера, формирующие сетку на плоскости xOy;
количество строк равно длине вектора y, а столбцов — длине вектора x.
Если векторы x и y одинаковы, то допускается короткий формат:
[X,Y] = meshgrid(x)
Средства оформления трехмерных графиков такие же, что и для двумерных (табл. 2),
но с учетом дополнительной оси z добавляются функции:
zlabel('<текст>')
zlim([zmin zmax])
В MATLAB представлено большое разнообразие функций для построения
трехмерных графиков, с которыми можно познакомиться в справочной системе
(разд. 3.9). Для понимания специфики построения трехмерного графика достаточно
познакомиться с одной из них, например, с функцией построения графика с
сетчатой поверхностью и автоматическим нанесением координатной сетки:
surf (X,Y,Z[,<параметры управления>])
где:
X, Y — матрицы, формирующие сетку на плоскости xOy с помощью функции
meshgrid

Z — функция z ( x, y ) (вектор или матрица);


<параметры управления> — необязательные параметры, управляющие свойствами
графика, такие же, как для двумерных графиков.
Палитра цветов графика выбирается с помощью функции colormap.
17

Используем функцию surf для построения графика функции z = x 2 + y 2 на


интервале по осям x и y , равном [ −5; 5] , с одинаковыми шагами ∆x = ∆y = 0,25 .
Предварительно сформируем сетку на плоскости xOy с помощью функции meshgrid
короткого формата (рис. 10):
>> figure
>> [X,Y] = meshgrid(-5:0.25:5);
>> Z = X.^2+Y.^2;
>> surf (X,Y,Z), title('Z = X.^2+Y.^2 - surf')
>> colormap('cool')

Z = X. 2+Y. 2 - surf

50

40

30

20

10

0
5
5
0
0

-5 -5

Рис. 10. Трехмерный график, построенный с помощью функции surf


Рассмотренные ранее <параметры управления> могут использоваться для
управления свойствами трехмерных графиков, однако для них предусмотрены и
дополнительные средства, в частности:
• команда вывода на поле графика шкалы цветов:
colorbar
которая обязательно ставится последней и устанавливает соответствие между
значениями функции и их отображением цветом;
• команда преобразования сетчатой поверхности в сплошную:
shading interp
Используем эти команды для построения графика той же функции с выводом в
отдельные поля текущего графического окна (рис. 11):
>> figure
>> [X,Y] = meshgrid(-5:0.25:5);
>> Z = X.^2+Y.^2;
>> subplot(2,1,1),surf (X,Y,Z), title('colorbar')
>> colormap('cool')
>> colorbar
>> subplot(2,1,2),surf (X,Y,Z), title(' shading interp')
>> shading interp
18

colorbar
50

50 40

30

20
0
5 10
5
0 0 0
-5 -5

shading interp

50

0
5
5
0 0
-5 -5

Рис. 11. Трехмерные графики с выводом шкалы цветов (верхний) и


преобразованием сетчатой поверхности в сплошную (нижний)

Оценить