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

Применение MATLAB для решения аналитических задач моделирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Работа с матрицами
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
Любимый город. Ячейки содержат информацию о годе основания, первом названии, достопримечательностях и т.д.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]