ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Операции над матрицами и векторамиВ системе MatLab достаточно просто выполняются математические операции над матрицами и векторами. Рассмотрим сначала простые операции сложения и умножения матриц и векторов. Пусть даны два вектора a = [1 2 3 4 5]; % вектор-строка тогда умножение этих двух векторов можно записать так c = a*b; % c=1+2+3+4+5=16 В соответствии с операциями над векторами, умножение вектор-строки на вектор-столбец дает число, а умножение вектор-столбца на вектор-строку дает двумерную матрицу, что и является результатом вычислений в приведенном примере, т.е. Сложение и вычитание двух векторов записывается так a1 = [1 2 3 4 5]; Следует обратить внимание, что операции сложения и вычитания можно выполнять между двумя векторами-столбцами или двумя векторами-строками. Иначе MatLab выдаст сообщение об ошибке, т.к. разнотипные векторы складывать нельзя. Так обстоит дело со всеми недопустимыми арифметическими операциями: в случае невозможности их вычисления система MatLab сообщит об ошибке и выполнение программы будет завершено на соответствующей строке. Аналогичным образом выполняются операции умножения и сложения между матрицами: A = [1 2 3; 4 5 6; 7 8 9]; Операции вычисления обратной матрицы, а также транспонирования матриц и векторов, записываются следующим образом: a = [1 1 1]; % вектор-строка Из приведенного примера видно, что операция транспонирования матриц и векторов обозначается символом ‘ (апостроф), который ставится после имени вектора или матрицы. Вычисление обратной матрицы можно делать путем вызова функции inv() или возводя матрицу в степень -1. Результат в обоих случаях будет одинаковым, а два способа вычисления сделано для удобства использования при реализации различных алгоритмов. Если в процессе вычислений требуется поэлементно умножить, разделить или возвести в степень элементы вектора или матрицы, то для этого используются операторы: .* - поэлементное умножение; Рассмотрим работу данных операторов на следующем примере. a = [1 2 3]; % вектор-строка В заключении данного параграфа рассмотрим несколько функций полезных при работе с векторами и матрицами. Для поиска максимального значения элемента вектора используется стандартная функция max(), которая возвращает найденное максимальное значение элемента и его позицию (индекс): a = [1 6 3 4]; или v = max(a); % v = 6; Приведенный пример показывает два разных способа вызова функции max(). В первом случае определяется и максимальное значение элемента и его индекс в векторе, а во втором – только максимальное значение элемента. В случае с матрицами, данная функция определяет максимальные значения, стоящие в столбцах, как показано ниже в примере: A = [4 3 5; 6 7 2; 3 1 8]; Полный синтаксис функции max() можно узнать, набрав в командном окне MatLab команду help <название функции> Аналогичным образом работает функция min(), которая определяет минимальное значение элемента вектора или матрицы и его индекс. Другой полезной функцией работы с матрицами и векторами является функция sum(), которая вычисляет сумму значений элементов вектора или столбцов матрицы: a = [3 5 4 2 1]; При вычислении суммы S2 сначала вычисляется сумма значений элементов матрицы А по столбцам, а затем, по строкам. В результате, переменная S2 содержит сумму значений всех элементов матрицы А. Для сортировки значений элементов вектора или матрицы по возрастанию или убыванию используется функция sort() следующим образом: a = [3 5 4 2 1]; b1 = sort(a); % b1=[1 2 3 4 5] для матриц A = [4 3 5; 6 7 2; 3 1 8]; Во многих практических задачах часто требуется найти определенный элемент в векторе или матрице. Это можно выполнить с помощью стандартной функции find(), которая в качестве аргумента принимает условие, в соответствии с которым и находятся требуемые элементы, например: a = [3 5 4 2 1]; В приведенном примере символ ‘= =’ означает проверку на равенство, а символ ‘~=’ выполняет проверку на неравенство значений элементов вектора а. Более подробно об этих операторах будет описано в разделе условные операторы. Еще одной полезной функцией работы с векторами и матрицами является функция mean() для вычисления среднего арифметического значения, которая работает следующим образом: a = [3 5 4 2 1]; Структуры в MatLab При разработке программ важным является выбор эффективного способа представления данных. Во многих случаях недостаточно объявить простую переменную или массив, а нужна более гибкая форма представления данных. Таким элементом может быть структура, которая позволяет включать в себя разные типы данных и даже другие структуры. Структуры задаются следующим образом: S = struct('field1',VALUES1,'field2',VALUES2,...); где field1 – название первого поля структуры; VALUES1 – переменная первого поля структуры, и т.д. Приведем пример, в котором использование структуры позволяет эффективно представить данные. Таким примером будет инвентарный перечень книг, в котором для каждой книги необходимо указывать ее наименование, автора и год издания. Причем количество книг может быть разным, но будем полгать, что не более 100. Для хранения информации об одной книге будем использовать структуру, которая задается в MatLab с помощью ключевого слова struct следующим образом: S = struct('title','','author','','year',0); В итоге задается структура с тремя полями: title, author и year. Каждое поле имеет свой тип данных и значение. Для того, чтобы записать в эту структуру конкретные значения используется оператор ‘.’ (точка) для доступа к тому или иному полю структуры: S.title = 'Евгений Онегин'; и таким образом, переменная S хранит информацию о выбранной книге. Однако по условиям задачи необходимо осуществлять запись не по одной, а по 100 книгам. В этом случае целесообразно использовать вектор структур lib, который можно задать следующим образом: lib(100,1) = struct('title','','author','','year',0); и записывать информацию о книгах так: lib(1).title = 'Евгений Онегин'; Данный пример показывает удобство хранения информации по книгам. Графически массив структур можно представить в виде таблицы, в которой роль столбцов играют поля, а роль строк элементы массива структур (рис. 1.1). При работе со структурами полезными являются следующие функции: isstruct(S) – возвращает истину, если аргумент структура которые позволяют программно определить всю необходимую информацию о той или иной структуре и корректно выполнять обработку ее полей.
Рис. 1.1. Графическое представление массива структур хранения информации по 100 книгам Ячейки в MatLab Ячейки также как и структуры могут содержать разные типы данных, объединенные одной переменной, но в отличии от вектора структур, вектор ячеек может менять тип данных в каждом элементе. Таким образом, вектор ячеек является универсальным контейнером – его элементы могут содержать любые типы и структуры данных, с которыми работает MatLab – векторы чисел любой размерности, строки, векторы структур и другие (вложенные) векторы ячеек. Методы создания вектора ячеек похожи на методы создания вектора структур. Как и в случае структур, векторы ячеек могут быть созданы либо путём последовательного присваивания значений отдельным элементам массива, либо созданы целиком при помощи специальной функции cell(). Однако в любом случае важно различать ячейку (элемент вектора ячеек) и её содержимое. Ячейка – это содержимое плюс некоторая оболочка (служебная структура данных) вокруг этого содержимого, позволяющая хранить в ячейке произвольные типы данных любого размера. Приведем пример создания вектора ячеек хранения разных типов данных. book = struct('title','Онегин','author','Пушкин','year',2000); Здесь задан вектор ячеек MyCell с тремя элементами. Первый элемент соответствует структуре, второй – строке, а третий – числу. В этом и заключается особенность организации данных с помощью ячеек: у каждого элемента свой тип данных. Для обращения к содержимому той или иной ячейки используются фигурные скобки, внутри которых ставится индекс элемента с которым предполагается работа: MyCell{1} выведет на экран title: 'Евгений Онегин' Если же используются круглые скобки, то будет возвращена структура данных вместо отдельных значений, например MyCell(1) выведет [1x1 struct] Для того чтобы задать вектор или матрицу ячеек с пустыми (неопределенными) значениями, используется функция cell() как показано ниже. MyCellArray = cell(2, 2); задается матрица размером 2х2. Данную инициализацию целесообразно выполнять когда нужно определить большой вектор или матрицу ячеек и в цикле задавать их значения. В этом случае MatLab сразу создает массивы нужных размеров, в результате чего повышается скорость выполнения программ. В заключении рассмотрим возможность программирования функции с произвольным числом аргументов благодаря использованию ячеек. Для этого в качестве аргумента функции указывается ключевое слово varargin, которое интерпретируется внутри функции как вектор ячеек с переданными аргументами: function len = SumSquare(varargin) Данная функция вычисляет сумму квадратов чисел, которые передаются ей следующим образом: SumSquare([ 1 2], [3 4]) % ответ 30 Таким образом, благодаря использованию ячеек функции SumSquare() можно передавать произвольное число двумерных векторов. Не нашли, что искали? Воспользуйтесь поиском:
|