Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Применение MATLAB для решения аналитических задач моделирования. Учебное пособие
.pdf
Работа с матрицами
41
массив с одной строкой и несколькими столбцами (1 х n). При использовании в качестве разделителя точки с запятой, MATLAB создает векторстолбец (n х 1).
Пробелы и точки с запятыми можно комбинировать таким образом,
чтобы создавать матрицы. Значения вводятся построчно, например, в
табл. 16 приводится пример заполнения матрицы 2х2.
Таблица 16
Результат заполнения матрицы
Формула
Вид
x = [3 4 5;6 7 8]
x =
3
4
5
6
7
8
Векторы
В MatLab используются векторы, скаляры и матрицы. При вводе
элементов массива или вектора их заключают в квадратные скобки. Для
ввода элементов в виде вектора-столбца их разделяют точкой с запятой.
Например, для ввода вектора-строки размером 1×3 используется
следующая команда, в которой элементы строки отделяются пробелами, а
точка с запятой позволяет вывеси значения в виде столбца (рис. 22).
Поэлементный доступ осуществляется по индексам строки и столб-
ца. Для выделения отдельных строки или столбца нужно поставить символ " : " вместо номера. Двоеточие также позволяет выделять целые блоки.

Применение Matlab для решения аналитических задач моделирования
42
Рис. 22. Ввод вектора строки 1х3
Обычно создаются векторы, содержащие числа с равным интервалом, например:
Х = [1 2 3]
Для длинных векторов ввод отдельных чисел нецелесообразен.
Начальное и конечное значения разделяются " : ", скобки не ставятся.
Чтобы изменить шаг между элементами вектора, можно задать вектор следующим образом:
x = 20:2:26
В примере выше х – название вектора, 20 и 26 соответственно
начальное и конечное значения, 2 – расстояние между элементами. Таким
образом, вектор содержит только четные числа.
Примечание: шаг – не обязательно целое число.
Если вы знаете количество элементов, которые хотите получить в
векторе (вместо расстояния между каждым элементом), вы можете использовать функцию linspace:
linspace (первый, последний, число_элементов).
Обратите внимание на использование запятых " , " для разделения
входных данных в функцию linspace.
И linspace, и оператор: создают векторы-строки. Для получения
столбца используется операция транспонирования " ' ". Эта операция преобразует вектор-строку в вектор-столбец.

Работа с матрицами
43
Вы можете создать векторы-столбцы с помощью одной команды,
создав вектор-строку и переставив все это в одну строку. Круглые скобки
используются здесь для указания порядка операций.
Например, команда
>> x=(1:3:15)
Выведет результат в виде вектора-строки с шагом 3.
x = 1 4 7 10 13
Добавление знака " ' " превратит строку в столбец (рис. 23).
Рис. 23. Вектор-столбец с шагом 3
Рандом
MATLAB содержит множество функций, которые помогают создавать часто используемые матрицы, такие как матрицы случайных чисел
(табл. 17).
Таблица 17
Результат выполнения команды рандом
Формула
Вид
х = rand (2)
x =
0,8147
0,1270
0,9058
0,9134
Число 2 в команде rand (2) указывает, что на выходе будет матрица
случайных чисел 2 х 2.

Применение Matlab для решения аналитических задач моделирования
44
Многие функции создания матриц позволяют вводить одно число
для создания квадратной матрицы (n на n) или вводить два числа для создания прямоугольных матриц. Например, команда
>>y = rand(4,2)
создает матрицу 4х2.
Если вам нужна матрица, заполненная 1 или 0, используйте коман-
ду ones или zeros соответственно.
Для определения размера матрицы используется команда size(x);
для создания матрицы таких же размеров, как заданная, – команда
rand(size(x)).
Индексация массивов
Если вы хотите изменить значение элемента массива, можно обра-
титься к нему по его индексу. Значения изменяются с помощью операции
присваивания. Также одному элементу можно присвоить значение другого элемента.
Для быстрой замены значений элементов в строке или столбце ука-
зывается соответствующий номер (табл. 18).
Таблица 18
Пример обращения к столбцу/строке
Для обращения к элементам столбца j
Для обращения к элементам строки i
a ( : , j )
a ( i , : )
Для ссылки на последний элемент можно использовать ключевое
слово MATLAB «end» как индекс строки или столбца. Например,
х = A(end,5). При использовании арифметических операций можно выбрать также предпоследний элемент (end–1) или другие необходимые.
При использовании в качестве индекса оператор двоеточия (:) ука-
зывает все элементы в этом измерении. Код
х = А (:, 1)
создает вектор-столбец, содержащий все элементы из первого столбца A.
Вы можете использовать оператор двоеточия, чтобы указать диапа-
зон значений. Следующий код создает матрицу, содержащую первую и
вторую строки матрицы A:

