Содержание
1. Различные способы ввода матриц в пакете MatLab
Вводить небольшие по размеру матрицы удобно прямо из командной строки. Введите матрицу размерностью два на три
.
Для хранения матрицы используйте двумерный массив с именем A. При вводе учтите, что матрицу А можно рассматривать как вектор-столбец из двух элементов, каждый из которых является вектор-строкой длиной три, следовательно, строки при наборе отделяются точкой с запятой:
» А = [3 1 -1; 2 4 3]
А =
3 1 -1
2 4 3
Для изучения простейших операций над матрицами приведем еще несколько примеров. Рассмотрим другие способы ввода. Введите квадратную матрицу размера три так, как описано ниже:
.
Начните набирать в командной строке
Нажмите клавишу . Обратите внимание, что пакет ничего не вычислил. Курсор мигает на следующей строке без символа ». Продолжите ввод матрицы построчно, нажимая в конце каждой строки . Последнюю строку завершите закрывающей квадратной скобкой, получается:
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:
А 2×3 48 double array
В 3×3 72 double array
С 2×3 48 double array
Итак, в рабочей среде содержится три матрицы, две прямоугольные и одна квадратная.
2. Обращение к элементам матриц в пакете MatLab
Доступ к элементам матриц осуществляется при помощи двух индексов — номеров строки и столбца, заключенных в круглые скобки, например
Элементы матриц могут входить в состав выражений:
» С(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)],
который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом:
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. Найдите значение следующего выражения
Учтите приоритет операций, сначала выполняется транспонирование, потом возведение в степень, затем умножение, а сложение и вычитание производятся в последнюю очередь.
»(А+С)*В^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:
Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу
и затем выделите подматрицу с элементами , задав номера строк и столбцов при помощи двоеточия:
»Р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:
Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в массиве M
Индексация существенно экономит время при вводе матриц, имеющих определенную структуру.
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 на экране появляется графическое окно 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)
В результате получается наглядное представление матрицы.
Работа с матрицами.
Матрица — прямоугольная таблица.
dim A (dimention — размерность) = n*m.
Это означает, что матрица имеет n строк и m столбцов.
-
Матрицы:
- 1*m — матрица-строка;
- n*1 — матрица-столбец;
- n*n — квадратная матрица.
Квадратная матрица — важнейший частный случай.
Если элементы главной диагонали равны 1, а остальные равны 0, то такая матрица называется "единичной" (обозначение: E или I).
Пример: определить матрицу для системы MATLAB.
Решение: в системе MATLAB для матриц применяются буквенные обозначения. Множество элементов записывается в квадратных скобках "[]"; элементы одной строки записываются через запятую или через пробел, строки разделяются точкой с запятой ";".
A = [3 2; 1 4];
или
A = [3 2; 1 4]
A = [3, 2; 1, 4];
или
A = [3, 2; 1, 4]
Рассмотрим различия между строками: очевидно, различие между парами строк состоит лишь в использовании запятой или пробела (см. выше). Другой вопрос — использовать ли точку с запятой в конце строки?
Если Вы хотите, чтобы система MatLab отобразила результат операции в рабочем поле, точку с запятой ставить не нужно.
Приведем результаты работы программ:
Без точки с запятой:
С точкой с запятой:
Любое число является матрцей размерностью 1*1.
Действия над матрицами:
- A+B — сложение (размерности матиц должны совпадать): A+B = [aij+bij] — складываются соответственнае элементы. Команда MATLAB: A+B;
- c*A — умножение на скаляр (с — скаляр, т.е. какое-то число). Команда MATLAB: 2*A;
- A*B — умножение матриц (количество столбцов первой матрицы должно быть равно количеству строк второй). Итоговая матрица имеет размерность: * . Команда MATLAB: A*B;
Внимание! A*B не равно(!) B*A.
Для матриц не определена операция деления (X = b/A). Зато есть операция нахождения обратной матрицы (Команда MATLAB: A -1 ). Тогда X = A -1 *b. Команда MATLAB: X = A^(-1).
Умножение матриц (MATLAB).
Узнать, как математически выполняется умножение матриц, можно в соответствующем разделе: Математика/Умножение матриц.
В MATLAB у множение записывается при помощи оператора * или .* (для поэлементного умножения).
Пример: выполнить умножение матриц в системе MATLAB:
-
Команды MATLAB:
- A = [0 1 -1; 0 2 1];
- B = [1 2; -1 0; 0 1];
- A*B;
Определитель квадратной матрицы.
Естественно, необходимо знать, как математически вычисляется определитель матриц. Почитайте в соответствующем разделе: Математика/Определитель (детерминант) матрицы.
В MATLAB нахождение определителя записывается при помощи команды det( ).
Пример: найти определитель матрицы A = [0 1; 2 0] с помощью MATLAB.
Обратная матрица.
Обязательно прочитайте, как математически вычисляется обратная матрица, в соответствующем разделе: Математика/Нахождение обратных матриц.
В MATLAB нахождение обратных матриц записывается при помощи команды ^(-1).
Пример: найти обратную матрицу для A = [2 3 1; 2 8 0; 5 6 3] с помощью MATLAB.
-
Команды MATLAB:
- A = [2 3 1; 2 8 0; 5 6 3];
- A^(-1)
Ответ: A -1 =[12 -1.5 -4; -3 0.5 1; -14 1.5 5].
1. Матрица строка. Указывается переменная, ставится знак присвоения и в квадратных скобках через запятую или пробел перечисляются элементы:
2. Матрица столбец. В качестве разделителя элементов применяется символ «;»:
3. Квадратная или прямоугольная матрица:
>> C = [5 6 9; 56 45 73; 15,21,36];
4. Генерация вектора. Синтаксис: = : : . Если не указать шаг, то по умолчанию он принимается за 1.
5. Единичная матрица. Синтаксис: =ones( , ).
6. Нулевая матрица. Синтаксис: =zeros( , );
Доступ к ячейкам матрицы. Синтаксис: ( , ). Необходимо помнить, что нумерация строк и столбцов начинается с 1.
Операции с матрицами:
1. Скалярные операции. Умножение и деление матрицы на число, а также сложение и вычитание матрицы и числа (скаляр) – «.*», «./»,«.+», «.–». Каждая скалярная операция выполняются с каждой ячейкой матрицы отдельно. Любая скалярная (поэлементная) операция, то есть операция сразу над всем массивом, в MatLab обозначаются при помощи точки.
2. Сложение и вычитание матриц. Данная операция выполнима только с матрицами одинакового размера. При выполнении операции действие выполняется с соответствующими друг другу ячейками.
3. Произведение матриц. Производится последовательное умножение строки первой матрицы на столбец второй. Для реализации данной операции необходимо выполнение условия (количество строк первой матрицы ровно количеству столбцов во второй матрице). Матрица результата будет иметь столько же строк сколько и в первой матрице, и количество столбцов равное количеству столбцов во второй матрице.
4. Удаление отдельных столбцов или строк. Для удаления отдельных столбцов или строк матрицы используются: пустые квадратные скобки [] и оператор двоеточие (:).
>> C = [24 33 42; 34 47 60; 44 61 78]