Урок 6 — Матрицы. Работа с матрицами в MatLab. Примеры

1. Различные способы ввода матриц в пакете MatLab Вводить небольшие по размеру матрицы удобно прямо из командной строки. Введите матрицу размерностью два на три . Для хранения матрицы используйте двумерный массив с именем A. При вводе учтите, что матрицу А можно рассматривать как вектор-столбец из двух элементов, каждый из которых является вектор-строкой длиной три, следовательно, строки при наборе отделяются точкой с запятой: » А = [3 1 -1; 2 4 3] А = 3 1 -1 2 4 3 Для изучения простейших операций над матрицами приведем еще несколько примеров. Рассмотрим другие способы ввода. Введите квадратную матрицу размера три так, как описано ниже: . Начните набирать в командной строке » В = [4 3 -1 Нажмите клавишу <Enter>. Обратите внимание, что пакет ничего не вычислил. Курсор мигает на следующей строке без символа ». Продолжите ввод матрицы построчно, нажимая в конце каждой строки <Enter>. Последнюю строку завершите закрывающей квадратной скобкой, получается: 2 7 0 -5 1 2] B = 4 3 -1 2 7 0 -5 1 2 Еще один способ ввода матриц состоит в том, что матрицу можно трактовать как вектор-строку, каждый элемент которой является вектор-столбцом. Например, матрицу два на три можно ввести при помощи команды: » С = [[3; 4] [-1; 2] [7; 0]] С = 3 -1 7 4 2 0 Посмотрите переменные рабочей среды, набрав в командной строке whos: А 2x3 48 double array В 3x3 72 double array С 2x3 48 double array Итак, в рабочей среде содержится три матрицы, две прямоугольные и одна квадратная. 2. Обращение к элементам матриц в пакете MatLab Доступ к элементам матриц осуществляется при помощи двух индексов - номеров строки и столбца, заключенных в круглые скобки, например » С(2, 3) ans = 0 Элементы матриц могут входить в состав выражений: » С(1, 1) + С(2, 2) + С(2, 3) ans = 5 Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера m на n хранится в виде вектора длины mn, в котором элементы матрицы расположены один за другим по столбцам [А(1,1) А(2,1) ... А(m,1) ... А(1,n) А(2,n) ... А(m,n)]. Для доступа к элементам матрицы можно использовать один индекс, задающий порядковый номер элемента матрицы в векторе. Матрица С, определенная в предыдущем подразделе, содержится в векторе [C(1,1) C(2,1) C(1,2) С(2,2) С(1,3) С(2,3)], который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом: » С(1) ans = 3 » С(5) ans = 7 3. Операции над матрицами в пакете MatLab: сложение, вычитание, умножение, транспонирование и возведение в степень При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус. Найдите сумму и разность матриц С и А, определенных выше: » S = А+С S = 6 0 6 6 6 3 » R = С - А R = 0 -2 8 2 -2 -3 Следите за совпадением размерности, иначе получите сообщение об ошибке: » S = А+В ??? Error using ==> ± Matrix dimensions must agree. Для умножения матриц предназначена звездочка: » Р = С*В P = -25 9 11 20 26 -4 Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева: » Р = А*3 Р = 9 3 -3 6 12 -3 » Р = 3*А Р = 9 3 -3 6 12 9 Транспонирование матрицы, так же как и вектора, производится при помощи .', а символ ' означает комплексное сопряжение. Для вещественных матриц эти операции приводят к одинаковым результатам: » В' ans = 4 2 -5 3 7 1 -1 0 2 » В.' ans = 4 2 -5 3 7 1 -1 0 2 Замечание 1 Если матрица есть произвольная матрица размера n m, то матрица, транспонированная по отношению к А,есть матрица размера m n: Таким образом, строки матрицы становятся столбцами матрицы , а столбцы матрицы становятся строками матрицы . Комплексно-сопряженная матрица получается из исходной в два этапа: выполняется транспонирование исходной матрицы, а затем все комплексные числа заменяются на комплексно-сопряженные. Сопряжение и транспонирование матриц, содержащих комплексные числа, приведут к созданию разных матриц: »K= [l-i, 2+3i; 3-5i, l-9i] К = 1.0000 – 1.0000i 2.0000 + 3.0000i 3.0000 – 5.0000i 1.0000 – 9.0000i »K' ans = 1.0000 + 1.0000i 3.0000 + 5.0000i 2.0000 – 3.0000i 1.0000 + 9.0000i » K.' ans = 1.0000 - 1.0000i 3.0000 - 5.0000i 2.0000 + 3.0000i 1.0000 - 9.0000i Замечание 2 При вводе вектор-строк их элементы можно разделять или пробелами, или запятыми. При вводе матрицы К применены запятые для более наглядного разделения комплексных чисел в строке. Возведение квадратной матрицы в целую степень производится с использованием оператора ^: » В2 = В^2 B2 = 27 32 -6 22 55 -2 -28 -6 9 Проверьте полученный результат, умножив матрицу саму на себя. Убедитесь, что вы освоили простейшие операции с матрицами в MatLab. Найдите значение следующего выражения (A + С) В3 (A-С)Т. Учтите приоритет операций, сначала выполняется транспонирование, потом возведение в степень, затем умножение, а сложение и вычитание производятся в последнюю очередь. »(А+С)*В^3*(А-С)' ans = 1848 1914 10290 3612 4. Умножение матриц и векторов Вектор-столбец или вектор-строка в MatLab являются матрицами, у которых один из размеров равен единице, поэтому все вышеописанные операции применимы и для умножения матрицы на вектор-столбец или вектор-строки на матрицу. Например, вычисление выражения можно осуществить следующим образом: » a = [1 3 -2]; » B = [2 0 1; -4 8 -1; 0 9 2]; » c = [-8; 3; 4]; » a*B*c ans = 74 5. Блочные матрицы Очень часто в приложениях возникают так называемые блочные матрицы, т.е. матрицы, составленные из непересекающихся подматриц (блоков). Рассмотрим вначале конструирование блочных матриц. Введите матрицы: , , , и создайте из них блочную матрицу . Учитывая, что матрица К состоит из двух строк, в первой строке матрицы А и B, а во второй - С и D, блочную матрицу можно сформировать следующим образом: » К = [А В; С D] K = -1 4 2 0 -1 4 0 5 3 -3 8 9 -3 3 1 10 Блочную матрицу можно получить и другим способом, если считать, что матрица К состоит из двух столбцов, в первом - матрицы А и С, а во втором - В и D: » К = [[А; С] [В; D]] Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу и затем выделите подматрицу с элементами , задав номера строк и столбцов при помощи двоеточия: »Р1 = Р(2:3,2:3) Р1 = 10 12 11 10 Для выделения из матрицы столбца или строки (то есть массива, у которого один из размеров равен единице) следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием без указания пределов. Например, запишите вторую строку матрицы Р в вектор р »p = P(2, :) p = 4 10 12 5 При выделении блока до конца матрицы можно не указывать ее размеры, а использовать элемент end: »p = Р(2, 2:end) p = 10 12 5 6. Удаление строк и столбцов В MatLab парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. Для удаления строки следует присвоить ей пустой массив. Удалите, например, первую строку квадратной матрицы: » М = [2 0 3 1 1 4 6 1 3]; » M(1,:)=[]; » M M = 1 1 4 6 1 3 Обратите внимание на соответствующее изменение размеров массива, которое можно проверить при помощи size: » size(M) ans = 2 3 Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в массиве M » М(:, 2:3) = [] M = 1 6 Индексация существенно экономит время при вводе матриц, имеющих определенную структуру. 7. Заполнение матриц при помощи индексации Выше было описано несколько способов ввода матриц в MatLab. Однако часто бывает проще сгенерировать матрицу, чем вводить ее, особенно если она обладает простой структурой. Рассмотрим пример такой матрицы: . Генерация матрицы Т осуществляется в три этапа: 1. Создание массива T размера пять на пять, состоящего из нулей. 2. Заполнение первой строки единицами. 3. Заполнение части последней строки минус единицами до последнего элемента. Соответствующие команды MatLab приведены ниже. » A(1:5, 1:5) = 0 A= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 » A(1, :) = 1 A= 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 » A(end, 3:end) = -1 A= 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 Создание некоторых специальных матриц в MatLab осуществляется при помощи встроенных функций. 8. Создание матриц специального вида Заполнение прямоугольной матрицы нулями производится встроенной функцией zeros, аргументами которой являются число строк и столбцов матрицы: » A = zeros(3, 6) A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Один аргумент функции zeros приводит к образованию квадратной матрицы заданного размера: » A = zeros(3) A = 0 0 0 0 0 0 0 0 0 Единичная матрица инициализируется при помощи функции eye: » I = eye(4) I= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Функция eye с двумя аргументами создает прямоугольную матрицу, у которой на главной диагонали стоят единицы, а остальные элементы равны нулю: » I = eye(4, 8) I = 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 Матрица, состоящая из единиц, образуется в результате вызова функции ones: » E = ones(3, 7) E = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Использование одного аргумента в ones приводит к созданию квадратной матрицы, состоящей из единиц. MatLab предоставляет возможность заполнения матриц случайными элементами. Результатом функции rand является матрица чисел, распределенных случайным образом между нулем и единицей, а функции randn — матрица чисел, распределенных по нормальному закону: » R = rand(3, 5) R = 0.9501 0.4860 0.4565 0.4447 0.9218 0.2311 0.8913 0.0185 0.6154 0.7382 0.6068 0.7621 0.8214 0.7919 0.1763 Один аргумент функций rand и randn приводит к формированию квадратных матриц: Часто возникает необходимость создания диагональных матриц, т.е. матриц, у которых все недиагональные элементы равны нулю. Функция diag формирует диагональную матрицу из вектор-столбца или вектор-строки, располагая их элементы по диагонали матрицы: » d = [1; 2; 3; 4]; » D = diag(d) D = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 Функция diag служит и для выделения диагонали матрицы в вектор, например » A = [10 1 2; 1 20 3; 2 3 30]; » d = diag(A) d = 10 20 30 9. Поэлементные операции с матрицами Поскольку векторы и матрицы хранятся в двумерных массивах, то применение математических функций к матрицам и поэлементные операции производятся так же, как для векторов. Введите две матрицы , . Умножение каждого элемента одной матрицы на соответствующий элемент другой производится при помощи оператора .*: » С = А.*В С = -2 10 -8 21 -12 -45 Для деления элементов первой матрицы на соответствующие элементы второй используется оператор ./, а для деления элементов второй матрицы на соответствующие элементы первой служит .\: » R1 = А./В1 R1 = -2.0000 2.5000 -0.1250 0.4286 -1.3333 -1.8000 » R2 = А.\В1 R2 = -0.5000 0.4000 -8.0000 2.3333 -0.7500 -0.5556 Поэлементное возведение в степень осуществляется при помощи оператора .^. Показатель степени может быть числом или матрицей того же размера, что и матрица, возводимая в степень. Во втором случае элементы первой матрицы возводятся в степени, равные элементам второй матрицы. 10. Визуализация матриц Матрицы с достаточно большим количеством нулей называются разреженными. Часто необходимо знать, где расположены ненулевые элементы, т.е. получить так называемый шаблон матрицы. Для этого в MatLab служит функция spy. Посмотрим шаблон матрицы G . » spy(G) После выполнения команды spy на экране появляется графическое окно Figure No. 1.На вертикальной и горизонтальной осях отложены номера строк и столбцов. Ненулевые элементы обозначены маркерами, внизу графического окна указано число ненулевых элементов (nz = 19). Наглядную информацию о соотношении величин элементов матрицы дает функция imagesc, которая интерпретирует матрицу как прямоугольное изображение. Каждый элемент матрицы представляется в виде квадратика, цвет которого соответствует величине элемента. Для того чтобы узнать соответствие цвета и величины элемента следует использовать команду colorbar, выводящую рядом с изображением матрицы шкалу цвета (Insert (в графическом окне Figure No. 1), colorbar). Наконец, для печати на монохромном принтере удобно получить изображение в оттенках серого цвета, используя команду colormap(gray) (Edit (в графическом окне Figure No. 1), Colormap, Colormap Editor, Tools, gray). Мы будем работать с матрицей G. Набирайте команды, указанные ниже, и следите за состоянием графического окна: » imagesc(G) » colorbar » colormap(gray) В результате получается наглядное представление матрицы.

Наши рекомендации