Работа с матрицами
45
x = A(1:2,:)
Одно значение индекса может использоваться для ссылки на определенные элементы вектора. Например:
х = vector (5)
возвращает пятый элемент вектора vector, если vector является вектором-
строкой или вектором-столбцом.
Один диапазон значений индекса может использоваться для ссылки
на несколько элементов вектора. Например:
х = vector (5: конец)
возвращает подмножество вектора vector, содержащее элементы от 5 до
конца.
Оператор « : » можно использовать для извлечения целых столбцов
массивов.
MATLAB разработан для естественной работы с массивами.
Например, вы можете добавить скалярное значение ко всем элементам
массива или разделить элементы на некоторое число.
Над элементами двух векторов можно проводить бинарные арифметические операции, например, суммировать.
Основные статистические функции в MATLAB могут быть применены к вектору для получения единственного вывода. Максимальное значение вектора можно определить с помощью функции max:
xMax = max (x).
MATLAB имеет функции, которые выполняют математические
операции со всем вектором или массивом значений в одной команде:
xSqrt = sqrt (х).
Оператор * выполняет матричное умножение. При попытке перемножить элементы матриц разного размера, вы получите сообщение
об ошибке. Оператор " . * " выполняет поэлементное умножение и позволяет умножать соответствующие элементы двух массивов одинакового размера.

Применение Matlab для решения аналитических задач моделирования
46
Лабораторная работа № 5.
Функции для работы с матрицами
В зависимости от варианта из табл. 19 постройте матрицу/вектор и
выполните операции над ней.
Таблица 19
Варианты заданий для лабораторной работы № 5
№
варианта
Количество элементов (n), форма
Задание
1
10, 2 вектора-столбца с шагом 2
Выполнить сложение двух векторов
2
12х3, матрица рандомных чисел
Выполнить транспонирование
матрицы
3
5х5, матрица чисел Фибоначчи
Вывести поочередно i строку и
j столбец
4
10, вектор-строка рандомных чисел
Увеличить значения каждого
элемента на 1
5
7х2, матрица рандомных чисел
Вывести каждый 3-й элемент в
каждой строке
6
14, вектор-столбец с шагом 3
Уменьшить значения каждого
элемента на 1
7
10, матрица из чисел с шагом 2
Вывести поочередно i строку и
j столбец
8
3х3, матрица из чисел Фибоначчи
Выполнить транспонирование
матрицы
9
5, вектор-строка с шагом 2
Вывести каждый 2-й элемент
10
12, вектор-столбец с шагом 2
Умножить элементы вектора
на i

Поля структур
47
ПОЛЯ СТРУКТУР
Массивы ячеек и массивы структур – это новый тип данных, который может комбинировать массивы разных типов и размеров для облегчения обработки разных типов данных. Массив ячеек представляет собой
массив, элементами которого являются ячейки, содержащие массивы любого типа, включая массивы ячеек. Массивы ячеек позволяют хранить
массивы с элементами разных типов и размеров. Например, одна из ячеек
может содержать матрицу с целочисленными значениями, другая – массив символов, а третья – вектор вещественных чисел. В Matlab можно создавать массивы ячеек любой размерности.
В массиве ячеек нельзя получить доступ к соответствующему элементу через имя массива ячеек, но можно получить доступ к соответствующему номеру индекса, поскольку массив ячеек хранит указатель на
определенную структуру данных.
При работе с массивами ячеек можно использовать следующие
функции:
• {} cell – позволяет создать массив ячеек;
• cell (M.N) или cell ([M, N]) – создает массив ячеек из MxN пустых
матриц;
• cell (size (M)) – создает массив ячеек из пустых матриц того же
размера, что и массив M;
• cellstr – создает массив ячеек из массива символов;
• cellfun – позволяет применить функцию к каждому элементу мас-
сива ячеек;
• celldisp – отображает содержимое массива ячеек;
• cellplot – отображает графическую структуру массива ячеек;
• deal – используется для обмена данными;
• num2cel – преобразует числовой массив в массив ячеек;
• struct2cell –- преобразует структуру в массив ячеек;
• iscell – определяет, является ли введенная переменная массивом
ячеек.
Для создания массивов ячеек используются конструкторы {} и cell
и некоторые функции для работы с ячейками. Конструктор {} действует
как оператор [] для числовых массивов. Он объединяет данные в ячейки.

Применение Matlab для решения аналитических задач моделирования
48
Например, чтобы создать массив из трех ячеек, нужно ввести следующую
команду:
m = {0 1 2}
m = [0] [1] [2]
Индекс, идущий за именем массива в круглых скобках, определяет
отдельную ячейку, а индекс в фигурных скобках – ее содержимое. Фигурные скобки в данном случае являются конструктором массива ячеек, а
квадратные ( [ ] ) являются конструктором числового массива. Фигурные и
квадратные скобки похожи, но фигурные скобки могут быть вложенными.
Вы можете использовать знакомые операторы горизонтальной и
вертикальной конкатенации для формирования массива ячеек. Также
можно задать массив ячеек путем заполнения данных в отдельных ячейках. Массив автоматически формируется при вводе данных.
Чтобы создать массив ячеек m размером 2 х 2, содержащий числа,
строку символов и вектор, нужно ввести следующие команды:
>>m(1, 1) = {1+2};
m(1, 2) = {'Matlab'};
m(2, 1) = {–10:5:10}
m = [1.0000+ 2.0000] 'Matlab' [1x5 double]
Для обращения к содержимому ячейки нужно указать ее индекс в
фигурных скобках. Содержимое ячейки указывается после оператора присваивания. Например:
m {1, 1} = [1 2 ; 3 4 ] ;
m =[2x2 double]
Ячейки, как и структуры, могут содержать разные типы данных,
объединенные одной переменной, но в отличие от вектора структур, вектор ячеек может менять тип данных в каждом элементе. Таким образом,
вектор ячеек является универсальным контейнером – его элементы могут
содержать любые типы и структуры данных, с которыми работает
MatLab – векторы чисел любой размерности, строки, векторы структур и
другие (вложенные) векторы ячеек.

Поля структур
49
Методы создания вектора клеток аналогичны методам создания
вектора структур. Как и в случае со структурами, векторы ячеек можно
создавать либо путем последовательного присвоения значений отдельным
элементам массива, либо создавать целиком с помощью специальной
функции cell().
Однако в любом случае важно различать ячейку (элемент вектора
ячеек) и ее содержимое. Ячейка – это содержимое плюс некоторая оболочка (служебная структура данных) вокруг этого содержимого, позволяющая хранить произвольные типы данных любого размера в ячейке. Особенность организации данных в виде ячеек заключается в том, что у каждого элемента может быть задан свой тип данных. Например:
book = struct('title','Государь','author',' Макиавелли','year',1523);
Cell(1)={book};
Cell(2)={' Макиавелли'};
Cell(3)={1523};
При указании имени ячейки и ее индекса в круглых скобках на
экран выведется структура данных в соответствующей ячейке. При обращении к содержимому ячейки по ее индексу нужно указать индекс в фигурных скобках. Например, команда Cell{3}выведет на экран год написания книги Государь
year: 1523
Чтобы задать пустую матрицу ячеек или вектор с неопределенными
значениями, в командной строке вводится функция cell(matrix_size):
CellArray = cell(3, 2);
Также в Matlab существует возможность создания функции с произвольным числом аргументов. Для этого используется varargin, синтаксис такой функции приведен ранее в разд. Функции.
В Matlab доступны вложенные массивы ячеек. Предполагается, что
ячейка может содержать массив ячеек и даже массив массивов ячеек.
Массивы, составленные из таких ячеек, называются вложенными. Ячейки,
содержащие данные, отличные от массива ячеек, называются листьями, а
ячейки, содержащие массивы ячеек, называются ветвями.

Применение Matlab для решения аналитических задач моделирования
50
Можно сформировать вложенные массивы ячеек, используя последовательность фигурных скобок, функцию ячейки или операторы присваивания. Для уже сформированных массивов вы можете получить доступ и
управлять отдельными ячейками, подмассивами ячеек или элементами
самих ячеек. При создании вложенных массивов ячеек также можно использовать фигурные скобки.
Для формирования вложенного массива ячеек с применением
функции cell необходимо ввести следующий код:
A = cell(1, 2);
A(1, 2) = {cell(2, 2)};
A(1, 1) = {magic(5)};
A{1, 2}(1, 1) = {[5 2 8; 7 3 0; 6 7 3]};
A{1, 2}(1, 2) = {'Test 1'};
A{1, 2}(2, 1) = {[2-4i 5+7i]};
A{1, 2}(2, 2) = {cell(1,2)}
A{1, 2}{2, 2}(1) = {17};
Использование фигурных скобок на последнем уровне вложенности позволяет обратиться к содержимому ячейки внутри массива.
Лабораторная работа № 6.
Работа со структурами
Создайте структуру не менее, чем из 10 ячеек для хранения информации. Последовательно выведите на экран информацию из разных ячеек
(табл. 20).
Таблица 20
Варианты задания для лабораторной работы № 6
№
варианта
Предметная область
1
Любимый фильм. Ячейки содержат информацию об авторе сценария, кинокомпании, жанре и т.д.
2
Любимая книга. Ячейки содержат информацию об издательстве,
авторе, жанре и т.д.
3
Любимый город. Ячейки содержат информацию о годе основания,
первом названии, достопримечательностях и т.д.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
